Cursor in Popups

Thomasio

Erfahrenes Mitglied
Ich habe eine Anwendung mit einem Hauptfenster, einem Child und einem Popup, wobei das Popup einen anderen Cursor haben soll.

Code:
WNDCLASSEX wc;

wc.hInstance     = hinstance;
wc.lpszClassName = MainClassName.c_str();
wc.lpfnWndProc   = MainWindow;
wc.style         = 0;
wc.cbSize        = sizeof(wc);
wc.hIcon         = 0;
wc.hIconSm       = (HICON)LoadImage(GetModuleHandle(0),
                   MAKEINTRESOURCE(ID_icon_main),IMAGE_ICON,16,16,0);
wc.hCursor       = LoadCursor(0,IDC_ARROW);
wc.lpszMenuName  = 0;
wc.cbClsExtra    = 0;
wc.cbWndExtra    = 0;
wc.hbrBackground = 0;
RegisterClassEx(&wc);

wc.hIconSm       = 0;

wc.lpszClassName = "ChildWindowName";
wc.lpfnWndProc   = ChildWindow;
RegisterClassEx (&wc);

wc.hCursor       = LoadCursor(0,IDC_HAND);

wc.lpszClassName = "PopupWindowName";
wc.lpfnWndProc   = PopupWindow;
RegisterClassEx (&wc);

Wenn ich den neuen Cursor vor das Popup setze, funktioniert das aber nicht, das Popup hat einen Arrow-Cursor.
Wenn ich den neuen Cursor vor das Child setze, dann haben sowohl das Child als auch das Popup den Hand-Cursor.

Was mache ich falsch?
 
Sieht eigentlich gut aus. Zeig mal MessageLoop und alle WndProcs (auch die der Childs und des Parents)
 
MessageLoop ist nichts besonderes:

Code:
MSG msg;

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

WndProcs ist ein Problem, weil die in der vollständigen Version haufenweise Zeug drin haben, was nur verwirrt.
Ich habe das testhalber aufs Wesendliche runter gestrippt, und dann bleibt ausser den CreateWindow() nur leere WndProcs übrig.
Ganz ohne Inhalt, sogar ohne WM_PAINT sind die Fenster natürlich alle leer, aber das Problem mit dem Cursor bleibt.

Code:
LRESULT CALLBACK MainWindow(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{

switch(msg)
{

case WM_CREATE:
{

MyChild = CreateWindow("ChildWindowName",0,
                              WS_CHILD|WS_VSCROLL|WS_VISIBLE,
                              0,0,200,200,
                              hWnd,0,hinstance,0);

MyPopup = CreateWindow("PopupWindowName",0,
                                  WS_POPUP|WS_VISIBLE,
                                  0,0,100,100,
                                  hWnd,0,hinstance,0);

return 0;

}
break;

}

return DefWindowProc(hWnd,msg,wParam,lParam);

}
 
Funktioniert bei mir einwandfrei, der Hand-Cursor über dem Popup.

Da muß dann irgendwas in deiner PopupWindow dazwischenfunken. Damit aber überhaupt etwas klappt, mußte ich das wc vor dem Befüllen mit memset ausnullen (sonst ist da viel Müll drin):

WNDCLASSEX wc;

memset( &wc, 0, sizeof( wc ) );

wc.hInstance = GetModuleHandle( NULL );
wc.lpszClassName = MainClassName.c_str();
...
 

Neue Beiträge

Zurück