MFC中设置窗口大小位置

VS+Qt设置窗口尺寸(一):固定窗口大小,无法最大化,调节尺寸 阅读详情

MFC中设置窗口大小位置



第一种方法:使用SetWindowPos函数


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

实例:

SetWindowPos(&wndTopMost, 100, 500, 0, 0,  SWP_NOSIZE /*| SWP_NOMOVE*/);//把窗口放到左下端

说明   
    调用这个成员函数以改变子窗口、弹出窗口和顶层窗口的大小、位置和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   );  


实例:

MoveWindow(0,0,200,200);


参数   
   
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 实现动态调整对话框控件与字体大小 在MFC开发中,为了提升用户体验,我们需要实现对话框窗口的动态调整功能,即用户通过拖动窗口的边框或角可以改变窗口大小,同时窗口中的控件位置、大小及字体也随之自适应变化。这篇文章将详细介绍如何实现这样的功能。 阅读详情

相关推荐

MFC控件的绘制与响应顺序——ZOrder

1. 创建4个按钮 CRect rcCreate(0,0,80,80); m_btTest1.Create(TEXT("Test1"),WS_CHILD|WS_VISIBLE,rcCreate,this,114); m_btTest2.Create(TEXT("Test2"),WS_CHILD|WS_VISIBLE,rcCreate,this,112); m_btTest3.Cre

IcebergSnowfox的专栏 7632

MoveWindow 和 SetWindowPos 的比较

void   CWnd::MoveWindow(   int   x,   int   y,   int   nWidth,   int   nHeight,   BOOL   bRepaint   =   TRUE   );   void   CWnd::MoveWindow(   LPCRECT   lpRect,   BOOL   bRepaint   =   TRUE   );     参

benny5609的专栏 2881

MFC中 窗口类位置结构体的使用CRET

