据我所知,为了使GetTextExtendPoint32正常工作,它需要知道正确的字体。但是,我很困惑为什么需要调用SelectObject。示例我想计算复选框文本的长度。
使用:
Size sizeChkBox;
CString csChkBox;
m_ChxBox.GetWindowText(csChkBox);
CDC* dc = m_ChkBox.GetDC();
HFONT hfontChK = (HFONT)GetWindowFont(m_ChkBox.GetSafeHwnd());
SelectObject(*dc, hfontChK);
GetTextExtentPoint32(*dc, csChkBox, strlen(csChkBox), &sizeChkBox);
不起作用:
Size sizeChkBox;
CString csChkBox;
m_ChxBox.GetWindowText(csChkBox);
CDC* dc = m_ChkBox.GetDC();
GetTextExtentPoint32(*dc, csChkBox, strlen(csChkBox), &sizeChkBox);
我想我的问题确实是为什么dc并不具有正确的字体,因为它的#34;是从复选框"?
答案 0 :(得分:2)
GetDC(HWND)
创建一个HDC
,其中包含所有默认设置,设置为在给定窗口上绘图。它实际上并没有询问窗口的属性:特别是它没有向它发送WM_GETFONT
。
意识到WM_SETFONT
和WM_GETFONT
只能按惯例工作。没有什么说窗口必须处理这些消息,或者使用其WM_PAINT
实现中提供的字体。标准控制倾向于这样做,作为一种常见的礼貌,但这绝不是普遍的要求。