VC MFC指定客户区的大小
来源:互联网 发布:touch捏脸数据女 编辑:程序博客网 时间:2024/06/05 22:42
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指定客户区的大小
- VC(MFC)设定客户区(视图)的大小
- 问一个获取主框架客户区大小的问题 - VC/MFC / 界面
- 客户区的大小
- MFC单文档调整客户区大小
- MFC按客户区大小获取合适的主窗口大小
- C++/MFC修行之路(7)MFC单文档程序调整客户区大小的方法
- 在MFC的MDI程序中设置子窗口客户区大小
- 弹出窗口 resize 时指定客户区大小
- MFC指定对话框大小
- 如何动态设置客户区的大小?
- 设置窗口客户区大小的方法
- 获取客户区大小的办法
- VC客户区显示图像的方法
- MFC客户区
- MFC重绘非客户区
- (VC/MFC)禁止对话框(窗口)的大小改变和移动
- (VC/MFC)禁止对话框(窗口)的大小改变和移动
- Packed Record
- DS-2-1 基本定义
- android左右滑动(类似桌面桌面左右滑动效果)
- Guide: Uninstall avast! Free Antivirus 7
- 数据库优化
- VC MFC指定客户区的大小
- BTRFS设计简介
- linux:如何修改用户的密码
- 能上QQ但不能上网问题精解
- Solr学习总结-命令行添加索引
- bitmap思想和2-Bitmap 实现
- CSplitterWnd中的各个CView是怎么和CDocument联系(attach)的?
- Linux Kernel系列
- 使用(Drawable)资源