2011-01-15 7 views
0

erzeugt und aktualisiert Ich kodierte gerade ein Kindgewinde, um Fenster zu schaffen und zu aktualisieren, aber ich stehe einige Problem gegenüber. Mein Fenster wird automatisch geschlossen, nachdem diese Thread-Ausführung abgeschlossen ist (natürlich). Aber ich möchte es nicht schließen, also habe ich versucht, eine While-Schleife in den Thread zu setzen und in dieser Schleife rufe ich InvalidateRect() Funktion, so dass es Fenster aktualisieren kann. Jetzt schließt sich das Fenster nicht automatisch, aber ich kann es nicht bewegen oder mit ihm interagieren und der Cursor zeigt auch ein besetztes Icon (bedeutet vollständig nicht reagieren). Wie ich dieses Problem lösen kann. unten ist der Code:wie man Fenster im Kindgewinde unter Verwendung vC++

diese von main() Aufruf

bool CameraApp::OnInit() 
{ 
hThread = (HANDLE)_beginthreadex(NULL, 0, &CameraFrame::StartCameraPreview, 
    NULL, 0, &threadID); 
    WaitForSingleObject(hThread, INFINITE); 
    CloseHandle(hThread); 

    return TRUE; 
} 

Thema Funktionsblock

unsigned __stdcall CameraFrame::StartCameraPreview(void* pArgs) 
{ 
cFrame.ShowCameraWindow(); 

while(1) 
{  
    cFrame.StartCapture(); 
    InvalidateRect(hwnd, NULL, false); 
    Sleep(5000); 
} 
_endthreadex(0); 
    return 0; 
} 

i nicht main() Funktionsfenster erstellen können. Also, ich muss Thread verwenden und dieses Fenster mit dem periodischen Bild aktualisieren, das von der Web-Kamera genommen wird.

Antwort

2

Anstelle Ihrer Endlosschleife müssen Sie eine Nachrichtenpumpe im sekundären Thread erstellen, die Windows-Nachrichten verarbeitet.

unsigned __stdcall CameraFrame::StartCameraPreview(void* pArgs) 
{ 
    cFrame.ShowCameraWindow(); 

    MSG msg; 
    while (GetMessage(&msg, NULL, 0, 0)) 
    { 
     TranslateMessage(&msg); 
     DispatchMessage(&msg); 
    } 

    _endthreadex(0); 
    return 0; 
} 
+0

Wie könnte ich Fenster aktualisieren und es wird entsprechend der Nachricht aktualisiert? –

+0

Erstellen Sie einen Timer und aktualisieren Sie Ihr Fenster jede n-te Sekunde. Sie können WM_TIMER in dieser Meldungsschleife verarbeiten oder Fenster proc für Ihr Fenster erstellen. – DReJ

Verwandte Themen