#001 //
#002 // 响应命令.
#003 //
#004 //
#005 LRESULT CCaiWinMsg::OnCommand(int nID,int nEvent)
#006 {
#007// 菜单选项命令响应:
#008switch (nID)
#009{
#010case IDC_CREATEBTN:
#011 //显示一个按钮。
#012 if (!m_hBtn)
#013 {
#014m_hBtn = CreateWindow(_T("BUTTON"),_T("按钮"),
#015WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON,
#01650,50,100,32,
#017 m_hWnd,(HMENU)IDC_BTN,m_hInstance,NULL)
#018 }
#019 break
#020case IDC_BTN:
#021 OutputDebugS www.hnnedu.com tring(_T("按钮按下rn"))
#022 {
#023 static bool bChangeText = true
#024 if (bChangeText)
#025 {
#026//设置按钮的文字。
#027SetWindowText(m_hBtn,_T("改变它"))
#028
#029//改变按钮窗口的位置和大小。
#030 MoveWindow(m_hBtn,10,10,100,32,TRUE)
#031 }
#032 else
#033 {
#034//设置按钮的文字。
#035SetWindowText(m_hBtn,_T("按钮"))
#036
#037 //改变按钮窗口的位置和大小。
#038 MoveWindow(m_hBtn,50,50,100,32,TRUE)
#039 }
#040
#041 //每一次都改变。
#042 bChangeText = !bChangeText
#043 }
#044 break
#045default:
#046 return CCaiWin::OnCommand(nID,nEvent)
#047}
#048
#049return 1
#050 }
MoveWindow和setwindowpos的区别
MoveWindow()就是移动窗口位置(也可用来改变大小)。用法如下:
BOOL MoveWindow(
HWND hWnd, // handle to window
int X, // horizontal position
int Y, // vertical position
int nWidth, // width
int nHeight,// height
BOOL bRepaint // repaint option
)
hWnd是你要移动的窗口的句柄;
X,Y是移动后窗口左上角的横纵坐标;
nWidth,nHeight是移动后窗口的宽度和高度;
bRepain是表示移动后的窗口是否需要重画,如果为真则在移动窗口后会向窗口过程函数发送一条WM_PAINT消息重绘窗口。
win32 禁止使用MoveWindow改变窗口大小
你好,区别如下:
要区分MoveWindow和setwindowpos的区别,我们先从msdn上入手:
1、MoveWindow
This function changes the position and dimensions of the specified window. For a top-level window, the position and dimensions are relative to the upper-left corner of the screen. For a child window, they are relative to the upper-left corner of the parent window's client area.
BOOL MoveWindow(
HWND hWnd,
int X,
int Y,
int nWidth,
int nHeight,
BOOL bRepaint
)
MoveWindow sends WM_WINDOWPOSCHANGED, WM_MOVE, WM_SIZE, and WM_NCCALCSIZE messages to the window. (这里很重要,说明MoveWindow函数内部不做真实的窗口处理,而是发送了一组消息,让其他函数进行处理,其实这个函数就是SetWindowPos,我们可以继续往下看)
2、SetWindowPos
This function changes the size, position, and z-order of a child, pop-up, or top-level window. Child, pop-up, and top-level windows are ordered according to their appearance on the screen. The topmost window receives the highest rank and is the first window in the z-order.
BOOL SetWindowPos(
HWND hWnd,
HWND hWndInsertAfter,
int X,
int Y,
int cx,
int cy,
UINT uFlags
)
SetWindowPos always causes a WM_WINDOWPOSCHANGED message to be sent to the window. The flags passed in this message are exactly the same as those passed into the function. No other messages are sent by this function. (SetWindowPos包含了z-order的设置,其功能比MoveWindow更为强大,包含了一组设置窗口显示状态的标志。然而,MoveWindow和SetWindowPos更本质的区别是,MoveWindow做了更多额外的事情,发送WM_MOVE, WM_SIZE, and WM_NCCALCSIZE等多种消息给窗口,而SetWindowPos则显的单纯的多,只发送了WM_WINDOWPOSCHANGED消息给窗口)
从上面可以看出MoveWindow和SetWindowPos实现的功能基本是一致的,但还是存在细微的差别,关键的一点是MoveWindow不仅通知窗口进行SetWindowPos操作,而且还发送了一批消息,告知窗口显示改变了,这样窗口就可以在内部进行一些操作。这点对处理ActiveX控件的resize很重要,在ActiveX控件中往往通过WM_SIZE消息处理关联窗口resize的窗口调整,所以在调用方必须使用MoveWindow才能使ActiveX控件实现resize。
c++ MoveWindow怎么用
可以拦截 WM_GETMINMAXINFO 消息,并设置相应的参数。
在 Windows 中,无论什么时候以何种方式改变窗口的尺寸或大小,是拖拽窗口边缘也好,或是在代码中调用改变窗口尺寸的函数也好,总之不管你用什么方法,Windows 都会首先发送 WM_GETMINMAXINFO 消息,消息附带了一个 MINMAXINFO 结构,意思是说:“我准备改变窗口的尺寸了,MINMAXINFO 结构的数据是要改变的尺寸信息,你可以修改或不修改这些数据。”
对于这个消息,wParam 没有意义,lParam 是指向 MINMAXINFO 结构体的指针,MINMAXINFO 结构体的定义:
typedef struct {
POINT ptReserved //不用
POINT ptMaxSize //最大范围
POINT ptMaxPosition //最大的放置点
POINT ptMinTrackSize //最小拖动范围
POINT ptMaxTrackSize //最大拖动范围
} MINMAXINFO
你可以在 WM_GETMINMAXINFO 消息的处理程序中,修改这些值来禁止窗口改变大小。
对于C++中的类,结构体,共用体等具有成员函数或变量的数据类型(对象)时,如果存在对象a,而对象中有成员b,那么可以使用a.b的方式,使用对应的成员。
如果存在变量p,指向a, 即p = ampa, 这时可以用p-gtb来使用成员b。
即,-gt操作符是用于带成员的类型对应指针上,用来提取成员变量或函数用的。
p-gtb等同于(*p).b。
对于任意的对象a,写作(ampa)-gtb也是可以的,不过很少有这样写。
以上就是关于C语言MoveWindow的用法?全部的内容,如果了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!