当前位置:编程学习 > C/C++ >>

设置对话框不能移动 C++

我需要这个MFC对话框出现后就不能移动,请问怎么可以做到,请给下代码,谢谢!

(程序里只有这一个对话框)

追问:那个消息我不怎么会,可以详细点不,谢谢
答案:
使用突然想起你这个可以使用SetWindwPos()或者MoveWindow()。这两个函数都可以改变窗口的坐标,然后你搞一个定时器,让其500毫秒调一次回调函数(当然你要把设置窗口坐标的语句写到TimerProc()里去)。
就是这样,当窗口被移动了,它又会立刻回到原来的位置!
我比较喜欢使用MoveWindow(),所以详细说一下它的用法:
函数功能:改变指定窗口的位置和大小.对顶窗口来说,位置和大小取决于屏幕的左上角;对子窗口来说,位置和大小取决于父窗口客户区的左上角.对于Owned窗口,位置和大小取决于屏幕左上角.
  函数原型:BOOL MoveWindow( HWND hWnd, int X, int Y, int nWidth, intnHeight, BOOL bRepaint );
  参数
  hWnd指定了窗口的句柄
  x指定了CWnd的左边的新位置。
  y指定了CWnd的顶部的新位置。
  nWidth指定了CWnd的新宽度。
  nHeight指定了CWnd的新高度。
  bRepaint指定了是否要重画CWnd。如果为TRUE,则CWnd象通常那样在OnPaint消息处理函数中接收到一条 WM_PAINT消息 。如果这个参数为FALSE,则不会发生任何类型的重画操作。这应用于客户区、非客户区(包括标题条和滚动条)和由于CWnd移动而露出的父窗口的任何部分。当这个参数为FALSE的时候, 应用程序 必须明确地使CWnd和父窗口中必须重画的部分无效或重画。
  MoveWindow给窗口发送WM_WINDOWPOSCHANGING,WM_WINDOWPOSCHANGED,WM_MOVE, WM_SIZE 和WM_NCCALCSIZE消息
MoveWindow()的两个重载函数   void CWnd::MoveWindow( int x, inty, int nWidth, int nHeight, BOOL bRepaint = TRUE );
  void CWnd::MoveWindow( LPCRECT lpRect, BOOL bRepaint = TRUE );
  参数
  x指定了CWnd的左边的新位置。
  y指定了CWnd的顶部的新位置。
  nWidth指定了CWnd的新宽度。
  nHeight指定了CWnd的新高度。
  bRepaint指定了是否要重画CWnd。如果为TRUE,则CWnd象通常那样在OnPaint消息处理函数中接收到一条WM_PAINT消息。如果这个参数为FALSE,则不会发生任何类型的重画操作。这应用于客户区、非客户区(包括标题条和滚动条)和由于CWnd移动而露出的父窗口的任何部分。当这个参数为FALSE的时候,应用程序必须明确地使CWnd和父窗口中必须重画的部分无效或重画。
  lpRectCRect对象或RECT结构,指定了新的大小和位置。说明这个函数改变窗口的位置和大小。对于顶层的CWnd对象,x和y参数是相对于屏幕的左上角的。对于子对象,它们是相对于父窗口客户区的左上角的。
  MoveWindow函数发送一条WM_GETMINMAXINFO消息。处理这个消息时,CWnd得到一个改变最大和最小的窗口缺省值的机会。如果传递给MoveWindow成员函数的参数超过了这些值,则在WM_GETMINMAXINFO处理函数中可以用最小或最大值来代替这些值。

给该对话框添加钩子,在钩子函数里吧鼠标拖动消息屏蔽,在窗口上显得得对话框,就不能用鼠标进行拖动了 !

将系统菜单的“移动” 项去掉就可以了,至于操作可以参考下MSDN的API函数或者MFC

上一个:c++编程学生档案库
下一个:C++鐨勮櫄缁ф壙 - 宸茶В鍐?- 鎼滄悳闂棶

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,