Второй день рою инет и никак не мгу найти ответ на вопрос:
Есть невидимое окно, необходимое только для получения сообщений от иконки в трее и от менюхи, выскакивающий по нажатию правой кнопкой на тойже иконке. Чтобы небыло проблем с исчезновением менюхи, делаю то, что говорят в MSDN:
SetForegroundWindow(hWnd);
TrackPopupMenu(hSubMenu, 0, x, y, 0, hWnd, NULL);
PostMessage(hWnd, WM_NULL, 0, 0);
К моменту выхода из меню в очереди сообщенй лежит сообщение о клике на пункте меню. Реакцией на него будет создание модального диалога.
HINSTANCE hInst = (HINSTANCE)GetModuleHandle(NULL);
return (int)DialogBoxParam(hInst, res, NULL, (DLGPROC)mainDialogProc, LPARAM(index));
Здесь происходит странное, модальный диалог появляется, но серый и никак не реагирует на внешние раздрожители. Разве что, можно его тоскать за заголовок. При этом, его даже неьзя закрыть — элементы управления не реагируют.
Проблема решилась перенаправлением не обработаных сообщений в DefWindowProc. Видимо необходимо было реагиорвать на какие-то сообщения, только я не понял пока какие.
Здравствуйте
Здесь происходит странное, модальный диалог появляется, но серый и никак не реагирует на внешние раздрожители. Разве что, можно его тоскать за заголовок. При этом, его даже неьзя закрыть — элементы управления не реагируют.
Для того, чтобы диалог был интерактивный, должны выполняться два условия:
1. Функция обработчик, указанная при создании диалога, должна на необрабатываемые ей сообщения (а таких большинство) возвращать FALSE (тоесть 0), дабы эти сообщения обработала система.
2. В том же потоке, где был создан диалог, должна происходить обработка сообщений потока:
MSG oMsg;
while(BOOL nRet = ::GetMessage(&oMsg, 0, 0, 0) && -1!=nRet)
{
::TranslateMessage(&oMsg);
::DispatchMessage(&oMsg);
}
С уважением, Григорий.