首页 > 其他分享 >MFC按客户区大小获取合适的主窗口大小

MFC按客户区大小获取合适的主窗口大小

时间:2022-12-07 15:34:38浏览次数:35  
标签:MFC 窗口 int tmpRect clientRect windowRect 大小


使用GetClientRect与GetWindowRect

  • 计算水平、垂直非客户区大小
    使用GetWindowRect获取主窗口的大小, 再通过GetClientRect获取客户端大小,然后通过这两个值计算出水平、垂直非客户区占的大小
  • 计算主窗口大小
    由上一步计算得到的非客户区大小加大期望的客户区大小,即为主窗口的大小

以下是设置非客户区大小为500*300的例子:

CRect clientRect;
CRect windowRect;
GetClientRect( clientRect );
GetWindowRect( windowRect );
int cxNoClient = windowRect.Width() - clientRect.Width();
int cyNoClient = windowRect.Height() - clientRect.Height();
int cxWindow2 = 500 + cxNoClient;
int cyWindow2 = 300 + cyNoClient;
SetWindowPos( NULL, 0,0, cxWindow2, cyWindow2, SWP_NOMOVE );

使用API函数AdjustWindowRect/AdjustWindowRectEx

此API函数根据指定的非客户区大小、是否有菜单、窗口样式去自动计算出窗口所占大小,挺方便的。具体的还是移步到MSDN上去查看相关说明,这里仅举个例子(例子是在主窗口的OnCreate函数中编写,直接引用lpCreateStruct中的变量值):

CRect tmpRect( 0, 0, 500, 300 );
AdjustWindowRectEx( tmpRect, lpCreateStruct->style,
TRUE, lpCreateStruct->dwExStyle );
int cxWindow1 = tmpRect.Width();
int cyWindow1 = tmpRect.Height();
SetWindowPos( NULL, 0,0, cxWindow1, cyWindow1, SWP_NOMOVE );


标签:MFC,窗口,int,tmpRect,clientRect,windowRect,大小
From: https://blog.51cto.com/u_15905375/5919607

相关文章

  • CWnd直接派生的窗口下使用CToolBar笔记
    问题按msdn上的教程在CWnd派生的窗口的OnCreate下创建CToolBar,工具栏不显示。Createatoolbarresource.ConstructtheCToolBarobject.CalltheCreate(orCreateEx)fu......
  • InitInstance中创建CWnd派生的窗口对象,内存泄漏
    问题MFC程序中,在主程序类的InitInstance中创建由CWnd派生的CMyWnd窗口对象,程序关闭时,在vs的输出窗口报告有内存泄漏。分析单文档、多文档程序都是在InitInstance中new出主窗......
  • Linux中查看各文件夹大小命令:du -h --max-depth=1
    du[-abcDhHklmsSx][-L<符号连接>][-X<文件>][--block-size][--exclude=<目录或文件>][--max-depth=<目录层数>][--help][--version][目录或文件]常用参数:-a或-all......
  • MFC-颜色对照表
                ......
  • 如何使用命令行(cmd窗口等)?
    每次查每次忘,自己写一个常用的供查询,希望哪天能成为我的本能。cd文件名:进入下一级文件cd..:返回上一文件夹......
  • VS 2017 调试窗口显示“ C#编译器内部错误”
    调试时,我尝试评估简单的表达式,例如inta=2;在即时窗口中。一个错误C#编译器中的内部错误解决方式:调试-》选项-》常规-》使用托管兼容模式(勾选)  ......
  • MySQL忽略大小写的注意事项
    一、背景在阿里的规范中,不允许超过2个JOIN的关联查询,故项目中需要将复杂SQL拆分二、问题目前MySQL5.7非特殊场景默认选择utf8mb4,排序选择utf8mb4_general_ci,MySQL8默认选择u......
  • Qt程序启动时会出现一闪而过的小窗口怎么办
    1.问题描述,开发程序时,会自定义一些窗口,字窗口,嵌入窗口,弹出窗口等,启动程序时会一闪而过显示一些小窗口;怎么解决?  2.解决办法因为自定义了一些窗口,没有指定父类窗口,而......
  • qt 窗口可拖动
    参考:https://blog.csdn.net/qq_45254369/article/details/125878621左键按住,拖动窗口头文件:#ifndefFRAME_H#defineFRAME_H#include<QFrame>namespaceUi{cla......
  • MFC--BITMAP HBITMAP CBitmap
     区分概念:BITMAP是C++中定义的位图结构体。HBITMAP是Windows中使用的位图句柄。CBitmap是MFC封装的位图类 定义与使用HBITMAP指针从文件中录入指针,得到文件句柄......