注:本方法适合MFC中 如 CEdit 本身不支持鼠标消息处理的控件但是需要鼠标鼠标事件的支持情况下变通使用;
1、本文以CEdit为例;
2、为CEdit控件所在的父窗口所关联的类重载 PreTranslateMessage 方法;
3、在 PreTranslateMessage 方法对对关心的消息进行过滤,并添加自己的消息处理代码;
示例代码如下:
- BOOL CDatabaseSetting::PreTranslateMessage(MSG* pMsg)
- {
- // 当单击数据库文件名文本框时弹出文件对话框选择数据库文件
- if(pMsg->message == WM_LBUTTONDOWN)
- {
- CEdit* ptr = (CEdit*)GetDlgItem(IDC_TEXTBOX_DB_FILENAME);
- CRect rect;
- ptr->GetWindowRect(&rect);
- if( rect.PtInRect(pMsg->pt) )
- {
- CFileDialog dlgFile(TRUE);
- CString fileName;
- const int c_cMaxFiles = 100;
- const int c_cbBuffSize = (c_cMaxFiles * (MAX_PATH + 1)) + 1;
- dlgFile.GetOFN().lpstrFile = fileName.GetBuffer(c_cbBuffSize);
- dlgFile.GetOFN().nMaxFile = c_cMaxFiles;
- dlgFile.DoModal();
- MessageBox(fileName);
- fileName.ReleaseBuffer();
- }
- }
- return CDialogEx::PreTranslateMessage(pMsg);
- }
本文出自 “快乐生活,开心工作” 博客,请务必保留此出处http://shunge.blog.51cto.com/2944070/729947