Dialog ohne .rc?



  • kann ich ein Dialogfenster auch einfach generieren ohne eine .rc zu haben?

    Alternativ kann mir auch mal jemand erklären, wie ich in Eclipse CDT .rc-Dateien einbinde 😃



  • DocJunioR schrieb:

    kann ich ein Dialogfenster auch einfach generieren ohne eine .rc zu haben?

    Natürlich... siehe "CreateDialogIndirect"



  • Da muss man doch dann son DLGTEMPLATE-Struct übergeben, oder ?
    dass hab ich irg wie noch nie gecheckt...hast du vll n kleinen BspCode ?

    biüdde .... 🙄


  • Mod

    FragNur schrieb:

    Da muss man doch dann son DLGTEMPLATE-Struct übergeben, oder ?
    dass hab ich irg wie noch nie gecheckt...hast du vll n kleinen BspCode ?

    Das ist doch eine normale Struktur:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/WindowsUserInterface/Windowing/DialogBoxes/DialogBoxReference/DialogBoxStructures/DLGITEMTEMPLATE.asp

    Ansonsten kannst Du auch ein Fenster mit der Klasse #32770 erzeugen mit CreateWindow erzuegen.



  • Warum nimmst du nicht eine anständige IDE?



  • tzzzz schrieb:

    Warum nimmst du nicht eine anständige IDE?

    Ich hätte da gleich einen Vorschlag:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-143003.html



  • Eclipse ist eine super IDE..
    Der Große Vorteil liegt für mich darin, dass sie fast alles kann.
    Da ich nicht nur C++, sondern auch Java, PHP und mehr mache und nicht 2000 IDE's auf meinem PC haben will ist das doch optimal..



  • Jochen Kalmbach schrieb:

    tzzzz schrieb:

    Warum nimmst du nicht eine anständige IDE?

    Ich hätte da gleich einen Vorschlag:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-143003.html

    VC++ Express ist m.E. aber leider aufgrund fehlenden rc-Editors nur ganz bedingt für die WinAPI geeignet. Dass unter windows.forms einer existiert, zeigt ganz deutlich, dass man gerade Anfänger auf .NET "einschießen" will.

    Eine ganz gute Kombination ist VC++ Express und wxWidgets. Dialoge lassen sich sehr fein mit wxGlade erzeugen und per wxXRC ganz ohne klassische Ressourcen einbinden.



  • andere Frage: kann ich dafür sorgen, dass ein normales Fenster wie ein Dialog genutzt wird? Also möchte ih quasi das Hauptprogramm einfrieren bis der Dialog geschlossen ist..



  • DocJunioR schrieb:

    andere Frage: kann ich dafür sorgen, dass ein normales Fenster wie ein Dialog genutzt wird? Also möchte ih quasi das Hauptprogramm einfrieren bis der Dialog geschlossen ist..

    Einfach den Dialog modal starten... (DialogBox...)



  • simon.phoenix schrieb:

    VC++ Express ist m.E. aber leider aufgrund fehlenden rc-Editors nur ganz bedingt für die WinAPI geeignet.

    Das sollte aber nicht der Grund sein auf Resourcen zu verzichten... schliesslich gibt es genug freie Resource-Editoren.
    http://www.radasm.com/
    http://www.parinyasoft.com/
    (siehe auch Announcement-Link)

    simon.phoenix schrieb:

    Dass unter windows.forms einer existiert, zeigt ganz deutlich, dass man gerade Anfänger auf .NET "einschießen" will.

    Ja, da geb ich Dir (leider) recht.



  • Oookay.. was hier stand, war nich so doll 😉

    Hab denk ich jetzt einen äeh.. Grundgedanken..
    mal schauen..



  • soo... also irgendwie kommt hier bei mir nix zum Vorschein..

    int cCamEditor::doDialog(vector<cCommand*> commands, cCamera *cam) {
        DLGTEMPLATE tmpl;
        tmpl.style = WS_VISIBLE| WS_SYSMENU | DS_MODALFRAME | DS_CENTER | DS_SETFOREGROUND;
        tmpl.dwExtendedStyle = 0;
        tmpl.cdit = 2;
        tmpl.x = 30;
        tmpl.y = 30;
        tmpl.cx = 100;
        tmpl.cy = 40;
    
        return DialogBoxIndirectParam(this->hInstance, &tmpl, this->hParent, cCamEditor::dlgProc, (LPARAM)this);
    }
    
    BOOL CALLBACK cCamEditor::dlgProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
        cCamEditor *This = reinterpret_cast<cCamEditor*>(GetWindowLong(hwnd, GWL_USERDATA));    
    
        switch (message) {
            case WM_INITDIALOG:
                SetWindowLong(hwnd, GWL_USERDATA, lParam);
                This->btnOK     = CreateWindow ("BUTTON", "OK",  WS_VISIBLE|WS_CHILD, 10, 190, 60, 20, hwnd, NULL, This->hInstance, NULL);
                This->btnCancel = CreateWindow ("BUTTON", "Cancel", WS_VISIBLE|WS_CHILD, 80, 190, 60, 20, hwnd, NULL, This->hInstance, NULL);
                break;
            case WM_COMMAND: 
                if (lParam == (LPARAM) This->btnOK) {
                        EndDialog (hwnd, 1);
                        This->retval = true;
                } else if (lParam == (LPARAM) This->btnCancel){
                        EndDialog (hwnd, 0);
                        This->retval = false;
                }
                break;
            default:
                return DefDlgProc (hwnd, message, wParam, lParam);
        }
        return TRUE;    
    }
    

    Der Aufruf von doDialog öffnet augenscheinlich kein Fenster

    sprintf(s, "result :%d", this->cEdit->doDialog(this->commandHistory, this->activeCam));
                MessageBox(NULL, s, "Test", MB_OK);
    

    in der wndProc des Hauptfensters öffnet mir sofort die MessageBox mit dem Return Code -1. (Fehler)
    Der Fehler der per getLastError() kommt ist 1812.

    Kann mir wer erklären warum?


Log in to reply