대화 상자 기반 프로그램 에서 대화 상자 에 WM 캡 처KEYDOWN 소식 의 실현 방법
이 처리 과정 을 알 게 된 이상 버튼 메 시 지 를 베이스 로 처리 하 는 함 수 를 찾 아서 하위 클래스 에서 다시 불 러 오 면 대화 상자 프로그램 에서 버튼 메 시 지 를 처리 할 수 있 습 니 다.MFC 에 서 는 BOOL ProcessMessage Filter(int code,LPMSG lpMsg)라 는 가상 함 수 를 이용 하여 메뉴 와 대화 상자 의 특정 윈도 메 시 지 를 걸 러 내 거나 응답 합 니 다.다음은 대화 상 자 를 기반 으로 한 프로그램 이 WM 에 대해 프로그램 을 통 해 보 여 드 리 겠 습 니 다.케 이 던 소식 포착.
첫 번 째 단계:새 프로젝트 를 만 들 고 MFC AppWizard(exe)를 선택 하 십시오.프로젝트 이름 은 WinSun 입 니 다.ok 을 누 르 고 다음 단계 에 들 어가 Dialog based 를 선택 하고 Finish 를 누 르 십시오.
두 번 째 단계:CWinSunApp 클래스 에서 오른쪽 단 추 를 누 르 고 Add Member Varialbe 를 선택 하여 HWND,변수 명 mhwndDlg 의 Public 변수 입 니 다.
코드 는 다음 과 같 습 니 다.
WinSun.h
class CWinSunApp : public CWinApp
{
public:
HWND m_hwndDlg;
CWinSunApp();
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CWinSunApp)
public:
virtual BOOL InitInstance();
//}}AFX_VIRTUAL
// Implementation
//{{AFX_MSG(CWinSunApp)
// NOTE - the ClassWizard will add and remove member functions here.
// DO NOT EDIT what you see in these blocks of generated code !
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
세 번 째 단계:WinSun.cpp(CWinSunApp 류)파일 의 Init Instance()함수 에 다음 과 같은 코드 를 추가 합 니 다.
WinSun.cpp
BOOL CWinSunApp::InitInstance()
{
AfxEnableControlContainer();
// Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable, you should remove from the following
// the specific initialization routines you do not need.
#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif
CWinSunDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
// dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
// dismissed with Cancel
}
// Since the dialog has been closed, return FALSE so that we exit the
// application, rather than start the application's message pump.
m_hwndDlg=NULL;
return FALSE;
}
네 번 째 단계:CWinSunApp 류 에서 오른쪽 단 추 를 누 르 고 Add Virtual Function 을 선택 하 십시오.왼쪽 칸 에서 ProcessMessage Filter 를 선택 하고 오른쪽 단추 에서 Add and Edit 을 선택 하 십시오.그리고 다음 코드 를 추가 합 니 다:
WinSun.cpp
BOOL CWinSunApp::ProcessMessageFilter(int code, LPMSG lpMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(m_hwndDlg!=NULL)
{
// , , 。sunxin
if((lpMsg->hwnd==m_hwndDlg) || ::IsChild(m_hwndDlg,lpMsg->hwnd))
{
// WM_KEYDOWN, 。sunxin
if(lpMsg->message==WM_KEYDOWN)
{
AfxMessageBox(" WM_KEYDOWN !");
}
}
}
return CWinApp::ProcessMessageFilter(code, lpMsg);
}
다섯 번 째 단계:WinSunDlg.cpp(CWinSunDlg 류)의 OnInitial Dialog()함수 에 다음 코드 를 추가 합 니 다:
WinSunDlg.cpp
BOOL CWinSunDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
// CWinSunApp 。sunxin
((CWinSunApp*)AfxGetApp())->m_hwndDlg=m_hWnd;
return TRUE; // return TRUE unless you set the focus to a control
}
여섯 번 째 단계:대화 상자 창 을 소각 한 후 CWinSunApp 류 의 변수 mhwndDlg 를 NULL 로 설정 합 니 다.이 를 위해 CWinSunDlg 클래스 에서 오른쪽 단 추 를 누 르 고 Add Windows Message Handler 를 선택 하 십시오.왼쪽 칸 에서 WM 을 선택 하 십시오.DESTROY,오른쪽 단추 에서 Add and Edit 를 선택 하고 다음 코드 를 추가 합 니 다.
WinSunDlg.cpp
void CWinSunDlg::OnDestroy()
{
CDialog::OnDestroy();
// TODO: Add your message handler code here
((CWinSunApp*)AfxGetApp())->m_hwndDlg=NULL;
}
이로써 우리 의 일 은 끝 났 습 니 다.이제 우 리 는 Ctrl+F5 를 누 르 면 우리 가 원 하 는 결 과 를 볼 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
대화 상자 기반 프로그램 에서 대화 상자 에 WM 캡 처KEYDOWN 소식 의 실현 방법대화 상자 프로그램 에서,우 리 는 항상 대화 상자 의 하위 컨트롤 을 이용 하여 명령 응답 을 해서 일부 사건 을 처리한다.버튼 메시지 에 대화 상자(하위 컨트롤 의 부모 창)클래스 를 응답 시 키 려 면 Clas...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.