在一个无边框窗体里有一个CRichEditCtrl控件(充满整个窗体),现在要求在CRichEditCtrl里拖动鼠标即能拖动窗体,怎么弄呢?请给出具体代码。

解决方案 »

  1.   

    估计他的意思是CRichEditCtrl只用来显示东西,不给选里面的文字,可以这么的简单实现:在CRichEditCtrl里响应WM_NECHITTEST消息,在这个响应函数里 直接return HTTRANSPARENT在CRichEditCtrl的父窗口里也也响应WM_NECHITTEST消息 直接return HTCAPTION
    即可
      

  2.   

    我觉得,可以首先定义一个变量来记录鼠标是否被按下,然后在WM_LBUTTONDOWN里设置该变量为TRUE,然后在WM_MOUSEMOVE里面判断鼠标是否被按下,若按下,就给父窗口发送SetWindowPos消息,改变位置。
      

  3.   

    "CRichEditCtrl里响应WM_NECHITTEST消息"--找不到此消息
      

  4.   

    “在WM_LBUTTONDOWN里设置该变量为TRUE” CRichEditCtrl里没有WM_LBUTTONDOWN消息、WM_LBUTTONMOVE消息
      

  5.   

    "CRichEditCtrl里响应WM_NECHITTEST消息"--找不到此消息
    ------------------
    是WM_NCHITTEST 写错了 查下MSDN或者搜下百度就知道
      

  6.   

    BOOL CXXDlg::PreTranslateMessage(MSG* pMsg) 
    {
    // TODO: Add your specialized code here and/or call the base class
    CRichEditCtrl* pEdit = (CRichEditCtrl*)GetDlgItem(IDC_RICHEDIT1);
    ASSERT(pEdit && pEdit->GetSafeHwnd()); if((WM_LBUTTONDOWN == pMsg->message) && (pMsg->hwnd == pEdit->GetSafeHwnd()))
    {
    CPoint pt = pMsg->pt;
    SendMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(pt.x, pt.y));
    return TRUE;
    }
    return CDialog::PreTranslateMessage(pMsg);
    }