SetWindowPos函数

CWnd::SetWindowPosBOOL   SetWindowPos(   const   CWnd*   pWndInsertAfter,   int   x,   int   y,   int   cx,   int   cy,UINT   nFlags   );  
  返回值如果函数成功,则返回非零值;否则返回0。  

说明  
   
  调用这个成员函数以改变子窗口、弹出窗口和顶层窗口的大小、位置和Z轴次序。窗口在屏幕上按照它们的Z轴次序排序。在Z轴次序上处于顶端的窗口将程序在所有其它窗口的顶部。子窗口的所有坐标都是客户坐标(相对于父窗口客户区的左上角)。窗口可以被移动到Z轴次序的顶部,既可以通过将pWndInsertAfter参数设为&wndTopMost,并确保没有设置SWP_NOZORDER标志,也可以通过设置窗口的Z轴次序使它位于所有现存的顶层窗口上方。当一个非顶层窗口被设为顶层窗口时,它拥有的窗口也被设为顶层的。它的拥有者不发生变化。如果顶层窗口被重新定位到Z轴次序的底部(&wndBottom)或任何非顶层窗口之后,则它将不再是顶层窗口。当顶层窗口被变为非顶层窗口时,它所有的拥有者和它拥有的所有窗口都被变为非顶层窗口。
    
  参数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参数)。  
    SWP_NOZORDER       保持当前的次序(忽略pWndInsertAfter)。  
    SWP_SHOWWINDOW       显示窗口。   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在MFC中,CFormView类可以通过资源ID来关联一个对话框模板,也可以通过代码动态创建一个对话框。当CFormView对象被创建时,它会自动调用Create函数,该函数会根据资源ID或代码动态创建一个对话框,并将其作为CFormView的子窗口。 如果你想更换已经加载好的dialog,可以先在资源编辑器中创建一个新的对话框模板,然后在CFormView的派生类中添加一个成员变量来保存对话框的指针。在需要更换对话框的地方,调用DestroyWindow函数销毁当前的对话框,然后调用Create函数创建新的对话框,并将其作为CFormView的子窗口。 举个例子,如果我们在CFormView的派生类中需要更换一个名为MyDialog2的对话框,可以使用以下代码: 复制 void CMyFormView::OnButtonClicked() { // 销毁当前的对话框 GetDlgItem(IDC_DIALOG)->DestroyWindow(); // 创建一个 MyDialog2 对话框 CMyDialog2* pDlg = new CMyDialog2(); pDlg->Create(IDD_MY_DIALOG2, this); // 将 MyDialog2 对话框作为子窗口添加到 CFormView 中 pDlg->SetWindowPos(NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_SHOWWINDOW); } 在这个例子中,我们在OnButtonClicked函数中先调用DestroyWindow函数销毁当前的对话框,然后动态创建一个名为pDlg的CMyDialog2对象,并调用Create函数创建MyDialog2对话框。最后,我们调用SetWindowPos函数将MyDialog2对话框作为子窗口添加到CFormView中,并设置其显示位置和大小。这样,就完成了更换对话框的操作。
06-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值