如何实现在基于对话框的窗口只能改变大小,不能拖动?

解决方案 »

  1.   

    只要在onlbuttondown()发送消息,让window 认为你单击了标题栏
    那膜window 就会让你,drag到任意地方,即是你的对胡框没有标题栏,
    即发消息: PostMessage(WM_NCLBUTTONDOW,
    HTCAPTION,MAKELPARAM(point.x,point.y));
    //then everything is ok!
      

  2.   

    只要在onlbuttondown()发送消息,让window 认为你单击了标题栏
    那膜window 就会让你,drag到任意地方,即是你的对胡框没有标题栏,
    即发消息: PostMessage(WM_NCLBUTTONDOW,
    HTCAPTION,MAKELPARAM(point.x,point.y));
    //then everything is ok!
      

  3.   

    void CMy1Dlg::OnSysCommand(UINT nID, LPARAM lParam)
    {
    if((nID & 0xFFF0) == SC_MOVE)
    {
    return;
    }
    else
    {
    CDialog::OnSysCommand(nID, lParam);
    }
    }
    响应WM_SYSCOMMAND 消息,屏蔽SC_MOVE,对话框可不能移动。
      

  4.   

    上午看错了,对不起,我想你可以事试:
    在你的对话框中的windowproc()中,截获HTCAPTION
    消息,自己处理,就好了,我试验后,发现一个问题,标题栏上的关闭扭失效,你可以以另外的放法关闭程序。代码:
    LRESULT CxxxDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
    {switch (wParam)
    {
    case HTCAPTION:
     return 0l;//拖动消息不发送
             defalut :
            break;
    }
      return CDialog::WindowProc(message, wParam, lParam);
    }
      

  5.   

    对不起总分设定为20只能分这么多了,第一次不知道。请大家多多关照。
    我没有完全按照各位的方法去做,而是在walyqkaoyan(walyqkaoyan) 的基础上,稍作改动,代码w为case WM_SYSCOMMAND:
                if((wParam-2) == SC_MOVE)
                     {return 0;}
                 break;
    因为拖动产生的参数wParam老是等于61458,而SC_MOVE值为61456,所以只好减去2了。方法我觉得可能有缺陷,但是实在想不出别的方法,只好出此下策。那位有更好的方法欢迎对我提出。谢谢大家!限制改变大小得方法跟这个类似。呵呵