注:本方法適合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);
- }