모달리스 창이 떠 있나 조사하려는 곳에 아래의 소스를 입력하면 확인할 수 있습니다.

"m_ProgramStatDlg"만 자신에게 맞는 객체명으로 바꿔주면 됩니다.


※소스

if( m_ProgramStatDlg != NULL && m_ProgramStatDlg->IsWindowVisible() == TRUE )
{
	printf("모달리스 창이 떠 있습니다.\n");
}
else
{
	printf("모달리스 창이 안 떠 있습니다.\n");
}


저는 임시로 "오류 알림" 버튼에 위의 소스를 넣었습니다.


'MFC > 기타' 카테고리의 다른 글

[MFC] GetModuleFileName 이용하여 현재 실행 경로 얻기  (0) 2016.03.16
[MFC] Enter/ESC 키 방지  (0) 2013.10.14



아래는 MFC 프로젝트에 디버깅을 위한 콘솔 창을 띄운 모습입니다. (아래 프로그램은 로또 프로그램)



사실 MFC의 경우는 아래 캡쳐와 같이 TRACE 매크로를 통해 로그(디버깅 메시지)를 확인할 수 있지만

Win32 API의 경우는 TRACE 매크로가 없으며, 있어도 TRACE보다는 printf로 출력하는 게 더 편할 때도 있어서 

가끔 콘솔창을 이용합니다.



TRACE보다 printf로 출력하면 더 편한 몇 가지 이유로는

 - printf의 경우 서식문자를 쓸수 있다.  ex) printf( "에러 번호 : %d, 에러 내용 : %s", nErrorNum, GetLastError() );

 - TRACE의 경우 출력 창에 내용이 표시되는데, TRACE 내용 말고도 잡다한 내용이 많다.

 - 콘솔 창의 경우는 내가 남긴 로그만 볼 수 있어서 깔끔하다.




제가 아는 콘솔창 띄우는 방법은 2가지가 있습니다. ( 그 외 AllocConsole 등도 있음 )

아래와 같이 프로젝트 속성에서 창을 띄우는 방법이 있고



아래의 소스를 추가하는 방법이 있습니다.

아래 소스는 아시다시피 디버깅 모드일 때만 콘솔창이 뜨도록 한 겁니다.

#ifdef _DEBUG #pragma comment(linker, "/entry:WinMainCRTStartup /subsystem:console") #endif


CDialog 클래스를 상속받아 만들어진 윈도우는 Enter와 ESC 키에 윈도우가 닫히는 특징이 있습니다. 이런 현상을 방지하려면 가상 함수인 PreTranslateMessage 함수에 WM_KEYDOWN 메시지를 검사해서 누른 키가 Enter나 ESC면 처리하지 않고 반환하게 하면 됩니다.


BOOL TestDlg::PreTranslateMessage( MSG* pMsg )
{
       if( pMsg->message == WM_KEYDOWN && (pMsg -> wParam == VK_RETURN || pMsg -> wParam == VK_ESCAPE) )
       {
               pMsg->wParam = NULL;
       }

       return CDialog::PreTranslateMessage( pMsg );
}



UpdateData( TRUE ) 는 컨트롤 -> 변수

UpdateData( FALSE ) 는 변수 -> 컨트롤


보통 함수 시작 부분에 UpdateData( TRUE )가 먼저 오고 함수 끝 부분에 UpdateData( FALSE )가 옵니다.


이것을 DDX( Dialog Data Exchange )라고 합니다

+ Recent posts