Dialog / Window ohne Resourcen-File



  • Ich habe gerade ein ganz normales Fenster erstellt, wie man es in der WinAPI tut.
    WNDCLASSEX fuellen, registrieren und mit CreateWindowEx erstellen.
    Nun ist mein Wunsch, in diesem noch einen Dialog anzuzeigen. Bisher habe ich immer mit dem Resourceneditor das Layout erstellt und mit DialogBoxParam das Ding angezeigt. Nun hab ich keinen Resourceneditor und erstell mir alles manuell mit Funktionen. Nun fehlt mir aber eine Resourcen-ID wie bisher.
    Wie erstell ich denn jetzt meinen Dialog? Mit CreateWindow?
    So hab ich es naemlich gerade. Ein 2. Fenster als Child vom ersten. Ebenfalls registriert und die Styles so angepasst, dass es wie ein Dialog aussieht. Sowie eine 2. WndProc. Allerdings hab ich das Gefuehl, dass zwischen Fenster und Dialog doch ein Unterschied ist. Denn eine DlgProg besitzt ja noch WM_INITDIALOG waehrend das Fenster WM_CREATE besitzt. Mir fehlt im Moment der Zusammenhang.

    Meine Frage ist also: Erstell ich einen Dialog so, wie ich es bereits tue, oder verwende ich sowas wie CreateDialog, bei dem mir natuerlich der 2. Parameter nicht schluessig ist.


  • Mod

    Du kannst die Ressource als Memory Image zusammenbauen und mit DialogBoxIndirect(Param) aufrufen:
    http://msdn.microsoft.com/en-us/library/ms645457(VS.85).aspx

    Solch ein Image für einen Dialog ist nicht schwer und auch in der MSDN beschrieben: DLGTEMPLATEEX
    http://msdn.microsoft.com/en-us/library/ms645398(VS.85).aspx

    Dann benötigt man gar keine Ressource.

    Du kannst auch nur den Rahmen einer leeren Dialog Ressource erzeugen. Dir das binäre Image aus der Ressourcen Datei mit enem Hex-Editor hlen und als binären Stream in Deine EXE integrieren.

    // IDD_EDIT_MACRO DIALOGEX 0, 0, 375, 239
    // STYLE DS_SETFONT | DS_FIXEDSYS | WS_MAXIMIZEBOX | WS_POPUP | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
    // CAPTION "Macro Editor"
    // FONT 8, "MS Shell Dlg", 400, 0, 0x1
    // BEGIN
    // END
    
    static const BYTE dlgTemplate[] = 
    {
    	0x01, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0xcd, 0x86, 
    	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x01, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x00, 
    	0x61, 0x00, 0x63, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x45, 0x00, 0x64, 0x00, 0x69, 0x00, 
    	0x74, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x00, 0x00, 0x08, 0x00, 0x90, 0x01, 0x00, 0x01, 0x4d, 0x00,
    	0x53, 0x00, 0x20, 0x00, 0x53, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x6c, 0x00, 0x20, 0x00,  
    	0x44, 0x00, 0x6c, 0x00, 0x67, 0x00, 0x00, 0x00, 
    	0
    };
    

Anmelden zum Antworten