我有一個名爲GUIMain的類,它爲我的程序註冊,創建並顯示一個主窗口。在這個按鈕上,當用戶點擊它時,會顯示一個額外的窗口。用C++和WinApi顯示一個額外的無模式窗口
如果我是用C#寫這個,我想有兩個選擇:
AdditionalForm myForm = new AdditionalForm();
myForm.ShowDialog(this); // blocking. Returns when myForm is closed;
someOtherFunction();
或
AdditionalForm myForm = new AdditionalForm();
myForm.Show(this); // non-blocking.
someOtherFunction(); // runs while myForm is still visible
,或者心裏很不舒服,甚至這會工作:
AdditionalForm myForm = new AdditionalForm();
new Thread(new ThreadStart(delegate()
{
myForm.ShowDialog(this); // blocks in a separate thread
})).Start();
someOtherFunction(); // runs while myForm is still visible
但我用C++編寫而不是C#。
我有稱爲PreviewWindow一個附加的類具有公用成員函數Register()
,Create()
,和Show()
。最後一個函數包含一個消息循環,它基本上是一個阻塞調用 - 類似於C#的ShowDialog()
。
如何我可以重新寫PreviewWindow::Show()
,使其不具有阻塞循環:
while (GetMessage(&msg, 0, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
或者,我怎麼能稱之爲一個單獨的線程?
我目前有:
previewWindow = new PreviewWindow(hInstance, hWnd);
previewWindow->Register();
previewWindow->Create();
previewWindow->Show(); // blocks :(
previewWindow->DisplayImage(); // never runs.
我試圖CreateThread
但它不喜歡的是,第三個參數是一個成員函數。我試過使它成爲靜態成員函數,但它似乎並不喜歡這一點。這是說DWORD(__stdcall *)()與LPTHREAD_START_ROUTINE不兼容。
好的!讓我試試:) – Ozzah
它的工作原理!謝謝。 – Ozzah