繁体   English   中英

如何在MFC中设置对话框的默认大小(以像素为单位)

[英]How to set the default size in pixels of dialog in MFC

我想设置对话框的默认大小(以像素为单位),比如640像素宽和384像素高。 default我的意思是,当第一次CXXXDlg::OnSize(UINT nType, int cx, int cy)cx值为640, cy值为384. scene的默认大小为对话框是对话框单元,我可以使用MapDialogRect()将对话框单位转换为像素,我该怎么做呢? MoveWindow()SetWindowPos()可以设置对话框的大小,但不能设置默认大小。 我也试过像这样的GetDialogBaseUnits()

DWORD dw = GetDialogBaseUnits();
WORD m_duXx4 = LOWORD(dw);
WORD m_duYx8 = HIWORD(dw);
int dialogUnitX = MulDiv(640, 4, m_duXx4);
int dialogUnitY = MulDiv(384, 8, m_duYx8);

事实证明, dialogUnitX320 ,而dialogUnitY192 ,但当我将对话框单元设置为320 * 192 ,我在CXXXDlg::OnSize(UINT nType, int cx, int cy)得到的不是640 * 384但是560 * 336 有任何想法吗?

窗口由客户区非客户区组成

客户端区域是应用程序显示输出的窗口的一部分,例如文本或图形。

标题栏,菜单栏,窗口菜单,最小化和最大化按钮,大小调整边框和滚动条统称为窗口的非客户区域

Window Rect指定包含整个窗口的区域。 它包括客户区域和非客户区域。 可以通过调用GetWindowRect (或其MFC等效项)来检索它。 它还用作MoveWindowSetWindowPos等函数的输入。

Client Rect是非客户区域未占用的窗口区域。 可以通过调用GetClientRect来查询它。 客户端rect维度传递给WM_SIZE消息处理程序。

如果应用程序需要特定大小的客户区,则可以通过调用AdjustWindowRectAdjustWindowRectEx来计算相应的窗口rect。

窗口rect通常以屏幕坐标表示,而客户端rect使用客户端坐标 两个坐标系都代表设备像素。 原点位于屏幕坐标主显示屏的左上角,客户端坐标的客户区左上角。 要在坐标系之间进行转换,应用程序使用ClientToScreenScreenToClient

对话框模板在对话框模板单元中指定尺寸和位置。 对话框模板单元与对话框的字体直接相关。 要在对话框模板单元和设备像素之间进行转换,应用程序会调用MapDialogRect 没有API调用来计算反向。 应用程序必须手动执行计算:

width  = MulDiv(width,  4, baseunitX);
height = MulDiv(height, 8, baseunitY);

如果应用程序想要动态限制窗口大小,它可以处理WM_GETMINMAXINFO消息并使用所需的维度填充MINMAXINFO结构。 当窗口的大小或位置即将改变时,该消息被发送到窗口。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM