C#으로 ESC키 무시 방법을
찾는데찾는데 왜 찾는 녀석은 안나오고... C++에서의 방법들만 나오는지 ㅡ_ㅢ;;
에효.. 암튼...
언제든언제든 쓸모가 있을 듯 하니... 한번 옮겨놔 보련다.....
1.1. Enter, ESC 키 무시 방법
모달리스 다이얼로그를 만들고만들고 이 ESC,ENTER 키를 입력하면 다이얼로그가 사라지게 됩니다. 그렇다고 꼭 이 두두 키를 무시해야 한다는 건 아니고 경우에 따라 무시를 해도 되고 다른다른 동작을 하게해도 됩니다. 이는 개발자 마음!!
모달리스 다이얼로그 클래스에서 PreTranslateMessage()를PreTranslateMessage()를 아래와 같이 오버라이딩 해주면 됩니다.
/*
ESC, Enter key를 무시한다.
*/
BOOL CProcessADlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
switch(pMsg->message)
{
case WM_KEYDOWN:
{
switch(pMsg->wParam)
{
case VK_ESCAPE:
case VK_RETURN:
return TRUE;
}
}
}
return CDialog::PreTranslateMessage(pMsg);
}
2. 소멸 방법
모 달리스 다이얼로그를 소멸하려면 두 가지 측면에서 생각해야 합니다. 하나는 모달리스 다이얼로그를 생성하는 부모 윈도우 객체이고 하나는 모달리스 다이얼로그 자신입니다. 부모 윈도우 객체에서는 모달리스 다이얼로그를 생성할 때 모달리스 다이얼로그 객체 변수를 정한 후 메모리 할당을 하고 Create()함수를 호출하여 생성하게 됩니다. 그렇다면 모달리스 다이얼로그가 파괴 될 때 부모 윈도우가 이를 알 수 있어야 메모리 해제를 제대로 해 줄 수 있습니다. 제가 사용한 방식은 모달리스 다이얼로그 객체에서 자기 자신의 메모리를 해제하고 부모 윈도우에서는 모달리스 다이얼로그 객체변수에 NULL 포인터를 전달하는 방식을 사용했습니다. 이렇게 하기 위해서 모달리스 다이얼로그의 PostNcDestroy()가 호출 되는 시점에서 부모부모 윈도우에게 사용자 정의 메시지(저는 WM_DESTROY_DLG라고 정했습니다.)를 하나 정해서 SendMessage함수를 통해서 메시지를 전달해전달해 주고 부모 윈도우에서는 이 메시지를 처리합니다. 그리고 모달리스 다이얼로그에서 자기 자신의 메모리를메모리를 해제 합니다. 이 과정에 대해서는 예제 소스를 함께 첩부해 놓았습니다. 말로 잘잘 설명해보려고 했는데 글 재주가 없어서;;
※ 위 글에글에 대한 잘못된 부분이나 궁금하신 부분에 대한 피드백은 언제나 환영입니다 ~ 물론,물론, 퍼가신다면 영광이구요. 우리나라의 모든 개발자 분들께서 바쁘시지만 서로 자신의 귀중한 경험과 지식을 공유해서공유해서 함께 발전해 나갈 수 있었으면 합니다 ^^
Dialog.zip
출처: greenfrog님의 블로그 - Programmer greenfrog!!