`
mybwu_com
  • 浏览: 192775 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

MFC中设置窗口大小位置

 
阅读更多

第一种方法:使用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)或任何非顶层窗口之后,则它将不再是顶层窗口。当顶层窗口被变为非顶层窗口时,它所有的拥有者和它拥有的所有窗口都被变为非顶层窗口。如果既没有指定SWP_NOACTIVE标志也没有指定SWP_NOZORDER标志(这意味着应用程序要求窗口被同时激活并放入指定的Z轴次序),则pWndInsertAfter参数中指定的值将只在下列环境下适用:l 在pWndInsertAfter参数中既没有指定&wndTopMost也没有指定&wndNoTopMost。
这个窗口不是活动窗口。应用程序不能激活一个非活动窗口但同时又不把它带到Z轴次序的顶部。应用程序可以没有任何限制地改变活动窗口的Z轴次序。非顶层窗口可能拥有一个顶层窗口,但是反之则不成立。任何被顶层窗口拥有的窗口(例如对话框)都将自己变为顶层窗口,以确保所有被拥有的窗口位于它们的拥有者上方。在Windows 3.1或更新的版本中,可以将窗口移动到Z轴次序的顶部,并通过设置它们的WS_EX_TOPMOST风格而将之锁定在那里。这种顶层窗口即使在失去活动状态以后也会保持顶层位置。例如,选择WinHelp的Always On Top命令会使帮助窗口变为顶层,并且在你返回应用程序之后它还保持可见。要创建一个顶层窗口,应在调用SetWindowPos的时候将pWndInsertAfter参数设为&wndTopMost,或者在创建窗口的时候设置WS_EX_TOPMOST风格。如果Z轴次序中包含了任何具有WS_EX_TOPMOST风格的窗口,则用&wndTopMost移动的窗口将被放到所有非顶层窗口的顶部,但是位于任何顶层窗口的下面。当应用程序激活一个不具有WS_EX_TOPMOST风格的非活动窗口时,该窗口将被移动到所有非顶层窗口的上方,但是位于所有顶层窗口的下方。如果在调用SetWindowPos的时候pWndInsertAfter参数被设为&wndBottom,并且CWnd是一个顶层窗口,则该窗口失去顶层状态(WS_EX_BOTTOM风格被清除),并且系统将窗口放在Z轴次序的底部。

参数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 显示窗口。

第二种方法:使用MoveWindow函数

void CWnd::MoveWindow( int x, int y, 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处理函数中可以用最小或最大值来代替这些值。

分享到:
评论

相关推荐

    mfc窗口固定大小

    3. **OnSize()** 方法: 如果你不想使用对话框类,而是从`CFrameWnd`或`CView`派生,那么可以在`OnSize()`方法中处理窗口大小的设置。但通常固定大小的窗口不需要重写这个函数,因为它用于处理窗口大小变化的情况。 ...

    MFC窗口控件随窗口大小进行自适应

    当窗口大小改变时,系统会发送WM_SIZE消息,开发者需要在OnSize()函数中处理这个消息,重新计算并设置控件的位置和大小。然而,手动管理每个控件的布局可能非常繁琐,这就是`WidgetResize`类的作用所在。这个类很...

    mfc根据窗口大小自动调整所有控件大小

    在MFC(Microsoft Foundation Classes)框架中,设计用户界面时,有时我们需要实现窗口大小变化时,窗口内的控件能够自动调整大小以适应新的窗口尺寸。这个功能可以提供更好的用户体验,特别是当应用程序支持不同...

    C++ MFC控件随着窗口大小变化而自适应_阿强的一亩三分地,一分耕耘一分收获-CSDN博客1

    总之,通过处理`WM_SIZE`消息并在`OnSize`函数中计算比例并调整控件的位置和大小,可以实现C++ MFC应用程序中控件随着窗口大小变化而自适应的效果。如果要实现全窗口的自适应布局,可能需要结合使用其他布局管理机制...

    mfc之随父窗口变化调整控件大小位置

    在这个函数中,可以根据新旧窗口大小的比例来调整控件的位置和大小。 ```cpp void CMyDialog::OnSize(UINT nType, int cx, int cy) { CDialogEx::OnSize(nType, cx, cy); if (nType == SIZE_MINIMIZED) return; ...

    VC++设置窗口的大小和位置

    而在窗口大小改变时,你可能在`WM_SIZE`消息处理中处理新的大小。 此外,VC++中窗口的创建和初始化通常通过继承`CWnd`类(MFC库)或者使用Win32 API中的`CreateWindowEx()`函数实现。如果你使用MFC,`CWnd`类提供了...

    如何设置窗口的大小和位置

    - 在MFC的对话框类(CDialog)或视图类(CView)中,可以使用`SetWindowPos`函数来动态改变窗口大小。例如: ```cpp CWnd* pWnd = this; // 获取当前窗口指针 CRect rect; GetClientRect(rect); // 获取当前...

    MFC控件自适应窗体改变大小

    - 控件之间的间距:窗口大小变化时,保持适当的间距。 - 高DPI支持:确保在不同DPI设置下,控件的大小和位置仍然正确。 在提供的压缩包文件“自适应窗体”中,可能包含了一个示例程序,演示了如何使用上述方法之一...

    OPengl+MFC窗口设置

    5. **设置窗口大小和位置**:使用`CRect`对象指定窗口的初始位置和大小。在`Create`函数中传递这个矩形作为参数。 6. **激活OpenGL上下文**:创建窗口后,你需要激活OpenGL上下文以便开始绘制。这通常通过`...

    MFC自绘窗口的边框和标题

    如果你改变了边框或标题的绘制方式,可能需要重写此消息,以确保窗口大小调整的正确性。 7. **设置WS_EX_LAYERED样式**:如果你想要实现透明效果,可以设置窗口的WS_EX_LAYERED样式,并使用...

    MFC自定义窗口形状

    - 在复制位图到区域时,可以检查每个像素是否是透明色,如果是,则在区域中相应位置设置为透明。 4. **优化性能**: - 由于每次窗口移动或大小调整时都需要重新计算自定义形状,这可能会影响性能。可以考虑缓存...

    mfc 创建多窗口同时显示

    在OnCreate()函数中设置窗口样式、大小和位置。 2. **创建子窗口**:接着,定义子窗口类,这可能需要继承CWnd或CDialog。每个子窗口都有自己的消息处理机制和用户界面元素。在子窗口类中,你需要重写...

    MFC窗口始终在最前端

    标题中的“MFC窗口始终在最前端”是指在Microsoft Foundation Class (MFC)库中,如何使创建的窗口程序在所有其他窗口之上显示,始终保持可见。MFC是Microsoft提供的一套C++类库,用于简化Windows应用程序开发。在这...

    MFC控件根据窗口自适应位置

    这可能包括创建类实例,将控件关联到类实例,以及在窗口大小改变时调用特定方法来更新控件位置的步骤。 6. **布局算法**:自适应位置的实现可能涉及到几种常见的布局策略,例如网格布局、流式布局或者锚点布局。在...

    MFC中的窗口分割和树形目录的创建

    5. **处理消息映射**: 在消息映射中处理WM_SIZE消息,以确保在窗口大小改变时正确地调整视图大小。 接下来,我们讨论“树形目录”的创建。在MFC中,CTreeCtrl类用于实现树控件,它在Windows应用程序中通常用来显示...

    MFC 动态创建窗口与对话框

    `CreateWindow`用于创建一个标准的窗口,它需要一系列参数来定义窗口的属性,如窗口类名、窗口的标题、初始大小和位置等。在MFC中,我们通常会用到`AfxGetInstanceHandle()`获取当前进程实例的句柄,并使用`...

    MFC中自定义窗口类名技巧

    - `rect`: 窗口初始位置和大小。 - `pParentWnd`: 父窗口指针。 - `nID`: 子窗口ID。 - `lpParam`: 创建窗口时传递的额外参数。 #### 创建窗口过程分析 在MFC中创建窗口的过程可以分为以下几个步骤: 1. **参数...

    MFC中实现对话框窗口任意分割

    本文将详细讲解如何在MFC中实现对话框窗口的任意分割,以便在同一个对话框中显示多个区域,每个区域可以独立显示或编辑信息。 首先,我们需要了解MFC中的对话框通常是基于CDialog派生的类。为了实现窗口的分割,...

    MFC窗口位置管理详细分析及实例

    MFC提供了内置机制来处理子窗口的布局和尺寸调整,确保它们在窗口大小变化时能够自适应调整,保持布局的完整性。 MFC中的窗口位置管理主要涉及两个核心组件:`CWnd::RepositionBars()`函数和`WM_SIZEPARENT`自定义...

    MFC 窗口中控件随窗口放大相应改变大小

    2. **WM_SIZE消息处理**:重载`OnSize()`成员函数,当窗口大小改变时,此函数会被调用,可以根据新的窗口尺寸动态调整控件的位置和大小。 3. **DIALOGEX资源**:使用DIALOGEX资源而不是DIALOG,DIALOGEX支持额外的...

Global site tag (gtag.js) - Google Analytics