2017-09-12 5 views
-1

Ich habe mehrere Dinge tryed aber die Basis kommt dazu:Wie mache ich einen CDialog?

#include <stdio.h> 
#include <afxwin.h> 


main(int argc, const char* argv[]) 
{ 

    printf("\nHello World\n\n"); 

    CDialog *dlg = new CDialog(); 
    dlg->DoModal(); 

    while(true)Sleep(1); // Sleep is a windows function 
} 

wenn ich bekomme ich diese laufen: enter image description here

Was bin ich für diesen Dialog fehlt?

Ich suchte mehrere Websites, aber alle erhalten die gleiche Fehlermeldung.

kann mir jemand sagen was ich nicht sehe?

+2

Sie möchten einen Dialog anzeigen, okay. Aber was soll es enthalten? Nur ein bisschen Text (stattdessen "MessageBox" verwenden)? Oder irgendeine Art von Formular (stattdessen ein dialogbasiertes Projekt erstellen)? Etwas anderes? –

+0

am Ende möchte ich einige Informationen aus dem Dialog erhalten wollen. Aber zuerst möchte ich einen leeren Dialog anzeigen: D –

+1

Verwenden Sie einfach den Visual Studio-Anwendungsassistenten, um eine "dialogbasierte" Anwendung zu erstellen. Dadurch wird der erforderliche Code zum Erstellen eines "leeren" Dialogfelds generiert. Später können Sie versuchen, alles von Grund auf neu zu machen, aber für Anfänger wird empfohlen, den Assistenten zu verwenden. – zett42

Antwort

2

Die Verwendung der MFC in einer Konsolenanwendung erfordert einige Initialisierungen. Ohne dies werden Sie geltend gemacht.

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) 
{ 
    // initialize MFC and print and error on failure 
    if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) 
    { 
     // TODO: change error code to suit your needs 
     _tprintf(_T("Fatal Error: MFC initialization failed\n")); 
     return 8; 
    } 

Sie müssen auch eine Ressource verwenden, die an den CDialog gebunden ist. Sie können die entsprechenden Konstruktoren verwenden. Oder Sie leiten Ihren eigenen Dialog von CDialog mit dem Klassenassistenten ab.

Aber es macht für mich keinen Sinn, eine MFC-Konsolenanwendung zu erstellen und Dialoge zu verwenden ... Ihre Frage benötigt möglicherweise mehr Details, was Sie tun möchten und warum Sie dies auf diese Weise tun möchten.

Sie müssen möglicherweise einige Bücher oder Artikel lesen, bevor Sie diese Art der Programmierung fortsetzen.

+2

Sie müssen nicht von 'CDialog' ableiten. Wäre dies der Fall, wären alle expliziten Konstruktoren geschützt (sie sind * nicht *). Es ist jedoch ziemlich begrenzt in den Dingen, die Sie tun können (weil Sie wirklich nicht viel tun, außer die Standardverarbeitung von 'CDialog' zu erlauben. Die wichtigsten Teile dieser Antwort sind (a) richtiges Einrichten von MFC, und (b) Sicherstellen, dass der Dialog an eine Ressource gebunden ist (im Gegensatz zur Verwendung des ungebundenen Konstruktors). Weder * von diesen sind gegenwärtig in dem OP-Code und * beide * sollten. – WhozCraig

+0

Danke für den Rat. Meine Antwort geändert . – xMRi