HPC.ru lite - Все форумы
Форум: Программирование для КПК
Тема: КомандБар(или МенюБар?) - это не дочернее окно?

[Ответить]
Const_ptr [21.07.2007 12:44] КомандБар(или МенюБар?) - это не дочернее окно?:
Делалось всё на 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, который приходит в функцию, то создаётся. Это нормально?

И что делать?
sshd [21.07.2007 12:53] :
совпадает

создаётся

menubar - это не child твоего окна.
Const_ptr [21.07.2007 16:20] :
Вот создал простой проэкт в Visual Studio 2005
>>http://ifolder.ru/2742283 (11.74 кб)
Что я там неправильно делаю?
sshd [21.07.2007 17:19] :
Const_ptr
WM_CREATE вызывается _до_ выхода из CreateWindow, соответственно g_hWnd внутри WM_CREATE будет ещё не инициализирован.
и в SHCreateMenubar надо соответственно передавать то, что нужно, а не g_hWnd, в котором неизвестно что.
а вообще, если это пофиксить, то прога работает.
Const_ptr [21.07.2007 18:04] :
Спасибо за разъяснение.

И тогда у меня следующий вопрос:
Нужно создать модальное окно(не используя DialogBox).
Что бы это сделать, нужно, как я понимаю, обрабатывать messageloop
в этом окне.
На этом модальном окне есть меню бар. Дак вот как так обрабатывать messageloop и для меню бара и для окна одновременно?

Т.к если указать в messageloop модального окна в функцию GetMessage NULL как HWND, то будут обрабатываться также и сообщения вызывающего(немодального) окна, даже если оно запрещено функцией EnableWindow.

Конечно, можно использовать модальный диалог, но хотелось бы именно создавать модальное окно самому.
sshd [21.07.2007 21:45] :
именно так.
т.е. ноль в качестве hwnd.
должны обрабатываться все сообщения
Const_ptr [21.07.2007 23:43] :
Да неее... А мне какраз надо обрабатывать не все, а только модального окна и его менюбара.
А главное окно, которое вызывает это модальное, должно зависнуть на это время, а после закрытия модального окна должно продолжить работу.
Т.е в ГЛАВНОМ окне такая штука:
case IDM_KKK:{
ShowModalWindow(hinstance)
MessageBox(hWnd,L"Закрыто",L"Всё!",MB_OK);
break;
}
Дак вот Мессадж бокс должен вызываться только после закрытия модального окна, а если в мессаджлупе модального окна в параметр ХВНД передать НУЛЛ, то мессаджбокс вызовется ещё до закрытия модального окна, а МНЕ ЭТО НЕ НАДО!
Дак как же обрабатывать мессаги для модального окна и его менюбара НЕ ОБРАБАТЫВАЯ мессаги ГЛАВНОГО окна?
sshd [22.07.2007 00:45] :
что-то не представляю, зачем такое может быть нужно.

вообще-то зависшее окно - это ненормальная ситуация.
в десктопной винде в таких случаях винда будет в task manager'е писать "не отвечает".

это каким образом, интересно знать?
чудес не бывает. если выполняется код, находящийся в другой функции, то каким образом поток вдруг оттуда вывалится и выдаст сообщение?
Const_ptr [22.07.2007 12:16] :
ОУУОУОУОУОУОУОООООЙ.
sshd
Слушай, спасибо тебе... Блин. Разобрался наконец. Теперь уже
даже и незнаю, как так у меня получалось . Короче запутался я.
Ну спасибо, что помог.

Но всё-таки значит обрабатывать только одно окно и его менюбар, не обрабатывая др. окно тогоже приложения нельзя? Или всё-таки можно?
sshd [22.07.2007 15:20] :
да можно-то всё что угодно, но только зачем?
[Ответить]