根据文本串的长度改变窗口的大小
2008-02-26 20:27:35 来源:WEB开发网提出问题:
根据文本文件的内容,用CWin的子类对控制进行动态创建。在Create方法中,根据用户在显示属性对话框中选择的消息文本字体,用下列代码创建所有的控制:
NONCLIENTMETRICS ncm;
ncm.cbSize = sizeof(NONCLIENTMETRICS);
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(ncm), &ncm, 0);
m_DefaultFont.CreateFontIndirect(&ncm.lfMessageFont);
获得字体以后,接下来的问题是如何才能确定静态控制的高度与宽度以便显示完整的文本?
首先应该明确的是所谓显示属性对话框即在桌面单击右键,选择“属性”菜单项,再选择“外观”属性页出现的对话框(图一)。
图一
用户可以在这个对话框中选择活动窗口、消息框以及文字的颜色和字体。你可以调用SystemParametersInfo函数,用SPI_GETNONCLIENTMETRICS作为第一个参数来查出用户选择了什么字体;SystemParametersInfo 函数将你需要的信息填写到NONCLIENTMETRICS 结构中:
// NONCLIENTMETRICS 结构(winuser.h)
//
struct NONCLIENTMETRICS
{
UINT cbSize;
int iBorderWidth;
int iScrollWidth;
int iScrollHeight;
int iCaptionWidth;
int iCaptionHeight;
LOGFONT lfCaptionFont;
int iSmCaptionWidth;
int iSmCaptionHeight;
LOGFONT lfSmCaptionFont;
int iMenuWidth;
int iMenuHeight;
LOGFONT lfMenuFont;
LOGFONT lfStatusFont;
LOGFONT lfMessageFont;
};
赞助商链接