комбобокс тоже не выпускает?Циник писал(а):Тут нужно сперва уяснить тебе, что за свои пределы родительский контрол никого не выпускает, по определению.
ListBox
Правила форума
Пожалуйста, ознакомьтесь с правилами данного форума
Пожалуйста, ознакомьтесь с правилами данного форума
- папа Карло
- Шарманщик
- Сообщения: 8563
- Зарегистрирован: 17 фев 2003, 15:04
- Откуда: НН -> BC -> WA -> UT -> CA
-
- Маньяк
- Сообщения: 2803
- Зарегистрирован: 29 май 2003, 22:29
- Откуда: Магадан - Миссиссага
Папа Карло,
Не отвлекайся на флейм. Уже давно пора работать. Солнце высоко. К станку (клавиатуре), товарищ, к станку. Не слушай Циника. Это он специально делает, чтоб тебя затормозить. Не удивлюсь, что он твой конкурент. Тогда всё понятно.
Ты совершенно на правильном пути. Отношение парент-чилд в твоём случае никакого отношения не имеет к отношению экстентов окон (контрол - тож оконный объект). Вернее имеет, если ты сам определишь клиентский ректангл контола, на который нажимаешь, и затем сделаешь MoveWindow или SetWindowPos для листбокса в зависимости от ректангла. Щас попытаюсь найти что-нить похожее на С++.
Не отвлекайся на флейм. Уже давно пора работать. Солнце высоко. К станку (клавиатуре), товарищ, к станку. Не слушай Циника. Это он специально делает, чтоб тебя затормозить. Не удивлюсь, что он твой конкурент. Тогда всё понятно.
Ты совершенно на правильном пути. Отношение парент-чилд в твоём случае никакого отношения не имеет к отношению экстентов окон (контрол - тож оконный объект). Вернее имеет, если ты сам определишь клиентский ректангл контола, на который нажимаешь, и затем сделаешь MoveWindow или SetWindowPos для листбокса в зависимости от ректангла. Щас попытаюсь найти что-нить похожее на С++.
- Циник
- Завсегдатай
- Сообщения: 442
- Зарегистрирован: 17 фев 2003, 17:17
Tы будешь смеяться, товарищ, но тоже не выпускает.папа Карло писал(а):комбобокс тоже не выпускает?Циник писал(а):Тут нужно сперва уяснить тебе, что за свои пределы родительский контрол никого не выпускает, по определению.
Для выпадающего окна комбобокса сам комбобокс не является родителем. Не путай житейское значение этого слова и винайпишное
Вот, специально для тебя нашел в загашниках - Вильям Гейтс III уже куда-то эту статью спрятал. По-моему, достаточно коротко, ясно и прямо в глаз
(см. выделенные жирным шрифтом примеры ниже)
INFO: Window Owners and Parents
ID: Q84190
--------------------------------------------------------------------------------
The information in this article applies to:
Microsoft Windows Software Development Kit (SDK)
Microsoft Win32 Software Development Kit (SDK)
Microsoft Windows 2000
--------------------------------------------------------------------------------
SUMMARY
In the Windows environment, two relationships that can exist between windows are the owner-owned relationship and the parent-child relationship.
The owner-owned relationship determines which other windows are automatically destroyed when a window is destroyed. When window A is destroyed, Windows automatically destroys all of the windows owned by A.
The parent-child relationship determines where a window can be drawn on the screen. A child window (that is, a window with a parent) is confined to its parent window's client area.
This article discusses these relationships and some Windows functions that provide owner and parent information for a given window.
MORE INFORMATION
Although WS_OVERLAPPED windows don't typically have owners, they can. Please see Kyle Marsh's MSDN article "Win32 Window Hierarchy and Styles," which says:
Overlapped windows may own other top-level windows or be owned by other top-level windows or both.
Alternatively, the desktop window can be considered the owner and parent of a WS_OVERLAPPED-style window. A WS_OVERLAPPED-style window can be drawn anywhere on the screen and Windows will destroy any existing WS_OVERLAPPED-style windows when it shuts down.
A window created with the WS_POPUP style does not have a parent by default; a WS_POPUP-style window can be drawn anywhere on the screen. A WS_POPUP-style window will have a parent only if it is given one explicitly through a call to the SetParent function.
The owner of a WS_POPUP-style window is set according to the hWndParent parameter specified in the call to CreateWindow that created the pop-up window. If hWndParent specifies a nonchild window, the hWndParent window becomes the owner of the new pop-up window. Otherwise, the first nonchild ancestor of hWndParent becomes the owner of the new pop-up window. When the owner window is destroyed, Windows automatically destroys the pop up. Note that modal dialog boxes work slightly differently. If hWndParent is a child window, then the owner window is the first nonchild ancestor that does not have an owner (its top-level ancestor).
A window created with the WS_CHILD style does not have an explicit owner; it is implicitly owned by its parent. A child window's parent is the window specified as the hWndParent parameter in the call to CreateWindow that created the child. A child window can be drawn only within its parent's client area, and is destroyed along with its parent.
An application can change a window's parent by calling the SetParent function after the window is created. Windows does not provide a method to change a window's owner.
Windows provides three functions that can be used to find a window's owner or parent:
GetWindow(hWnd, GW_OWNER)
GetParent(hWnd)
GetWindowWord(hWnd, GWW_HWNDPARENT)
GetWindow(hWnd, GW_OWNER) always returns a window's owner. For child windows, this function call returns NULL. Because the parent of the child window behaves similar to its owner, Windows does not maintain owner information for child windows.
The return value from the GetParent function is more confusing. GetParent returns zero for overlapped windows (windows with neither the WS_CHILD nor the WS_POPUP style). For windows with the WS_CHILD style, GetParent returns the parent window. For windows with the WS_POPUP style, GetParent returns the owner window.
GetWindowWord(hWnd, GWW_HWNDPARENT) returns the window's parent, if it has one; otherwise, it returns the window's owner.
Two examples of how Windows uses different windows for the parent and the owner to good effect are the list boxes in drop-down combo boxes and the title windows for iconic MDI (multiple document interface) child windows.
Due to its size, the list box component of a drop-down combo box may need to extend beyond the client area of the combo box's parent window. Windows creates the list box as a child of the desktop window (hWndParent is NULL); therefore, the list box will be clipped only by the size of the screen. The list box is owned by the first nonchild ancestor of the combo box. When that ancestor is destroyed, the list box is automatically destroyed as well.
When an MDI child window is minimized, Windows creates two windows: an icon and the icon title. The parent of the icon title window is set to the MDI client window, which confines the icon title to the MDI client area. The owner of the icon title is set to the MDI child window. Therefore, the icon title is automatically destroyed with the MDI child window.
Последний раз редактировалось Циник 15 сен 2003, 23:09, всего редактировалось 2 раза.
-
- Маньяк
- Сообщения: 2803
- Зарегистрирован: 29 май 2003, 22:29
- Откуда: Магадан - Миссиссага
Для начала посмотри как скрещивают контролы, например, это
http://www.sources.ru/cpp/cpp_file_edit_ctrl.shtml
http://www.sources.ru/cpp/cpp_file_edit_ctrl.shtml
- Циник
- Завсегдатай
- Сообщения: 442
- Зарегистрирован: 17 фев 2003, 17:17
В чем это выражается, товарищ ВГ? В том ли, что товарищ Карло пока не знает почти ничего о наших окнах?vg писал(а):Ты совершенно на правильном пути.
Знаешь, я бы тебе, товарищ, всерьез посоветовал учиться четко выражать свои мысли. Чувствуется, что знаешь предмет, и программу напишешь, а вот объяснить как следует не можешь. На интервью тебе будет с таким языком тяжело. Даже если б оно проходило по-русскиvg писал(а):Отношение парент-чилд в твоём случае никакого отношения не имеет к отношению экстентов окон (контрол - тож оконный объект). Вернее имеет, если ты сам определишь клиентский ректангл контола, на который нажимаешь, и затем сделаешь MoveWindow или SetWindowPos для листбокса в зависимости от ректангла. Щас попытаюсь найти что-нить похожее на С++.
-
- Маньяк
- Сообщения: 2803
- Зарегистрирован: 29 май 2003, 22:29
- Откуда: Магадан - Миссиссага
Не понял, а что я "не так" сказал?
Если я буду выражаться строго соблюдая терминологию, принятую в винапи или мфц, называя хендл окна хендлом, или указатель на CWnd-объектом - указателем, то ему это что поможет?
Впрочем, я сейчас засел за шарп. Пытаюсь разобраться, как там что работает. Пока такое осчусчение, что у мелкософта поехала крыша.
Если я буду выражаться строго соблюдая терминологию, принятую в винапи или мфц, называя хендл окна хендлом, или указатель на CWnd-объектом - указателем, то ему это что поможет?
Впрочем, я сейчас засел за шарп. Пытаюсь разобраться, как там что работает. Пока такое осчусчение, что у мелкософта поехала крыша.
-
- Маньяк
- Сообщения: 2803
- Зарегистрирован: 29 май 2003, 22:29
- Откуда: Магадан - Миссиссага
Да, Циник, забыл сказать. Никого ни о чём не прошу на этом форуме, но тебя попрошу, т.к. ты циничный Циник.
Меня всерьёз волнует вопросы, связанные с интервью, так что если поможешь здесь с "разбором полётов", буду благодарен. Папа Карло врядли разрешит ЭТО в данном топике (офтопик), но можешь кинуть критику в приват. Если не затруднит, конечно.
Меня всерьёз волнует вопросы, связанные с интервью, так что если поможешь здесь с "разбором полётов", буду благодарен. Папа Карло врядли разрешит ЭТО в данном топике (офтопик), но можешь кинуть критику в приват. Если не затруднит, конечно.
- ajkj3em
- Маньяк
- Сообщения: 2063
- Зарегистрирован: 12 ноя 2006, 06:53
насколько я помню, выпадающая часть комбобокса в части микрософтовских продуктовпапа Карло писал(а):комбобокс тоже не выпускает?Циник писал(а):Тут нужно сперва уяснить тебе, что за свои пределы родительский контрол никого не выпускает, по определению.
(офис, iexplorer, etc) имеет своим парентом desktop, а не комбобокс. 2c for thoughts
- Циник
- Завсегдатай
- Сообщения: 442
- Зарегистрирован: 17 фев 2003, 17:17
Ты практически верно помнишь, товарищ. Именно это я напоминал товарищу Карло чуть выше, цитатой из Микрософта, даже раскрасил для наглядности.drain bamage писал(а):насколько я помню, выпадающая часть комбобокса в части микрософтовских продуктов
(офис, iexplorer, etc) имеет своим парентом desktop, а не комбобокс. 2c for thoughts
Кстати, статейка таки естьу них на сайте, никуда не делась.
- Циник
- Завсегдатай
- Сообщения: 442
- Зарегистрирован: 17 фев 2003, 17:17
Ты это, товарищ, с этой рахметовщиной завязывай давайvg писал(а):Да, Циник, забыл сказать. Никого ни о чём не прошу на этом форуме
Не забывай, что ты уже большой и вообще без пяти минут эмигрант.
Просить о чем-то и тем более спрашивать - это вовсе не есть признак слабости.
Вот оно какно тебя попрошу, т.к. ты циничный Циник.
Обращайся, товарищ, конечно. Обещать наверняка ничего не обещаю, ключа от квартиры не дам точно, но есть шансы, что рассмотрю в конструктивном ключе
Да и других опытных товарищей здесь немало. Ты главное, не приобрети вкус к шашечкам, а ехать тебе всегда помогут
Кинуть не проблема, товарищ, но вот что кидать-то? Критику чего?Меня всерьёз волнует вопросы, связанные с интервью, так что если поможешь здесь с "разбором полётов", буду благодарен. Папа Карло врядли разрешит ЭТО в данном топике (офтопик), но можешь кинуть критику в приват. Если не затруднит, конечно.
-
- Маньяк
- Сообщения: 2803
- Зарегистрирован: 29 май 2003, 22:29
- Откуда: Магадан - Миссиссага
Папа Карло.
Я засел было за шарп. По началу – волосы дыбом. Но потом вроде и свыкся. Вот код, где видно, как можно скрестить контролы, т.е. твой контрол и листбокс. Сразу говорю, что программирую я в шарпе ровно 4 часа (вчера час и сегодня три). Поэтому, конечно, всё это может и не так, как надо делать в #. Хотя ошибок (синтаксических) нет. Я проверял. Это врезки из файлов работающего проекта. Кроме того, я не исключаю, что тебе надобно вообще нечто другое. Тогда можно попробовать ещё раз. Это набросок - как можно сделать. Если тебя это устроит, то там тебе останется в этом же «шаблоне» добавить обработку OnMouseMove (чтобы листбокс скрывался, когда мышь «покидает» клиентскую облать листбокса), собственно выбор элемента списка, обработку нажатий на клаву (управлять контролами нужно уметь и при помощи клавы, а не только мыши) и др.
В целом идея такова. Создаём свой класс, который наследует от кнопки (Button). Кнопка здесь выбрана для простоты. Класс имеет мембер-указатель на объект класса ListBox. На форме вначале в «дизайнере» рисуется обычный Button, а затем в классе формы изменяется класс этого контрола с Button на CMyBtn. Надеюсь, ниже всё и так будет понятно.
В файлике CMyBtn.cs собственно «комбоконтрол», в данном случае результат скрещивания кнопки с листбоксом. Кнопка выбрана для простоты
PS. папа Карло,ты, наверное, всё это и сам давно знаешь.
Мой пост в том, что если копать, то мож в таком разрезе?
Я засел было за шарп. По началу – волосы дыбом. Но потом вроде и свыкся. Вот код, где видно, как можно скрестить контролы, т.е. твой контрол и листбокс. Сразу говорю, что программирую я в шарпе ровно 4 часа (вчера час и сегодня три). Поэтому, конечно, всё это может и не так, как надо делать в #. Хотя ошибок (синтаксических) нет. Я проверял. Это врезки из файлов работающего проекта. Кроме того, я не исключаю, что тебе надобно вообще нечто другое. Тогда можно попробовать ещё раз. Это набросок - как можно сделать. Если тебя это устроит, то там тебе останется в этом же «шаблоне» добавить обработку OnMouseMove (чтобы листбокс скрывался, когда мышь «покидает» клиентскую облать листбокса), собственно выбор элемента списка, обработку нажатий на клаву (управлять контролами нужно уметь и при помощи клавы, а не только мыши) и др.
В целом идея такова. Создаём свой класс, который наследует от кнопки (Button). Кнопка здесь выбрана для простоты. Класс имеет мембер-указатель на объект класса ListBox. На форме вначале в «дизайнере» рисуется обычный Button, а затем в классе формы изменяется класс этого контрола с Button на CMyBtn. Надеюсь, ниже всё и так будет понятно.
Код: Выделить всё
// file Form.cs
…
namespace WindowsApplication1
{
public class Form1 : System.Windows.Forms.Form
{
CMyBtn button1;
…
public Form1()
{
InitializeComponent();
}
private void InitializeComponent()
{
this.button1 = new WindowsApplication1.CMyBtn();
…
this.button1.Add("123"); // добавляем элементы листбокса
this.button1.Add("123");
this.button1.Add("123");
…
}
…
…
}
}
// end cut of file Form.cs
В файлике CMyBtn.cs собственно «комбоконтрол», в данном случае результат скрещивания кнопки с листбоксом. Кнопка выбрана для простоты
Код: Выделить всё
// file CMyBtn.cs
namespace WindowsApplication1
{
public class CMyBtn : Button
{
private ListBox _list;
public CMyBtn()
{
_list = new ListBox();
RecalcListLayout();
_list.Hide();
///////////////////////////////////////////////////////////////
// events hanlers
// Здесь же добавь другие обработчики
Click += new System.EventHandler(this.btn_Click);
ParentChanged += new System.EventHandler(this.OnParentChanged);
Move += new System.EventHandler(this.OnMove_Resize);
Resize += new System.EventHandler(this.OnMove_Resize);
}
private void RecalcListLayout()
{
_list.Location = new Point(this.Left, this.Top + this.Height + 1);
}
public void SetListWidth(int nWidth)
{
_list.Width = nWidth;
}
public void Clear()
{
_list.Items.Clear();
}
public void Add(object item)
{
_list.Items.Add(item);
}
// Overrides
//
//protected override void OnMouseDown(MouseEventArgs e)
//{
// Можешь использовать оверайдм вместо Click обработчиков
// Дело вкуса. Работает и так, и так.
//}
// Event handlers
private void btn_Click(object sender, System.EventArgs e)
{
_list.Show();
// Тебе здесь надо написать, возмлжно, что-то умное
}
private void OnParentChanged(object sender, System.EventArgs e)
{
_list.Parent = Parent;
RecalcListLayout();
}
private void OnMove_Resize(object sender, System.EventArgs e)
{
RecalcListLayout();
}
}
}
// end of cut CMyBth.cs
Мой пост в том, что если копать, то мож в таком разрезе?
-
- Маньяк
- Сообщения: 2803
- Зарегистрирован: 29 май 2003, 22:29
- Откуда: Магадан - Миссиссага
- папа Карло
- Шарманщик
- Сообщения: 8563
- Зарегистрирован: 17 фев 2003, 15:04
- Откуда: НН -> BC -> WA -> UT -> CA