2017-09-12 14 views
-1

나는 여러 가지 tryed했지만 기본이 오는 :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 
} 

내가이 얻을 실행 :이 대화 누락하고 무엇 enter image description here

를?

여러 사이트를 조회했지만 모두 동일한 오류 메시지가 표시됩니다.

누군가 내가 무엇을 보지 못하게 할 수 있습니까?

+2

대화 상자를 표시하고 싶습니다. 그러나 무엇을 담고 싶습니까? 그냥 텍스트 (대신'MessageBox' 사용)? 아니면 어떤 종류의 폼 (대신 대화 상자 기반 프로젝트 만들기)? 다른 것? 결국 –

+0

대화 상자에서 일부 정보를 얻고 싶습니다. 하지만 먼저 빈 대화 상자를 표시하고 싶습니다. D –

+1

시작하려면 Visual Studio 응용 프로그램 마법사를 사용하여 "대화 상자 기반"응용 프로그램을 만듭니다. 이렇게하면 "비어있는"대화 상자를 만드는 데 필요한 코드가 생성됩니다. 나중에 처음부터 모든 것을 시도 할 수는 있지만 초보자는 마법사를 사용하는 것이 좋습니다. – zett42

답변

2

콘솔 응용 프로그램에서 MFC를 사용하려면 초기화가 필요합니다. 이것이 없으면 단언 할 수 있습니다.

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; 
    } 

또한 CDialog에 바인딩 된 리소스를 사용해야합니다. 적절한 생성자를 사용할 수 있습니다. 또는 클래스 마법사를 사용하여 CDialog에서 직접 대화 상자를 파생시킵니다.

그러나 MFC 콘솔 응용 프로그램을 만들고 대화 상자를 사용하는 것은 이해가되지 않습니다 ... 질문에 대한 자세한 내용, 수행 할 작업, 그리고 이러한 방식으로 수행해야하는 이유가 필요할 수 있습니다.

이 프로그래밍 방법을 계속하기 전에 일부 서적이나 기사를 읽어야 할 수도 있습니다.

+2

'CDialog'에서 파생 될 필요는 없습니다. 그 경우, 모든 명시 적 생성자가 보호됩니다 (*는 아닙니다 *). (CDialog에서 디폴트 처리를 허용하는 것 외에는 아무것도하지 않기 때문에)이 대답의 가장 중요한 부분은 (a) MFC를 적절하게 설정하고, (b) 언 바운드 생성자를 사용하는 것과는 달리 대화 상자가 리소스에 바인딩되도록합니다. * 현재 OP 코드에 포함되어 있지 않습니다. * 둘 다 있어야합니다. – WhozCraig

+0

조언을 주셔서 감사합니다. 내 대답이 변경되었습니다. . – xMRi