Если я использую CreateEx (…) после того, как главное окно было создано, я не могу найти FindWindow (…)

У меня есть следующий код для создания окна «только сообщение», окно всегда создано нормально, проблема возникает когда это создано.

Процесс А

...
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 когда я создаю это после основное приложение запущено.

Почему это так, и как я могу обойти это?

1

Решение

использование FindWindowEx вместо:

Чтобы найти окна только для сообщений, укажите HWND_MESSAGE в hwndParent
параметр функции FindWindowEx. Кроме того, FindWindowEx
выполняет поиск только в окнах сообщений, а также в окнах верхнего уровня, если оба
Параметры hwndParent и hwndChildAfter имеют значение NULL.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]