为什么必须在调用GetTextExtendPoint32之前调用SelectObject

时间:2014-10-02 20:05:19

标签: visual-c++

据我所知,为了使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;是从复选框"?

1 个答案:

答案 0 :(得分:2)

GetDC(HWND)创建一个HDC,其中包含所有默认设置,设置为在给定窗口上绘图。它实际上并没有询问窗口的属性:特别是它没有向它发送WM_GETFONT

意识到WM_SETFONTWM_GETFONT只能按惯例工作。没有什么说窗口必须处理这些消息,或者使用其WM_PAINT实现中提供的字体。标准控制倾向于这样做,作为一种常见的礼貌,但这绝不是普遍的要求。

相关问题