Ich habe den folgenden Code, um ein Fenster 'nur Nachricht' zu erstellen, ist das Fenster immer erstellt, die Problem passiert wenn es erstellt wird.Wenn ich CreateEx (...) nachdem das Hauptfenster erstellt wurde, kann ich nicht finden FindWindow (...)
Verfahren A
...
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.";
}
Verfahren B
auto myWnd = FindWindow(L"MyDummyClass");
Nun ist das Problem ich habe, ist, wenn process A
das Fenster erstellen, bevor OnInitDialog
aufgerufen wird, dann process B
das Fenster finden.
Aber wenn process A
das Fenster zu einem anderen Zeitpunkt erzeugt nach wurde das Hauptfenster erstellt dann process B
kann das Fenster nicht mehr finden.
In beiden Fällen ist die Meldungsverteilschleife fein aufgerufen wird, wird das Fenster wie erwartet erstellt, kann ich FindWindow
einfach nicht, wenn ich schaffe es nach ist die Hauptanwendung gestartet.
Warum sollte das sein, und wie kann ich das umgehen?
Warum nicht übergeben Sie das HWND oder Klasse Objekt Prozess B? – Joel
@JonnyHenly, was ich meine ist, dass in beiden Fällen das Fenster ohne Fehler erstellt wird, aber wenn erstellt, bevor das Hauptfenster erstellt wird, kann es gefunden werden, aber wenn erstellt, nachdem der Hauptdialog erstellt wurde, kann nicht mehr sein gefunden. –
@Joel die beiden Prozesse sind separate exes. –