У меня есть следующий код для создания окна «только сообщение», окно всегда создано нормально, проблема возникает когда это создано.
Процесс А
...
auto hInstance = ::GetModuleHandle( nullptr );
WNDCLASSEX wcx;
wcx.cbSize = sizeof(wcx);
wcx.style = 0;
wcx.lpfnWndProc = MyWinProc;
wcx.cbClsExtra = 0;
wcx.cbWndExtra = 0;
wcx.hInstance = hInstance;
wcx.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wcx.hCursor = LoadCursor(NULL, IDC_ARROW);
wcx.hbrBackground = (HBRUSH)GetStockObject( WHITE_BRUSH);
wcx.lpszMenuName = L"MainMenu";
wcx.lpszClassName = L"MyDummyClass";
wcx.hIconSm = (HICON)LoadImage(hInstance,
MAKEINTRESOURCE(5),
IMAGE_ICON,
GetSystemMetrics(SM_CXSMICON),
GetSystemMetrics(SM_CYSMICON),
LR_DEFAULTCOLOR);
if (!RegisterClassEx(&wcx))
{
throw "Bad 1.";
}
if (!this->CWnd::CreateEx(0, L"MyDummyClass", L"MyDummyWindow", 0, 0, 0, 0, 0, HWND_MESSAGE, nullptr))
{
throw "Bad 2.";
}
Процесс Б
auto myWnd = FindWindow( L"MyDummyClass");
Теперь проблема у меня есть, если process A
создать окно раньше OnInitDialog
называется тогда process B
могу найти окно.
Но если process A
создает окно в любое другое время после главное окно было создано тогда process B
больше не могу найти окно.
В обоих случаях насос сообщений называется нормально, окно создается как положено, я просто не могу FindWindow
когда я создаю это после основное приложение запущено.
Почему это так, и как я могу обойти это?
использование FindWindowEx
вместо:
Чтобы найти окна только для сообщений, укажите HWND_MESSAGE в hwndParent
параметр функции FindWindowEx. Кроме того, FindWindowEx
выполняет поиск только в окнах сообщений, а также в окнах верхнего уровня, если оба
Параметры hwndParent и hwndChildAfter имеют значение NULL.
Других решений пока нет …