КомандБар(или МенюБар?) - это не дочернее окно?
КомандБар(или МенюБар?) - это не дочернее окно?
Делалось всё на wm2003se smartphone. Такчто это не совсем КПК.
КомандБар(или МенюБар?) - это не дочернее окно чтоли?
Проблема: Есть окно. Нужно обрабатывать только его сообщения.
В MSDN написано:
The GetMessage function only retrieves messages associated with the window identified by the hWnd parameter or any of its children
И это действительно так .Но для командБара это почемуто не работает.
Тоесть если задать в GetMessage не НУЛЛ в качестве ХВНД, а ХВНД
окна, то сообщения КоммандБара не обрабатываются. Он вобще не реагирует на нажатие кнопок.
Причём ЛистВью, который я тоже создаю на моём окне работает нормально.
Может быть, то что я скажу сейчас в порядке вещей, но у меня это вызывает сомнения:
HWND, который я получаю при создании главного окна не совпадаес с HWND, который приходит
в функцию LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam),
этого же окна. И если я при создании КоммандБара в структуре SHMENUBARINFO в качестве hwndParent
Указываю HWND, который получил при создании окна - КоммандБар вообще не создаётся.
А вот если указать тот HWND, который приходит в функцию, то создаётся. Это нормально?
И что делать?
КомандБар(или МенюБар?) - это не дочернее окно чтоли?
Проблема: Есть окно. Нужно обрабатывать только его сообщения.
В MSDN написано:
The GetMessage function only retrieves messages associated with the window identified by the hWnd parameter or any of its children
И это действительно так .Но для командБара это почемуто не работает.
Тоесть если задать в GetMessage не НУЛЛ в качестве ХВНД, а ХВНД
окна, то сообщения КоммандБара не обрабатываются. Он вобще не реагирует на нажатие кнопок.
Причём ЛистВью, который я тоже создаю на моём окне работает нормально.
Может быть, то что я скажу сейчас в порядке вещей, но у меня это вызывает сомнения:
HWND, который я получаю при создании главного окна не совпадаес с HWND, который приходит
в функцию LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam),
этого же окна. И если я при создании КоммандБара в структуре SHMENUBARINFO в качестве hwndParent
Указываю HWND, который получил при создании окна - КоммандБар вообще не создаётся.
А вот если указать тот HWND, который приходит в функцию, то создаётся. Это нормально?
И что делать?
совпадаетConst_ptr писал(а):HWND, который я получаю при создании главного окна не совпадаес с HWND, который приходит
в функцию LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam),
этого же окна
создаётсяConst_ptr писал(а):И если я при создании КоммандБара в структуре SHMENUBARINFO в качестве hwndParent
Указываю HWND, который получил при создании окна - КоммандБар вообще не создаётся
menubar - это не child твоего окна.Const_ptr писал(а):The GetMessage function only retrieves messages associated with the window identified by the hWnd parameter or any of its children
И это действительно так .Но для командБара это почемуто не работает.
Samsung GT-S8500 + MicroSD 8Gb
совпадает
Вот создал простой проэкт в Visual Studio 2005создаётся
>>http://ifolder.ru/2742283 (11.74 кб)
Что я там неправильно делаю?
Const_ptr
WM_CREATE вызывается _до_ выхода из CreateWindow, соответственно g_hWnd внутри WM_CREATE будет ещё не инициализирован.
и в SHCreateMenubar надо соответственно передавать то, что нужно, а не g_hWnd, в котором неизвестно что.
а вообще, если это пофиксить, то прога работает.
WM_CREATE вызывается _до_ выхода из CreateWindow, соответственно g_hWnd внутри WM_CREATE будет ещё не инициализирован.
и в SHCreateMenubar надо соответственно передавать то, что нужно, а не g_hWnd, в котором неизвестно что.
а вообще, если это пофиксить, то прога работает.
Samsung GT-S8500 + MicroSD 8Gb
menubar - это не child твоего окна.
Спасибо за разъяснение.WM_CREATE вызывается _до_ выхода из CreateWindow
И тогда у меня следующий вопрос:
Нужно создать модальное окно(не используя DialogBox).
Что бы это сделать, нужно, как я понимаю, обрабатывать messageloop
в этом окне.
На этом модальном окне есть меню бар. Дак вот как так обрабатывать messageloop и для меню бара и для окна одновременно?
Т.к если указать в messageloop модального окна в функцию GetMessage NULL как HWND, то будут обрабатываться также и сообщения вызывающего(немодального) окна, даже если оно запрещено функцией EnableWindow.
Конечно, можно использовать модальный диалог, но хотелось бы именно создавать модальное окно самому.
именно так.Const_ptr писал(а):Т.к если указать в messageloop модального окна в функцию GetMessage NULL как HWND, то будут обрабатываться также и сообщения вызывающего(немодального) окна, даже если оно запрещено функцией EnableWindow.
т.е. ноль в качестве hwnd.
должны обрабатываться все сообщения
Samsung GT-S8500 + MicroSD 8Gb
Да неее... А мне какраз надо обрабатывать не все, а только модального окна и его менюбара.должны обрабатываться все сообщения.
А главное окно, которое вызывает это модальное, должно зависнуть на это время, а после закрытия модального окна должно продолжить работу.
Т.е в ГЛАВНОМ окне такая штука:
Код: Выделить всё
case IDM_KKK:{
ShowModalWindow(hinstance)
MessageBox(hWnd,L"Закрыто",L"Всё!",MB_OK);
break;
}
Дак как же обрабатывать мессаги для модального окна и его менюбара НЕ ОБРАБАТЫВАЯ мессаги ГЛАВНОГО окна?
что-то не представляю, зачем такое может быть нужно.Const_ptr писал(а):Да неее... А мне какраз надо обрабатывать не все, а только модального окна и его менюбара
вообще-то зависшее окно - это ненормальная ситуация.Const_ptr писал(а):А главное окно, которое вызывает это модальное, должно зависнуть на это время, а после закрытия модального окна должно продолжить работу
в десктопной винде в таких случаях винда будет в task manager'е писать "не отвечает".
это каким образом, интересно знать?Const_ptr писал(а):Дак вот Мессадж бокс должен вызываться только после закрытия модального окна, а если в мессаджлупе модального окна в параметр ХВНД передать НУЛЛ, то мессаджбокс вызовется ещё до закрытия модального окна
чудес не бывает. если выполняется код, находящийся в другой функции, то каким образом поток вдруг оттуда вывалится и выдаст сообщение?
Samsung GT-S8500 + MicroSD 8Gb
ОУУОУОУОУОУОУОООООЙ.
sshd
Слушай, спасибо тебе... Блин. Разобрался наконец. Теперь уже
даже и незнаю, как так у меня получалось . Короче запутался я.
Ну спасибо, что помог.
Но всё-таки значит обрабатывать только одно окно и его менюбар, не обрабатывая др. окно тогоже приложения нельзя? Или всё-таки можно?
sshd
Слушай, спасибо тебе... Блин. Разобрался наконец. Теперь уже
даже и незнаю, как так у меня получалось . Короче запутался я.
Ну спасибо, что помог.
Но всё-таки значит обрабатывать только одно окно и его менюбар, не обрабатывая др. окно тогоже приложения нельзя? Или всё-таки можно?