Maussymbol änderts sich auf dem Butten in den Standartmauszeiger



  • Gestern habe ich das erstellen eines Windows Fensters in c++ gelernt,
    heute baue ich meine ersten Buttens in dieses Fenster ein...
    ABER
    ich habe in meinem Fenster den Mauszeiger geändert und jetzt ändert sich der Mauszeiger in das Standart mauszeigersymbol wenn ich über meinen erstellen butten fahre.

    Muss ich den Mauszeiger für jedes Fenster also auch für Child fenster neu festlegen?

    Wenn ja wie mache ich das bei Child fenstern?

    Bishereiger Code:

    #define ID_BEISPIELBUTTEN 1
    
    HWND hButten;
    hButten = CreateWindow ("BUTTON",
    						"DRÜCK MICH",
    						BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD,
    						150, 10, 100, 100,
    						hWnd,
    						(HMENU)ID_BEISPIELBUTTEN,
    						hInst,
    						NULL
    						);
    

  • Mod

    Jedes Fenster legt in seiner eigenen Fensterklasse fest, welcher Cursor verwendet wird. Insofern müsstest Du Deine eigene Buttonklasse erzeugen und dort einen anderen Cursor registrieren.

    Also in der Folge:
    WNDCLASS Struktur mit GetClassInfo von BUTTON füllen.
    Eigenen Cursor definieren und eigenen Namen definieren.
    RegisterClass durchführen.
    Dann CreateWindow mit der neuen Klasse ausführen.

    Alternative:
    Subclass der Buttonklasse nach Erzeugung. WM_SETCURSOR überschreiben und dort dann den Cursor setzen.



  • @Martin:

    Hm würde man, wenn man mit SetClassInfo und dem Parameter GCL_HCURSOR die WNDCLASS-Struktur modifiziert, den Cursor für alle Buttons ersetzen/ändern ? (Wär vllt auch was 😉 )



  • danke für die Antworten ... ich hätte vielleicht oben noch schreiben solln dass ich der totale newbie in c++ (WinApi erst recht) binn!!

    ich hab ez nur bahnhof verstanden^^

    wäre nett wenn ihr ein beispiel posten könntet damit ich mich mit diesem auseinanderesetzen kann 😉



  • Naja in etwa so:

    bool RegisterMyButtonClass(HCURSOR hNewCursor)
    {
       WNDCLASS WndCls;
       GetClassInfo(NULL, TEXT("BUTTON"), &WndCls);
       WndCls.lpszClassName = TEXT("MY_BUTTON");
       WndCls.hCursor       = hNewCursor;
       return (static_cast<bool>(RegisterClass(&WndCls));
    }
    
    HWND CreateMyButton(DWORD dwExStyle, const TCHAR* pszCaption, DWORD dwStyle, int iX, int iY, int iWidth, int iHeight, HWND hParent, UINT uiID, HINSTANCE hInst = GetModuleHandle(NULL))
    {
       return (CreateWindowEx(dwExStyle, TEXT("MY_BUTTON"), pszCaption, dwStyle, iX, iY, iWidth, iHeight, hParent, reinterpret_cast<HMENU>(uiID), hInst, NULL));
    }
    

    Ist aber nicht getestet.


  • Mod

    CodeFinder schrieb:

    @Martin:

    Hm würde man, wenn man mit SetClassInfo und dem Parameter GCL_HCURSOR die WNDCLASS-Struktur modifiziert, den Cursor für alle Buttons ersetzen/ändern ? (Wär vllt auch was 😉 )

    Nein, ich würde das nicht empfehlen!
    Das wäre ein Holzhammer und würde alle Buttons der Applikation treffen. Ob das gewünscht ist? Sicher, wenn es die gesammte Applikation betreffen soll, dann geht dies sicherlich.



  • Hm dachte erst, damit würde man sämtliche Buttons (also systemweit) modifizieren 😃 .


Anmelden zum Antworten