我在工具栏上的EDIT控件上显示或更改页数的,如何将更改后的EDIT内容通过回车来响应呢?

解决方案 »

  1.   

    PretranslateMessage中截获WM_KEYDOWN
      

  2.   

    我在mainfrm中截获了WM_KEYDOWN消息,但是没有用
      

  3.   

    首先用SPY++得到其类名,然后得到hwnd,然后SetClassLong()修改其窗口过程地址为你的新窗口过程,在新窗口过程中只处理回车,对其他消息调用SetClassLong()时的返回值。新窗口过程可以是全局函数或static的成员函数。
      

  4.   

    在MainFrm中当然不行了,这个你要从CEdit类自己派生一个CMyEdit类,
    重载其PretranslateMessage函数!
    BOOL CBhRuhuoDlg::PreTranslateMessage(MSG* pMsg) 
    {
    if(pMsg->message==WM_KEYDOWN)
    {
    if(pMsg->wParam==VK_RETURN)
    {
    //添加你自己的代码
    return TRUE;
    }
    }
    return CDialog::PreTranslateMessage(pMsg);
    }
      

  5.   

    当然你的Edit控件变量得要是CMyEdit类形的!
      

  6.   

    子类化这个 CEdit,类似以下代码// CMainFrame member
    WNDPROC m_pfnEditProc; // init NULLstatic LRESULT EditProc(HWND, UINT, WPARAM, LPARAM);LRESULT CMainFrame::EditProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
        CMainFrame *pMainWnd = (CMainFrame*)AfxGetMainWnd();
        ASSERT_VALID(pMainWnd);
        
        if (uMsg == WM_KEYDOWN && wParam == VK_RETURN)
        {
            return pMainWnd->OnEditInputEnter();
        }     return CallWindowProc(pMainWnd->m_pfnEditProc, hWnd, uMsg, wParam, lParam);
    }// CMainFrame initialize,after create edit control
    m_pfnEditProc = SetWindowLong(m_ctrlEdit.GetSafeHwnd(), GWL_WNDPROC, EditProc);
    ASSERT(m_pfnEditProc != NULL);