DLGPROC als CALLBACK in einer Klasse



  • Hi, ich kriege es nicht hin die DlgProc für ein Fenster in eine Klasse zu packen. Wenn ich das ausserhalb der Klasse benutze funktioniert es wunderbar:

    Hier der Codeteil:

    class MD
    {
    public:
    	...
    	BOOL DisplayOwnWindow(VOID);
    	BOOL CALLBACK DlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
    	...
    private:
    
    	HINSTANCE wndInstance;
    }; extern MD *md = new MD;
    
    BOOL CALLBACK MD::DlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    
        switch (message)
    	{
    		case WM_INITDIALOG:
    			return TRUE;
    
    		case WM_COMMAND:
    			return TRUE;
    
    		case WM_DESTROY:
    			PostQuitMessage(0);
    			return TRUE;
    
    		case WM_CLOSE:
    			PostQuitMessage(0);
    			return TRUE;
    
    		case WM_TIMER:
    			return TRUE;
        }
        return FALSE;
    }
    
    BOOL MD::DisplayOwnWindow(VOID)
    {
    	DialogBox(GetCurrentWindowInst(), MAKEINTRESOURCE(IDD_MAINDLG), 0, DlgProc);
    }
    

    Im oberen Code kriege ich die Meldung:

    c:\Proj\GHT\mdump\mdump.cpp(35) : error C4867: 'MDump::MDumpDlg': function call missing argument list; use '&MDump::MDumpDlg' to create a pointer to member
    c:\Proj\GHT\mdump\mdump.cpp(35) : error C2664: 'DialogBoxParamA' : cannot convert parameter 4 from 'BOOL (__stdcall *)(HWND,UINT,WPARAM,LPARAM)' to 'DLGPROC'

    wenn ich DlgProc auf "DLGPROC" beim Aufruf von DialogBox caste bekomme ich:

    c:\Proj\GHT\mdump\mdump.cpp(35) : error C2440: 'type cast' : cannot convert from 'overloaded-function' to 'DLGPROC'

    wie gesagt, wenn ich die DlgProc ausserhalb der Klasse ablege funktioniert es.
    Ich hoffe mir kann hierbei jemand helfen.



  • in der forensuche "wndproc klasse" findest du die lösung 😉



  • ok thx. Es hat lediglich das Schlüsseltwort "static" gefehlt 🙂



  • cfk schrieb:

    ok thx. Es hat lediglich das Schlüsseltwort "static" gefehlt 🙂

    wenn man aber _nur_ static anwendet, hat man eine DWNDPROC für alle objekte


Anmelden zum Antworten