-
hast du bei RegisterClass(Ex) auch angegeben, dass du zum Fenster User-Daten brauchst (WNDCLASS::cbWndExtra >= 4)?
Hab grad nachgesehen, nein hab ich nicht
Werd ich dann schnellstmöglich ändern, danke
Geh ich richtig in der Annahme das die Zahl die Größe des Speichers in Byte ist?
Der Code der alten WndProc existiert leider nicht mehr, aber ich hatte den Cast wenn ich mich recht erinner in jedem Case-Zweig im switch(uMsg).
So kann ich jetzt aber auch alles wieder auf die WndProc umstellen. Gibt es vll auch eine Möglichkeit die Windowsnachrichten außerhalb der main zu empfangen? Bisher bekamen GetMessage und PeekMessage nur Nachrichten wenn sie in der main standen. Sobald ich die in einer anderen Funktion hatte, kam nichts mehr.
//EDIT:
So, hab meinen Code jetzt etwas abgeändert.
Meine WndProc:
CDevice *device;
switch(uMsg)
{
case WM_CREATE:
printf("CREATE");
SetWindowLong(Wnd,GWL_USERDATA,lParam);
break;
case WM_ACTIVATE:
device=(CDevice*)GetWindowLong(Wnd,GWL_USERDATA);
printf("ACTIVATE");
if(LOWORD(wParam))
{
ShowCursor(false);
device->OpenGL.activ=true;
device->activ=true;
}
else
{
ShowCursor(true);
device->OpenGL.activ=false;
device->activ=false;
}
return 0;
}
return DefWindowProc(Wnd,uMsg,wParam,lParam);
Die WNDCLASS
wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
wc.lpfnWndProc = (WNDPROC)WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 4;
wc.hInstance = hInstance;
wc.hIcon = NULL;
wc.hCursor = LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground = NULL;
wc.lpszMenuName = NULL;
wc.lpszClassName = "wigfx";
und die Fenstererstellung
hWnd = CreateWindow(
"wigfx",
"wigfx",
WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
0,0,
XRes,YRes,
NULL,
NULL,
hInstance,
this);
Leider funktioniert das auch nicht. CDevice bekommt die Änderung von WM_ACTIVATE in der WndProc nicht mit. Welche Kleinigkeit übersehe ich da?
MfG
Shelling