如何计算基于 Visual C++ 中的当前字体对话框框单元
本页
概要
计算对话框单元为单位时,GetDialogBaseUnits() 始终假定系统字体。 如果将不任何字体不系统字体返回值可能无法适合对话框。 本文提供了两种替代...计算对话框单元为单位时,GetDialogBaseUnits() 始终假定系统字体。 如果将不任何字体不系统字体返回值可能无法适合对话框。 本文提供了两种替代方法使用可根据当前字体对话框框单元。
更多信息
水平的基本单位相当于的系统字体中字符平均宽度 (以像素为单位)。 GetDialogBaseUnits() 帮助建议用于计算正确的单位以下代码: pixelX...
水平的基本单位相当于的系统字体中字符平均宽度 (以像素为单位)。 GetDialogBaseUnits() 帮助建议用于计算正确的单位以下代码:
pixelX = (dialogunitX * baseunitX) / 4
pixelY = (dialogunitY * baseunitY) / 8
但是,如果您不使用系统字体,您需要执行一些其他计算将右坐标。 下面是两种方法:
方法 1
垂直对话框框单位等于字符高度。 水平对话框框单位等效于对话框的字体的平均字符宽度。 通过查找字母的字符集的平均的文本范围,计算平均字符宽度。 这是必需的因为 tmAveCharWidth 不是精确。 使用以下代码:
void CAboutDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
CFont* pFont = GetFont();
CFont* oldFont = dc.SelectObject(pFont);
TEXTMETRIC tm;
dc.GetTextMetrics( &tm );
int baseUnitY = tm.tmHeight;
CSize size;
size = dc.GetTextExtent(
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", 52);
int baseUnitX = (size.cx / 26 + 1) / 2;
TRACE("baseUnitX = %d/n", baseUnitX);
TRACE("baseUnitY = %d/n", baseUnitY);
dc.SelectObject(oldFont);
}
方法 2
在替代项是更加容易。 MapDialogRect() 使用某坐标处的 x = 4,y = 8 将返回对话框框基本单位,无论对话框的字体。 但是,在大多数的情况下,程序员不需要知道对话框框中的基本单位。 MapDialogRect() 可用于直接任何对话框框单位换算直接与设备坐标。 下面的示例代码演示如何它可以使用查找对话框框中的基本单位:
void CAboutDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
CRect rc( 0, 0, 4, 8 );
MapDialogRect( &rc );
int baseUnitY = rc.bottom;
int baseUnitX = rc.right;
TRACE("baseUnitX = %d/n", baseUnitX);
TRACE("baseUnitY = %d/n", baseUnitY);
}
参考线设置”对话框
版式参考线
显示布局参考线的设置。
无
隐藏布局工具。
标尺和参考线
如果启用,则在布局工具中添加标尺;可将参考线放置在标尺中。默认参考线是边距,可以通过拖动来移动它。在标尺中单击以设置参考线。当控件在参考线上面或 旁边移动时,控件将“对齐”参考线。控件附加到参考线上后便与参考线一起移动。如果控件的每一端均附加到参考线上,则当参考线移动时,控件将调整大小。
网格
创建布局网格。新控件自动对齐网格。
网格间距
显示以对话框单元 (DLU) 为单位的网格间距设置。
宽度:DLU
设置以 DLU 为单位的布局网格宽度。水平 DLU 是按四划分的对话框字体的平均宽度。
高度:DLU
设置以 DLU 为单位的布局网格高度。垂直 DLU 是按八划分的对话框字体的平均高度。
有关将资源添加到托管项目的信息,请参见“.NET Framework 开发员指南”中的应用程序中的资源 。有关手动将资源文件添加到托管项目、访问资源、显示静态资源和将资源字符串分配给属性的信息,请参见演练:本地化 Windows 窗体 和演练:将本地化资源用于 ASP.NET 。
要求
Win32