VC中如何设置窗口在最前

 我来答
味小熟卤味
2016-11-07 · 知道合伙人互联网行家
味小熟卤味
知道合伙人互联网行家
采纳数:2854 获赞数:22831
从事网络营销、餐饮创业11年,餐饮小而美创业导师

向TA提问 私信TA
展开全部

1.把当前窗口置于最顶层,可以在OnInitDialog()中加入如下代码:

CRect rect;

GetClientRect(&rect);

::SetWindowPos(m_hWnd, HWND_TOPMOST, 0, 0, rect.Width(), rect.Height() + 20, SWP_NOMOVE);

return TRUE;

实际测试时,如果height不加20的话则显示不完全。

2.如果是想让窗口全屏,则可以用如下方法:

int cxScreen,cyScreen; 

cxScreen=GetSystemMetrics(SM_CXSCREEN);

cyScreen=GetSystemMetrics(SM_CYSCREEN);

SetWindowPos(&wndTopMost,0,0,cxScreen,cyScreen,SWP_SHOWWINDOW);

3.如果想让窗口取消置于顶层,可以设置参数为HWND_NOTOPMOST

4.关于SetWindowPos()函数

(1)此函数使用的坐标参数用的是Client坐标,对于子窗口用的是其父窗口的坐标系。然而对于用DoModal()弹出的窗口,如果在资源属性里没有选择Child属性的话,它的父窗口是DeskTop,而不是调用DoModal()的窗口;

(2)SetWindowPos 详解

函数名:

  SetWindowPos 

头文件: 

  winuser.h 

函数原型:

  BOOL SetWindowPos

(

  HWND hWnd, //窗口句柄

  HWND hWndInsertAfter, //排列顺序的句柄

  int X, //水平坐标

  int Y, //垂直坐标

  int cx, //宽

  int cy, //高

  UINT uFlags //窗口定位标识

); 

说明:

  这个函数能改变窗口的大小、位置和设置子窗口、弹出窗口或顶层窗口的排列顺序。 

返回值:

  BOOL,如果返回值非零表示成功,返回零表示失败。错误信息请参看GetLastError函数。

参数表:

  参数 类型及说明 

  hwnd HWND,欲定位的窗口句柄 

  hWndInsertAfter HWND,置于hwnd前面的窗口句柄。这个参数必须是窗口的句柄或是下面的值之一:    HWND_BOTTOM 将窗口置于其它所有窗口的底部 

  HWND_NOTOPMOST 将窗口置于其它所有窗口的顶部,并位于任何最顶部窗口的后面。如果这个窗口非顶部窗口,这个标记对该窗口并不产生影响 

  HWND_TOP 将窗口置于它所有窗口的顶部 

  HWND_TOPMOST 将窗口置于其它所有窗口的顶部,并位于任何最顶部窗口的前面。即使这个窗口不是活动窗口,也维持最顶部状态 

x:  

  int,指定窗口新的X坐标

Y: 

  int,指定窗口新的Y坐标

cx:  

  int,指定窗口新的宽度 

cy:  

  int,指定窗口新的高度 

wFlags: 

  UINT,指定窗口状态和位置的标记。这个参数使用下面值的组合: SWP_DRAWFRAME 围绕窗口画一个框 

  SWP_FRAMECHANGED 发送一条WM_NCCALCSIZE消息进入窗口,即使窗口的大小没有发生改变。如果不指定这个参数,消息WM_NCCALCSIZE只有在窗口大小发生改变时才发送 

  SWP_HIDEWINDOW 隐藏窗口 

  SWP_NOACTIVATE 不激活窗口 

  SWP_NOCOPYBITS 屏蔽客户区域 

  SWP_NOMOVE 保持当前位置(X和Y参数将被忽略) 

  SWP_NOOWNERZORDER 不改变所有窗口的位置和排列顺序 

  SWP_NOREDRAW 窗口不自动重画 

  SWP_NOREPOSITION 与SWP_NOOWNERZORDER标记相同 

  SWP_NOSENDCHANGING 防止这个窗口接受WM_WINDOWPOSCHANGING消息 

  SWP_NOSIZE 保持当前大小(cx和cy会被忽略) 

  SWP_NOZORDER 保持窗口在列表的当前位置(hWndInsertAfter将被忽略) 

  SWP_SHOWWINDOW 显示窗口 

备注:

  如果设置了SWP_SHOWWINDOW或SWP_HIDEWINDOW标记,这个窗口不发生移动或改变大小。窗口成为最顶级窗口后,它的所有子窗口也会进入最顶级。一旦将其设为非最顶级,则它的所有子窗口也会转为非最顶级。

相关函数:

  MoveWindow,SetActiveWindow,SetForegroundWindow


推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式