GDI+的字体Font对象问题

来源:百度知道 编辑:UC知道 时间:2024/06/01 09:03:16
如果指定的字体名字系统里没有,用Font创建时也会成功,用它返回的HFONT句柄也是有效的,只是用GetTextExtentPoint32W测试字串宽度时总是为零,不知何避免,更奇怪的是就连GetTextExtentPoint32W的返回值也是为真。真是没招了。
不是啊,stone_dongdong大侠,像你这样的代码当然没问题。
我的代码是这样的:
if( NULL == pGraph )return false;
Font* pFont = NULL;
if( NULL == ( pFont = new Font( L"1", 32 ) ) )return false;//这里本来是 Font font( L"宋体",32 );
HFONT hFont = NULL;
if( NULL == ( pFont->GetHFONTW( pGraph ) ) )return false;
HDC hDC = NULL;
if( NULL == pGraph->GetHDC() ) )return false;//pGraph为Graphics对象指针,已通过无效性检查了
SIZE TextSize;
TextSize.cx = 0;
TextSize.cx = 0;
HFONT hOldFont = ( HFONT )::SelectObject( hDC, hFont );
Std::wstring str( L“我的家乡在哪里?” );
if( !::GetTextExtentPoint32W( hDC, str.c_str(), str.length(), & TextSize) )
{
::SelectObject( hDC, hOldFont );
return false;
}
::SelectObject( hDC, hOldFont );
pGraph->ReleaseHDC( hDC );
return true;
因为系统里没有

不是HFONT的问题。是你代码的问题。

CDC*pDC = GetDC();
pDC.SelectObject( hFont);
CSize sz;
GetTextExtentPoint32W( pDC->GetSafeHandle(), _T("assbb"),5,&sz);
ReleaseDC( pDC);

你试试。