mfc中如何用setwindowpos()设置窗口的初始位置的解决方案列表
setwindowpos( const cwnd* pwndinsertafter,int x, int y,int cx, int cy,uint nflags);pwndinsertafter 标识了在z轴次序上位于这个cwnd对象之前的cwnd对象。这个参数可以是指向cwnd对象的指针,也可以是指向下列值的指针:wndbottom 将窗口放在z轴次序的底部。如果这个cwnd是一个顶层窗口,则窗口将失去它的顶层状态;系统将这个窗口放在其它所有窗口的底部。wndtop 将窗口放在z轴次序的顶部。wndtopmost 将窗口放在所有非顶层窗口的上面。这个窗口将保持它的顶层位置,即使它失去了活动状态。wndnotopmost 将窗口重新定位到所有非顶层窗口的顶部(这意味着在所有的顶层窗口之下)。这个标志对那些已经是非顶层窗口的窗口没有作用。x 指定了窗口左边的新位置。y 指定了窗口顶部的新位置。cx 指定了窗口的新宽度。cy 指定了窗口的新高度。nflags 指定了大小和位置选项。这个参数可以是下列值的组合:swp_drawframe 围绕窗口画出边框(在创建窗口的时候定义)。swp_framechanged 向窗口发送一条wm_nccalcsize消息,即使窗口的大小不会改变。如果没有指定这个标志,则仅当窗口的大小发生变化时才发送wm_nccalcsize消息。swp_hidewindow 隐藏窗口。swp_noactivate 不激活窗口。如果没有设置这个标志,则窗口将被激活并移动到顶层或非顶层窗口组(依赖于pwndinsertafter参数的设置)的顶部。swp_nocopybits 废弃这个客户区的内容。如果没有指定这个参数,则客户区的有效内容将被保存,并在窗口的大小或位置改变以后被拷贝回客户区。swp_nomove 保持当前的位置(忽略x和y参数)。swp_noownerzorder 不改变拥有者窗口在z轴次序上的位置。swp_noredraw 不重画变化。如果设置了这个标志,则不发生任何种类的变化。这适用于客户区、非客户区(包括标题和滚动条)以及被移动窗口覆盖的父窗口的任何部分。当这个标志被设置的时候,应用程序必须明确地无效或重画要重画的窗口和父窗口的任何部分。swp_noreposition 与swp_noownerzorder相同。swp_nosendchanging 防止窗口接收wm_windowposchanging消息。swp_nosize 保持当前的大小(忽略cx和cy参数)。
MoveWindow和setwindowpos的区别
MoveWindow和setwindowpos的区别
两者都能实现移动和改变窗口大小。
MoveWindow()功能比较单一,只能移动和改变窗口大小,而SetWindowPos()可以设置更多的参数,实现Zorder及显示方式标志。
MoveWindow()发送WM_WINDOWPOSCHANGING,WM_WINDOWPOSCHANGED,WM_MOVE,WM_SIZE和WM_NCCALCSIZE等消息到窗口,SetWindowPos()只发送WM_WINDOWPOSCHANGED消息到窗口。所以说如果需要发送更多消息时还是使用MoveWindow()的好。