在MFC中我们可以随意定义我们想创建的窗口的位置,使用的CRECT去确定窗口的位置: typedef struct tagRECT {     LONG    left;     LONG    top;     LONG    right;     LONG    bottom; } RECT, *PRECT, NEAR *NPRECT, FAR *LPRECT; CRECT rect = {l

skdkjxy的专栏 2044

VS2015 MFC 修改应用程窗口大小 标题

******窗口创建之前修改MFC窗口大小************************* 一 创建单文档程序,CMainFrame::PreCreateWindow(CREATESTRUCT&cs)。 BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { if( !CFrameWnd::PreCreateW...

weixin_33785108的博客 1114

实现MFC窗口尺寸的自适应布局设计

在设计界面时,固定比例布局是一种常见的方法,允许窗口或控件的大小按照预先定义的比例缩放。这种方法的优点是界面元素之间的比例关系保持不变,从而在不同分辨率的屏幕上提供相似的用户体验。然而,这种方式可能在某些极端屏幕尺寸上导致布局过于拥挤或过于稀疏。要实现固定比例布局,可以通过计算父控件尺寸和子控件之间的固定比例,然后在WM_SIZE消息处理函数中使用这些比例值调整子控件的尺寸。

weixin_31749299的博客 1221

【RDMA】13. RDMA之用户态与内核态交互

原文:https://zhuanlan.zhihu.com/p/346708569 在“RDMA之Verbs”一文中我们说道,Verbs API分为用户态和内核态,分别以ibv_和ib_作为前缀。RDMA技术的最大的优势就在于用户态可以绕过内核,直接控制硬件收发数据,减少了系统调用和内存拷贝次数,所以大部分的RDMA应用都是用户态应用,即使用以ibv_为前缀的用户态Verbs API。 但是并非所有的用户态Verbs API都可以完全绕开内核,本文中我来讲解一下哪些API依赖于内核RDMA子系统(包括驱

我的笔记本 4285

mfc 默认窗口大小和位置是如何设置的

mfc 默认窗口大小和位置是如何设置的 默认窗口大小和位置是如何设置的 窗口最终是由Windows API 函数::CreateWindowEx创建,::CreateWindowEx需要窗口的信息,其中就有位置和大小,这些信息从哪里来?下面就分析一下: 下面是CFrameWnd中Create函数的声明 BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle = WS_OVERLAPPEDWINDOW, const RE

soinlove36的专栏 4837

L2-028 秀恩爱分得快(测试点3说明)

古人云:秀恩爱,分得快。互联网上每天都有大量人发布大量照片,我们通过分析这些照片,可以分析人与人之间的亲密度。如果一张照片上出现了 K 个人,这些人两两间的亲密度就被定义为 1/K。任意两个人如果同时出现在若干张照片里,他们之间的亲密度就是所有这些同框照片对应的亲密度之和。下面给定一批照片,请你分析一对给定的情侣,看看他们分别有没有亲密度更高的异性朋友?

daybreak_alonely的博客 1412

MFC设置窗口大小、位置,使用消息函数

MFC设置窗口大小、位置,使用消息函数//第一种//第二种://第三种: 几种方法还是不错的 //第一种 SetWindowPos(NULL,0,0,200,300,SWP_NOMOVE); // 表示不考虑(0,0),仅仅将大小改为200x300,位置不变 // SetWindowPos(NULL,0,0,200,300,SWP_NOMOVE); // 表示不考虑200X300,只是把位置挪到(0,0).大小不变 // 如果想同时改变,最后可用SWP_NOZORDER等 // 参数中还有SWP_

weixin_45372004的博客 1593

高效爬取懂车帝车型数据:从静态解析到动态反爬实战

本文详细解析了如何高效爬取懂车帝车型数据,从静态HTML解析到动态接口反爬的完整实战路径。文章重点介绍了使用浏览器开发者工具定位数据、应对CSS混淆与参数加密等反爬策略,并提供了整合静态与动态抓取逻辑的Python代码示例,帮助开发者稳健地获取结构化车型信息。

wind6的博客 937

Arduino I2C for TCA9548A应答扫描程序

Arduino I2C for TCA9548A应答扫描程序

perseverance51博客 1119

mfc向导生成的 默认窗口大小和位置是如何设置的

<br />mfc向导生成的 默认窗口大小和位置是如何设置的2010-11-25 18:06<br />窗口最终是由Windows API 函数::CreateWindowEx创建,::CreateWindowEx需要窗口的信息,其中就有位置和大小,这些信息从哪里来?下面就分析一下:<br /><br />下面是CFrameWnd中Create函数的声明<br />BOOL Create(LPCTSTR lpszClassName,<br />    LPCTSTR lpszWindowName,<br /

cherry_xidian的专栏 1万+

AI测试:手把手教你用AI生成测试用例并支持导出Excel「喂饭教程」

如果我告诉你,有一种方法,你只需要输入需求内容,AI就能自动帮你设计出结构清晰、覆盖全面的测试用例,并直接生成一份精美的Excel表格,你会不会心动?

blues_C的博客 3885

MFC窗口大小及位置设置方式

转自:http://zhidao.baidu.com/question/186266173.html 在MFC怎么中设置窗口大小和位置? 2010-9-24 22:11 提问者:ttyyuubb|悬赏分:15|浏览次数:3049次 第一种方法:使用SetWindowPos函数 CWnd::SetWindowPosBOOL

2418

Xilinx平台SRIO介绍(二)SRIO IP核基础知识

使用SRIO IP核必须掌握的基础知识! 理解了这篇,剩下的只是代码罢了。

数字IC/FPGA杂货铺,找一找,或许有你想要的~ 4万+

SAP 联产品测试

最近领导一直要求研究一下SAP联产品的使用场景,之前只是自己摸索过一次,这个重新对联产品进行一个测试。 1、首先准备好物料主数据 注意主数据中需要勾选联产品标识。 设置好物料的分摊的百分比。 2、检查BOM 在BOM中也需要维护联产品的标识 只有当组件数量未负数时,才能勾选联产品的标识。如果组件数量正值,勾选联产品的标识时会报错。 3、我们创建生产订单 可以看到按正常的生产订单下达时,系统就报错了,问题点在于离散制造的生产订单基本是结算到物料的。但是联产品是按订单结算的, 所以需要对订单类型中的结算参

我小时候很黑的博客 2111

MFC设置窗口大小、位置

1 SetWindowPos(NULL,0,0,200,300,SWP_NOMOVE); 2 3 // 表示不考虑(0,0),仅仅将大小改为200x300,位置不变 4 // SetWindowPos(NULL,0,0,200,300,SWP_NOMOVE); 5 // 表示不考虑200X300,只是把位置挪到(0,0).大小不变 6 // 如果...

weixin_30347335的博客 758

科研绘图系列:R语言绘制极坐标饼图(pie plot)

科研绘图系列:R语言极坐标饼图(pie plot)

专注生信领域 1053

MFC窗口最大化&移动窗口位置&获取控件句柄,设置控件大小

BOOL CMFCDlg::OnInitDialog() { CDialog::OnInitDialog(); CWnd *pWnd; pWnd = GetDlgItem( IDC_OCX1 );//IDC_OCX1控件ID     pWnd->SetWindowPos( NULL,0,0,1018,750,SWP_NOZORDER | SWP_NOMOVE );    //设置控件大小

bmjhappy的专栏 1266

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

mfc控件自适应窗口大小,随窗口大小变化而变化

作为一个mfc的初学者,难免会遇到这样的问题,窗口可以改变大小,而其中的控件大小也随之改变,那怎么样去做呢。 1.对应窗口的属性Maximize Box和Minimize Box设置为true,从而能够使窗口最大化和最小化,Border属性设置为Resizing从而可以改变窗口的大小。 2.在消息有个WM_SIZE,添加函数OnSize,这样可以在函数内调整控件的大小,特别说明很多代码中利用当

u013280734的博客 2万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Windows编程基础--第18节 MFC之窗体操作

今天学习一下MFC窗体的基本操作: 最大化 最小化 还原 关闭窗口 设置窗口大小 设置窗口位置 居中显示窗口 顶层显示窗口 设置窗口图标 获取窗口标题 设置窗口标题 1. 最大化 SendMessage(WM_SYSCOMMAND,SC_MAXIMIZE,0) 2. 最小化 SendMessage(WM_SYSCOMMAND,SC_MI

qq_25549309的博客 691

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

上一篇: VC提示msedv.exe 错误
下一篇: 小米手机碎屏后米四启动屏幕虚拟键,禁用实体键
死神在世
博客等级 码龄14年 233粉丝 102原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值