2016-06-29 19 views
0

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?

+0

Warum nicht übergeben Sie das HWND oder Klasse Objekt Prozess B? – Joel

+0

@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. –

+0

@Joel die beiden Prozesse sind separate exes. –

Antwort

0

Verwenden FindWindowEx statt:

Um Nachrichten nur Fenster, geben Sie HWND_MESSAGE im hwndParent Parameter der FindWindowEx Funktion zu finden. Darüber hinaus durchsucht FindWindowEx Nur-Meldungsfenster sowie oberste Fenster, wenn die Parameter HwndParent und HwndChildAfter NULL sind.

+0

Ich habe es gerade versucht und das Fenster wird auch nicht mit '' FindWindowEx'' gefunden, es wird gefunden, wenn ich das Fenster vor dem Erstellen des Hauptdialogs erstellt habe, aber nicht danach. –