Das ist völliges Neuland für mich und nachdem ich mich bei MSDN und via Google auch anderweitig etwas eingelesen habe, stehe ich völlig im Wald.
Von Messages die gar nicht ankommen, über DispatchMessage() nicht nutzbar, bis zu wie beendet man den Thread, ich blicke absolut nicht durch.
Für meine ersten Gehversuche will ich natürlich nichts Riesiges aufbauen, einfach nur die Grundstruktur.
Ich habe ein simples Win32 Programm, dessen Hauptfenster im Prinzip auch leer sein könnte, aber es hat natürlich eine WndProc und einen MessageLoop, ausserdem startet es meinen Thread, der hat kein eigenes Fenster und soll nur dann was tun, wenn er eine "MeineMessage" erhält.
Ist jemand so nett und füllt mir den Code auf?
Von Messages die gar nicht ankommen, über DispatchMessage() nicht nutzbar, bis zu wie beendet man den Thread, ich blicke absolut nicht durch.
Für meine ersten Gehversuche will ich natürlich nichts Riesiges aufbauen, einfach nur die Grundstruktur.
Ich habe ein simples Win32 Programm, dessen Hauptfenster im Prinzip auch leer sein könnte, aber es hat natürlich eine WndProc und einen MessageLoop, ausserdem startet es meinen Thread, der hat kein eigenes Fenster und soll nur dann was tun, wenn er eine "MeineMessage" erhält.
Code:
const UINT MeineMessage = RegisterWindowMessage("SomeUniqueText");
DWORD MeineThreadID;
DWORD WINAPI MeinThread(LPVOID data)
{
MSG msg;
while(GetMessage(&msg,0,0,0) > 0)
{
// hier weiss ich nicht weiter
}
return 0;
}
LRESULT CALLBACK MainWindow(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch(msg)
{
...
case WM_IRGENDWAS:
{
PostThreadMessage(MeineThreadID,MeineMessage,wParam,lParam);
return 0;
}
break;
case WM_CLOSE:
{
DestroyWindow(hWnd);
return 0;
}
break;
case WM_DESTROY:
{
// hier muss auch der Thread beendet werden
PostQuitMessage(0);
return 0;
}
break;
}
return DefWindowProc(hWnd,msg,wParam,lParam);
}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR szCmdLine,int nCmdShow)
{
...
hwnd = CreateWindow(
"MeinFenster",
"MeinFensterName",
WS_OVERLAPPEDWINDOW,
0,0,400,300,
HWND_DESKTOP,0,hinstance,0
);
ShowWindow (hwnd, nCmdShow);
UpdateWindow(hwnd);
CreateThread(0,0,MeinThread,0,0,&MeineThreadID);
MSG msg;
while(GetMessage(&msg,0,0,0) > 0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
Ist jemand so nett und füllt mir den Code auf?