createwindow



Автор Judas Priest задал вопрос в разделе Другие языки и технологии

функция CreateWindow на С++ и получил лучший ответ

Ответ от Cyborg Terminator[гуру]
hMenu - идентификатор меню из ресурса или идентификатор контрола.hInstance - дескриптор текущего процесса или модуля DLLlpParam - в этом параметре можно передать указатель на свои какие-нибудь данные которые можно получить в обработчике сообщений WM_CREATE/WM_NCCREATE в структуре (LPCREATESTRUCT)lParam

Ответ от Ra Орально (98783)[гуру]
Помимо HWND, у окон и пунктов меню имеются идентификаторы HMENU.В отличии от HWND, эти идентификаторы задаются при написании программы, а не автоматически, и доступны только из данной программы - не являются глобальными и уникальными в системе.При обработке событий по HMENU определяют, каким элементом управления вызвано событие.Например.#define IDM_BUTTON1 1#define IDM_BUTTON2 2...CreateWindow(_T("BUTTON"), _T("Кнопка"), WS_CHILD | WS_VISIBLE,10, 10, 200, 100, hWnd, (HMENU)IDM_BUTTON1, hInst, 0);CreateWindow(_T("BUTTON"), _T("Кнопка"), WS_CHILD | WS_VISIBLE,220, 10, 200, 100, hWnd, (HMENU)IDM_BUTTON2, hInst, 0);...case WM_COMMAND:wmId = LOWORD(wParam);switch (wmId){case IDM_BUTTON1:// нажата кнопка 1break;case IDM_BUTTON2:// нажата кнопка 2break;}break;---HINSTANCE - дескриптор экземпляра программы.Он глобальный, также как и HWND.Все окна в программе привязаны к её HINSTANCE.Это обеспечивает уникальность имён оконных классов (wc.lpClassName) - если в другой программе попадётся окно с таким же оконным классом, окна не перепутаются.По той же причине окна в экземплярах одной программы изолированы друг от друга.Также это важно для окон глобальных классов - при регистрации оконного класса с флагом CS_GLOBALCLASS он становится глобальным - окна такого класса могут создаваться в приложениях с любыми HINSTANCE.Таковы классы BUTTON, EDIT и т. д.Избежать путаницы с ними, помогает HINSTANCE.Почему для идентификации окна не подходят HWND, спросите Вы?Дело в том, что окон одного и того же класса может быть несколько и они будут иметь разные HWND.Это характерно для динамического создания окон, как-то окна MDI.Такие окна есть в экзеле - они размещены в одном и том же окне и используют один и тот же оконный класс.---lpParam используется для передачи в WM_CREATE оконной процедуры окна указателя на некое значение через CREATESTRUCT.int x = 5;CreateWindowEx(... (void*)&x);...case WM_CREATE:int *x = (int*)((*(CREATESTRUCT*)(lParam)).lpCreateParams);И назначение его - тоже идентификация, только не виндой, а самой программой.Чтобы после динамического генерирования окон одного и того же класса в WM_CREATE можно было отличить окна друг от друга - и исходя из этого разместить на них нужные контролы.

Ответ от 22 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: функция CreateWindow на С++
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*