가장 확고한 방법은 PreTranslateMessage 이용하는것.
아래 설명의 마지막에 있는 PreTranslateMessage 적극 활용할것.
BOOL CCyFinBotDlg::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYDOWN)
{
switch (pMsg->wParam)
{
case VK_ESCAPE:
case VK_RETUN:
return TRUE;
default :
break;
}
}
// TODO: Add your specialized code here and/or call the base class
return CDialogEx::PreTranslateMessage(pMsg);
}
alt F4, ESC키, x 버튼 클릭 해도 대화상자 안죽게.
방법요약.
대화상자 클래스의 OnCancel 오버라이딩하고, OnCancel 실행되지 않게 주석처리하면 Alt F4 나 x버튼 눌러도 종료 안됨.
상세.
아래그림.
왼쪽 클래스 뷰에서 대화상자 클래스 (CDlgMain) 선택하여 화면 오른쪽 속성창에서 버튼 "재정의(입방체)" 클릭하여 OnCancel 선택하여 코드에 함수 오버라이딩 시키고(파랑색 박스) , 마지막에 있는 CDialog::OnCancel(); 이 실행되지 못하게 주석처리.
동영상.
- OnCancel 무효화 처리과정 전체.
- 대화상자 클래스 예 : CCyDevice4_UITDlg
enter쳐도 대화상자 안죽게.
방법요약.
대화상자 클래스에서 함수 OnOK() 오버라이딩하고, OnOKl실행되지 않게 주석처리하면 엔터 쳐도 대화상자 안 닫힘.
동영상.
PreTranslateMessage 이용하는 방법. - 이 방법이 최고.
ESC키는 클릭 해도 대화상자 안죽고, alt F4, x버튼 클릭시에는 죽게하기
앞의 OnCancel 을 무효화하면 alt F4, X버튼 누른 경우 , 혹은 외부 WM_CLOSE 메시지에 의한 종료 시도에도 대화상자 안죽는다. OnCancel 무효화 한 경우 대화상자 종료 할려면 코드에서 별도로 Destroywindow() 함수 호출해야 대화상자 종료가능하다.
esc 키에 의한 경우에만 대화상자 안닫히게 할려면 OnCancel 무효화 하지 않고 아래 코드 처럼 함수 PreTranslateMessage 오버라이딩하여 esc 입력 검출되면 return 처리하면 esc 키 입력시에만 대화상자 종료안된다.
그외 x 버튼, alt F4, WM_CLOSE 메시지 등에 의해서는 대화상자 종료됨.
alt F4 누른 경우에도 종료 안되게 하려면 아래 코드처럼 VK_F4 도 무효처리 하면된다.
// 2022.01.30
BOOL CCyFinBotDlg::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYDOWN)
{
switch (pMsg->wParam)
{
case VK_ESCAPE: // esc 키 누른것
case VK_RETURN: // enter 키 누른것.
return TRUE;
default :
break;
}
}
else if (pMsg->message == WM_SYSKEYDOWN)
{
switch (pMsg->wParam)
{
case VK_F4:
return TRUE;// F4 키 누른것. (ALT F4 눌러도 프로그램 안죽게 할려는것)
default :
break;
}
}
// TODO: Add your specialized code here and/or call the base class
return CDialogEx::PreTranslateMessage(pMsg);
}
상위정리 : Visual Studio/VC++/C/C# 활용정리 -> http://igotit.tistory.com/11
첫등록 : 2015년 12월 12일
최종수정 : 2022.01.30
본 글 단축주소 : https://igotit.tistory.com/485
'VisualStudio.C++.C#' 카테고리의 다른 글
VC++ 프로젝트에 일반클래스 추가. 예: CyFinAPI(DLL) 프로젝트에 CCyTrayIcon 추가. (0) | 2015.12.13 |
---|---|
Visual Studio 2015 Installer 설치하기. (0) | 2015.12.13 |
VC++. MFC 대화상자 Modeless 생성/종료하기. 예: CyFinAPI DLL 프로젝트 내의 CDlgMain 생성/종료 (0) | 2015.12.12 |
Visual Studio 2015 VC++ 배포시. Universal CRT(C RuntTme) 라이브러리 배포 방법. (0) | 2015.12.12 |
VC++ 응용프로그램에서 DLL 사용하기. 예: CyFinAPI.DLL 을 CyFinAPI_App1 에서 사용. (0) | 2015.12.12 |
댓글