Problem mit MessageBox()



  • Wie oft ich den Fehler jetzt schon gesehen hab...:

    hWnd = CreateDialogW(hInst,(LPCWSTR) IDD_MAIN, NULL, (DLGPROC) WndProc);
    

    Hättest Du das nicht gecastet, wär Dir wahrscheinlich aufgefallen, dass die Syntax für eine Dialog-Prozedur so aussieht:

    INT_PTR CALLBACK DlgProc(HWND hWnd, UINT uiMessage, WPARAM wParam, LPARAM lParam);
    

    Falls Du eine Nachricht bearbeitet hast: return (TRUE); , andernfalls return (FALSE); !



  • CodeFinder schrieb:

    Wie oft ich den Fehler jetzt schon gesehen hab...:

    hWnd = CreateDialogW(hInst,(LPCWSTR) IDD_MAIN, NULL, (DLGPROC) WndProc);
    

    Komisch. Hab gerade mal im Petzold nachgeschaut, der macht das auch so. Ist das neu?



  • 😕 ne eigentlich nich neu! 😃



  • Mißverständnis. Ich meinte, ob CodeFinders Methode neu ist, wo doch der Petzold 😕 ... naja ihr wißt schon... 😉

    CodeFinder schrieb:

    INT_PTR CALLBACK DlgProc(HWND hWnd, UINT uiMessage, WPARAM wParam, LPARAM lParam);
    


  • definiere Neu ?
    denn das buch hat scho ein paar jahre hinter sich und sind so einige änderungen seit dem hinzugekommen ,unterdessen steht im fast jedem tut ob alt oder neu die methode von CodeFinder 😃



  • Winapi.de schrieb:

    LRESULT CALLBACK ChildProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    LRESULT CALLBACK CheckProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

    http://pronix.linuxdelta.de/C/win32/win32_5.shtml schrieb:

    LRESULT CALLBACK CheckRadioProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
    LRESULT CALLBACK CheckEditProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
    LRESULT CALLBACK CheckListboxProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
    {

    http://www.winapi.net/index.php?inhalt=s8 schrieb:

    BOOL CALLBACK DialogProc (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)

    😕 😕 😕
    Seit wann ist denn CodeFinders Methode gültig? Und was bewirkt sie im Vergleich zu der alten Schreibweise?



  • INT_PTR CALLBACK DlgProc(HWND hWnd, UINT uiMessage, WPARAM wParam, LPARAM lParam);
    

    Jeder machts anders ???????

    naja wenn ich ne nachrichten prozedure erstelle fürn Dialog nehm ich

    INT_PTR CALLBACK DlgProc(HWND hWnd, UINT uiMessage, WPARAM wParam, LPARAM
    


  • INT_PTR .... ist schon richtig, wird aber als true/false verwendet, somit geht auch bool ....



  • Elektronix schrieb:

    Seit wann ist denn CodeFinders Methode gültig? Und was bewirkt sie im Vergleich zu der alten Schreibweise?

    Einfach nur in den Headern nachgucken. Auf/Unter "Win32" bewirkt sie nichts :

    ----------------------
    INT_PTR -> BaseTsd.h :
    ----------------------
    #if defined(_WIN64) 
     typedef __int64 INT_PTR; 
    #else 
     typedef int INT_PTR;        // <- !
    #endif
    ----------------------
    BOOL -> WinDef.h :
    ----------------------
    typedef int BOOL;            // <- !
    

    Bei einer DialogProc soll nur true oder false zurückgegeben werden.
    Bei einer WindowProc kann aber je nach WM_xxxx auch z.B. ein Handle zurückgegeben werden.



  • Huh, was für ein Tumult ich hier ausgelößt habe 😃 ...also der Petzold ist schon etwas älter und so genommen ist es 'neuer'. Der Sinn der Sache ist, dass Eure DlgProc's dann auch auf einem späteren 64-Bit-Rechner funktionieren (nativ). Dafür muss man dann zwar neukompilieren, aber nichts am Quellcodeändern.


Anmelden zum Antworten