eigene wndproc mit anderen parametern



  • Wie kann man sich eine eigene WndProc erstellen die automatisch vom System aufgerufen wird? - die aber anstatt den üblichen 4 Parameter meinetwegen einen zusätzlichen 6en oder 7en ...n Parameter entgegen nehmen kann.



  • Worauf willst du genau hinaus? Wenn ich dich richtig verstehe, reicht dir ein Parameter nicht aus -> Daten in einer Struktur zusammenfassen und einen Pointer darauf übergeben.



  • Die WndProc übernimmt doch standardmäßig nur 4 Parameter (hwnd,message,lparam,wparam). Ich will eine eigene WndProc die andere Parameter hat. Zb.: hwnd,message,lparam,wparam,(void*) zusatz,....



  • Nein.



  • Nein, das geht nicht - Wüsste aber auch nicht, wofür man das brauchen sollte 😕
    Wie, wann bzw. was willst du denn damit übergeben?!



  • Sinn? Das kann man doch alles über WPARAM und LPARAM machen.



  • lol also was könnte wohl der anwendungszweck sein ... mit SendMessage willst du wohl nicht mehr schicken als gewöhnlich weil das ja numal nicht geht (es sei denn du willst windows umschreiben) also wirst du wohl die WndProc aus deinem PRogramm aufrufen und da willst du mehr übergeben können. Warum machst du dann nicht ne extra funktion? also sowas meine ich:

    LRESULT WndPRoc2(blabla, void* zusatz)
    {
    werte msg mit zusatz aus ();
    return WndProcNormal(blabla);
    }



  • Sinn? Das kann man doch alles über WPARAM und LPARAM machen.

    ... aber nur wenn ich selber eine Message verschicke!
    Ich habe mir eine eigene Button Klasse geschickt und die gesubclassed.
    Die subclass Fkt. ruft die Funktion des Fensters auf zudem die Buttons gehören.
    Bei einem Fenster mag das ja noch gehen -> da kann ich die wndproc des Fensters als globale Variable machen. Aber was ist wenn ich mehrere Fenster habe die jeweils Buttons haben -> so hat jedes fenster eine andere wndproc die dann in der subclass der Buttons jeweils aufgerufen werden muss....

    Naja egal, habe schon eine Lösungsidee.
    Meine Frage noch: Gibt es eine Funktion die mir anhand es übergebenen Handles die id zurückgib die bei CreateWindow angegeben wurde?



  • geschickt

    geschrieben



  • 1.) Normalerweise verwendet man für Controls die sich ähnlich verhalten (z.B. unterschiedliche Buttons) nur eine wndProc - so wie z.B. auch bei der normalen Button-Klasse. Die Unterscheidung kannst du dann z.B. in der Parent-WndProc erledigen (analog WM_COMMAND)

    2.) GetDlgCtrlID 🙂
    Damit kommst du dem Ansatz von 1.) schon näher 😉



  • So, von wegen man kan nix zusätzliches mitschicken!!

    typedef LRESULT (CALLBACK SUBCLASSPROC)( HWND hWnd,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam,
    UINT_PTR uIdSubclass,
    DWORD_PTR dwRefData
    );
    hLibrary=LoadLibrary(TEXT("comctl32.dll"));
    if(hLibrary==NULL) MessageBox(0,"Lib nicht gefunden",0,0);
    SetWindowSub=(PSUBCLASS) GetProcAddress(hLibrary, TEXT("SetWindowSubclass"))
    typedef BOOL (WINAPI
    PSUBCLASS)(HWND, SUBCLASSPROC , UINT_PTR ,DWORD_PTR );
    PSUBCLASS SetWindowSub;
    ...
    //In der Button Klasse:
    SetWindowSub(_staticButtonElement,&PROCevent,_id,(DWORD_PTR)this);
    ...
    //in der subclass
    CButton *cbutNow=(CButton*)dwRefData;

    staunt 👍



  • Ach ja, und wegen der id:
    GetWindowLong(hwnd,GWL_ID)....

    tztz


Anmelden zum Antworten