就是界面上的对象,可以用鼠标可以拖动,并且可以右键什么的。
该怎么做?像BUTTON这种控件  ,是不可以拖动的。怎样做成可以拖动的?自己写个响应函数就可以了?还是得做自定义控件?

解决方案 »

  1.   

    例如:(手写的代码)
    从CButton 继承一个自定义类CMyButton在类中添加消息响应 WM_MouseMove{
      if(nflags == wk_button)//如果左键点击未松开
        {
               movewindow(...);//这个地方的坐标你得自己重新计算一下 不是直接用point.x point.y
        }                      //要计算按钮左上角 和 鼠标点击 的偏移量
    }自己的思路 希望对你有帮助 嘿嘿
      

  2.   

    /****************************************************************************
    添加虚函数PreTranslateMessage
    vs2008 下测试通过
    ****************************************************************************/
    BOOL CDemoDlg::PreTranslateMessage(MSG* pMsg)
    {
    if (pMsg->message==WM_LBUTTONDOWN)
    {
    TCHAR ClassName[200];
    ::GetClassName(pMsg->hwnd,ClassName,sizeof(ClassName)/sizeof(TCHAR));
    trace(ClassName);
    if (_tcscmp(ClassName,_T("Button"))==0)
    {
    ::SendMessage(pMsg->hwnd,WM_NCLBUTTONDOWN, HTCAPTION,NULL); return 1;
    } }
    return CDialog::PreTranslateMessage(pMsg);
    }
      

  3.   

    重写CButton类,处理WM_LBUTTONDOWN,WM_LBUTTONUP和WM_MOUSEMOVE消息也可以,利用MoveWindow/SetWindowPos()来调整Button控件的位置区域