FIX: Visual C++ 에서 대화 상자를 만들 때 CDialog::Create() 함수는 잘못된 값을 반환합니다.

기술 자료 번역 기술 자료 번역
기술 자료: 193099 - 이 문서가 적용되는 제품 보기.
이 문서가 보관되었습니다. "그대로" 제공되었으며, 업데이트가 되지 않을 것입니다.
모두 확대 | 모두 축소

이 페이지에서

현상

대화 상자에서 만든 CDialog::Create() 호출 및 대화 상자 OnInitDialog() WM_INITDIALOG 메시지에 대한 응답으로 끝나는 통해 EndDialog() 통해 대화 상자에 0이 아닌 값이 CDialog::Create() 반환됩니다. 이런 경우 CDialog::Create() 0이 반환해야 합니다.

대화 상자의 인해 대화 상자의 OnInitDialog() EndDialog() 호출을 테이프까지, 때문에 CDialog::m_hWnd 이런 NULL 입니다.

원인

추가 테스트 창 핸들을 비어 있는 경우에도 Create() 완료하지 초래하는 있는 (줄에서 365 Dlgcore.cpp), WM_INITDIALOG 코드에서 했습니다.

Visual C++ 5.0 MFC 코드를:
BOOL CWnd::CreateDlgIndirect(LPCDLGTEMPLATE lpDialogTemplate,

      CWnd* pParentWnd, HINSTANCE hInst)

   {

      // ...

      if (hWnd == NULL)
      {
         // ...
         // .. dump some debug information
         return FALSE;
      }

      ASSERT(hWnd == m_hWnd);
      return TRUE;
   }
				
Visual C++ 6.0 MFC 코드를:
BOOL CWnd::CreateDlgIndirect(LPCDLGTEMPLATE lpDialogTemplate,

      CWnd* pParentWnd, HINSTANCE hInst)

   {

      // ...
      // Help with error diagnosis (only if WM_INITDIALOG didn't
      // EndDialog())
      if (hWnd == NULL && (m_nFlags &amp; WF_CONTINUEMODAL)) // <--- PROBLEM!!!

{
         // ... dump some debug information.
         return FALSE;
      }

      ASSERT(hWnd == m_hWnd);
      return TRUE;

   }
				

해결 방법

때 호출 CDialog::Create CDialog::Create(), 반환 값 및 CDialog::m_hWnd 값을 모두 확인하십시오. CDialog::m_hWnd 비어 대화 상자를 만들기 실패 는.

현재 상태

Microsoft는 이 Microsoft 에서 버그를 확인했습니다 이 문서의 시작 부분에 나열된 제품. Visual Studio 6.0 서비스 팩 1 에서 이 버그가 수정되었습니다.

이 서비스 팩을 얻으려면 참조하십시오.
http://msdn2.microsoft.com/en-us/vstudio/Aa718362.aspx
Visual Studio 6.0 서비스 팩 1에 대한 자세한 내용은 Microsoft 기술 자료에 있는 다음 문서를 참조하십시오.
193009 INFO: Visual Studio 6.0 Service Pack 1 Readme

194022 Visual Studio 6.0 service packs, what, where, why

194295 How To Tell That a Visual Studio Service Pack Is Installed

추가 정보

CDialog::m_hWnd 변수에 대해 검사도 때문에 대화 상자를 표시하는 코드를 수정하십시오. 예를 들어,:
 
   // Create a modeless dialog box. In this example, m_pModeless is a
   // member variable of type CModeless where CModeless is a CDialog-
   // derived class. IDD_MODELESS is the ID number of a dialog-box template
   // resource.
   m_pModeless = new CModeless;
   if (m_pModeless->Create(IDD_MODELESS, this) &&
      ::IsWindow(m_pModeless->m_hWnd))
   {
      // ... succeeded in dialog-box creation.
   }
   else
   {
      // ... failed in dialog-box creation.
   }
				

문제를 재현하는 방법

  1. MSDN CD에서 MFC 샘플 MODELESS는 복사하십시오.
  2. 클래스를 CAdderDialog 클래스의 WM_INITDIALOG 메시지에 대한 응답으로 OnInitDialog() 메시지 처리기를 추가하는 데 사용하십시오. CAdderDialog은 CDialog 파생 클래스입니다.
  3. EndDialog(), CAdderDialog::OnInitDialog() 같이 호출할:
       BOOL CAdderDialog::OnInitDialog()
       {
          CDialog::OnInitDialog();
    
          // TODO: Add extra initialization here
          EndDialog(-1);
          return TRUE;  // return TRUE unless you set the focus to a control
                   // EXCEPTION: OCX Property Pages should return FALSE
       }
    					
  4. VC에서 Win32 릴리스 빌드를 선택합니다 ++ 의 Build\Set 활성 구성 메뉴 명령을.
  5. 빌드하고 모덜리스 샘플을 실행하십시오.
  6. 대화 상자에서 추가를 클릭하십시오. Modeldlg.cpp 파일 (줄에서 178) m_pModeless->Create() 호출이 CAdderDialog 모덜리스 대화 상자 표시와에 대한 추가 단추를 이런 일으키는 TRUE를 반환합니다. 해제할 수 있습니다.
(c) Microsoft가 1999년 예약된 모든 권한. Yeong Kah Tam, Microsoft Corporation은 기고물

속성

기술 자료: 193099 - 마지막 검토: 2014년 2월 22일 토요일 - 수정: 6.2
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Foundation Class Library 4.2?을(를) 다음과 함께 사용했을 때
    • Microsoft Visual C++ 5.0 Professional Edition
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 5.0 Learning Edition
    • Microsoft Visual C++ 6.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
키워드:?
kbnosurvey kbarchive kbmt kbfunctions kbqfe kbbug kbdlg kbfix kbnoupdate kbvc600sp1fix kbvs600sp1fix KB193099 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com