其实弹出什么都无所谓,主要是编辑框的点击事件处理遇到点问题,我试验了Edit和RichEdit2.0控件,试验了网上相传的重载Dlg::PreTranslateMessage(MSG* pMsg)方法;SetFocus方法;自己定义事件方法....都没有解决我遇到的问题,可能是我实现的不对,请大家帮忙解决,谢谢!
我想在点击编辑框时弹出个东西,但是上述方法试验都遇到同一问题,就是从我第一次点在编辑框上,弹出提示后,以后我不点编辑框,点对话框上的其他任何位置,都会弹出提示。似乎我处理的不是编辑框的点击事件。我如何才能获得正常效果呢?“点编辑框有提示,点其他位置无反映。”
我也派生一个编辑框类,在派生的类中处理PreTranslateMessage处理了点击事件,可是还是不行,帖一个方法的代码,各位看是不是有问题。如果有更好的实现方法,也请赐教,能实现目的就行。
BOOL CMyEdit::PreTranslateMessage(MSG* pMsg) 
{
// TODO: Add your specialized code here and/or call the base class
if (pMsg->message == WM_LBUTTONDOWN)
{
HWND hWnd = ::GetFocus();
int iID=::GetDlgCtrlID(hWnd);
if(iID==IDC_EDIT)
{
AfxMessageBox(_T("点我!"));
}
}////////////////或者////////////////////////////////
if (pMsg->message == WM_LBUTTONDOWN)
{
CWnd * pWnd = (CWnd*) GetDlgItem(IDC_RICHEDIT21);  
if (pWnd == GetFocus())
{
AfxMessageBox(_T("点我!"));
return TRUE;
}
}
////////////////////////////////////////////////////////return CEdit::PreTranslateMessage(pMsg);
}

解决方案 »

  1.   

    你这个代码是贴在了对话框代码里还是自绘的EDIT
    我怎么看见了这个return CEdit::PreTranslateMessage(pMsg);而上面的那个方法没有这句
      

  2.   

    你用的是焦点判断,第一次点击Edit后弹出提示,之后焦点就转移到Edit上了,所以从第二次开始无论你点哪里,由于焦点始终在Edit上,所以你的判断始终为True,当然会弹出提示了。改为判断Edit的Rect就行了!BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg) 
    {
    if (pMsg->message == WM_LBUTTONDOWN)
    {
    CPoint ptCur;
    GetCursorPos(&ptCur); CRect rcWnd;
    GetDlgItem(IDC_EDIT1)->GetWindowRect(rcWnd); if(rcWnd.PtInRect(ptCur))
    {
    MessageBox("点我!");
    } } return CDialog::PreTranslateMessage(pMsg);
    }
      

  3.   


    呵呵...我只是把中间的一部分写了两种方法,前面和后面的一样,所以没有写~问题我解决了,见http://blog.csdn.net/xiaoyaofriend/article/details/7754056