VC MFC指定客户区的大小

http://www.cppblog.com/bidepan2023/archive/2007/09/26/32900.aspx

假设我们用CreateWindow(..., 0, 0, w, h, ...); 创建一个窗口, 我们将获得一个w x h大小的窗口, 通常我们需要的是客户区大小为w x h, 如何做呢?

一个方法是调用API函数SetWindowPos, 通常我们需要提供3个参数:窗口句柄hwnd,窗口宽度w,窗口高度h。下面是一个示例:
SetWindowPos(hwnd, NULL, 0, 0, w, h, SWP_NOMOVE | SWP_NOZORDER);

现在的问题是我们只知道客户区的大小w x h, 如何获取窗口大小呢?

这里的关键是
wWindow = wClient + wFrame * 2
hWindow = hClient + hCaption + hMenu + hFrame * 2
其中wFrame, hCaption, hMenu, hFrame取值则需要根据窗口样式而定了。
如果窗口提供了Caption, 则hCaption=GetSystemMetrics(SM_CYCAPTION); 否则为0
如果窗口提供了菜单, 则hMenu=GetSystemMetrics(SM_CYMENU); 否则为0
如果窗口提供了Border, 则wFrame=GetSystemMetrics(SM_CXFRAME),hFrame=GetSystemMetrics(SM_CYFRAME); 否则为0

综合起来,如果窗口具有标题栏,具有菜单,具有border,我们可以这样创建一个指定客户区w x h大小的窗口:
CreateWindow(..., 0, 0, w, h, ...);
w = w + GetSystemMetrics(SM_CXFRAME) * 2;
h = h + GetSystemMetrics(SM_CYCAPTION) + GetSystemMetrics(SM_CYMENU) + GetSystemMetrics(SM_CYFRAME) * 2;
SetWindowPos(hwnd, NULL, 0, 0, w, h, SWP_NOMOVE | SWP_NOZORDER);

MFC的方法则更加简单
在Create()或者CreateEx()创建窗口以后, 用下面的代码调整窗口的大小。
CRect rect(0, 0, w, h);
CalcWindowRect(&rect);
SetWindowPos(NULL, 0, 0, rect.Width(), rect.Height(),   SWP_NOMOVE | SWP_NOZORDER | SWP_NOREDRAW);

再提供一种方法

//设定客户区大小为800*600
rect(0,0,800,600);
::AdjustWindowRectEx(&rect,cs.style,TRUE,cs.dwExStyle);
cs.cx=rect.Width();
cs.cy=rect.Height();
//改变视窗的位置让它固定在屏幕中间
CRect rcArea;
SystemParametersInfo( SPI_GETWORKAREA, NULL, &rcArea, NULL );
cs.x = rcArea.left + ( rcArea.Width() - cs.cx ) / 2;
cs.y = rcArea.top + ( rcArea.Height() - cs.cy ) / 2;

VC MFC指定客户区的大小相关推荐

  1. vc++ mfc 非客户区 描绘线_决战客户端技术

    原文链接-决战客户端技术 最近经常有小伙伴问我要做一个客户端, 该怎么弄. 这个问题问得很粗犷, 但是实际上客户端的选型是一个很细的问题. 从大学到现在, 也弄了不少的客户端, 从公司主营炒股专业客户 ...

  2. 客户区坐标与屏幕坐标之间的转换问题

    转载地址:http://blog.csdn.net/ke_yang/article/details/5417552 http://blog.163.com/tufanghui01@126/blog/s ...

  3. MFC 获取屏幕客户区(及显示器大小)

    CRect rectWorkArea; SystemParametersInfo(SPI_GETWORKAREA,0,&rectWorkArea,SPIF_SENDCHANGE);//获取屏幕 ...

  4. 一文看懂js中元素的客户区大小(clientWidth,clientHeight)

    元素的客户区 元素的客户区大小,指的是元素内容及其内边距(padding)所占据的空间大小. 相关属性如下: clientWidth:元素内容区宽度+元素左右内边距 clientHeight:元素内容 ...

  5. MFC之学习颜色矩形填充函数的使用、设置客户区背景色

    1.笔记 1.1颜色填充矩形函数 函数原型: void CDC::FillSolidRect(LPCRECT lpRect,COLORREF clr); void CDC::FillSolidRect ...

  6. VC/MFC 编程技巧大总结

    1 toolbar默认位图左上角那个点的颜色是透明色,不喜欢的话可以自己改. 2 VC++中 WM_QUERYENDSESSION WM_ENDSESSION 为系统关机消息. 3 Java学习书推荐 ...

  7. VC/MFC 俄罗斯方块双人版(基于MFC单文档)

    游戏最终界面如图: 目录: 题目要求 功能需求 总体设计 系统模块 系统业务处理流程 详细设计 砖块预显示 分数统计 砖块移动和游戏暂停的实现 游戏难度选择 播放背景音乐 游戏设置与帮助 静态文本超链 ...

  8. 窗口置顶(置于桌面所有程序之上)VC/MFC 怎么将窗口置顶

    软件界面全屏显示后,需要把窗体置于其他桌面程序之上,但总是置于其他弹出框之下,会造成用户忽略了导致用户不明什么原因. 百度查了好多方法总是失败. 后来查到了CSND的一个帖子http://bbs.cs ...

  9. 【VC++ MFC】vc 画笔和画刷|OnDraw()和OnPaint()

    目录 [VC++ MFC]vc 画笔和画刷 [VC++ MFC]OnDraw()和OnPaint() [VC++ MFC]vc 画笔和画刷 6,利用画笔改变线条颜色和类型: CPen pen(PS_D ...

最新文章

  1. Python快速入门,你想要的就在这里了!
  2. 03-kubeadm初始化Kubernetes集群
  3. USTC English Club Note20211215
  4. webpack打包jquery多页_Webpack打包与程序调试
  5. 【Linux】一步一步学Linux——pwd命令(19)
  6. 其他一些单元测试技巧
  7. QT学习笔记(一):VS2013 +QT 5.8 运行、编译问题解决
  8. web 开发安全性问题
  9. 【图像处理】基于matlab GUI图像滤镜(马赛克+蓝色透镜+素描)【含Matlab源码 1145期】
  10. BDF 字体文件格式
  11. 题解 P1894 【[USACO4.2]完美的牛栏The Perfect Stall】
  12. 用幻灯片征服全世界_NET为什么会征服世界NET很显然很像
  13. 计蒜客 联想专卖店大促销
  14. 别踩白块_前端H5游戏毕设
  15. CMake I add_custom_command命令详解(构建)
  16. 高分辨率扫描出来的图片有摩尔纹_QQ新功能:图片一键转PPT,比OCR更强大的文档重建技术...
  17. 2.1 Basics
  18. 计算机组装与维护.iso,《一学就会魔法书-电脑组装与维护》[ISO]
  19. Java 集合 —— ArrayList 分析
  20. 怎样量化评价搜索引擎的结果质量

热门文章

  1. 主流数据库实时同步/实时ETL工具的比较
  2. html 仿微信红包
  3. 01背包问题 动态规划 java实现 简单通俗易懂
  4. Codeforces 1430 A. Number of Apartments
  5. linux字符串删除后几个字符,linux系统删除开头几个字符或者结尾几个字符
  6. 软件测试工程师面试题精选
  7. android 视频转码格式有哪些,android 视频格式转换
  8. APP种树微信小程序源码下载-简单快速上手
  9. 制作LOGO 12种专用字体
  10. Android阅读器放大镜