原文转载自:http://bbs.youkuaiyun.com/topics/80515448 呵呵,偶问题解决了,不能独享,贴出来,楼主看一下,有一个步骤是必须的,就是取得主窗口的FONT,然后设置DC的FONT,然后再计算,这样才正确,参考下面的代码 CSize s; CFont *font = this->GetFont(); CFont *def_font = NULL; CClientDC dc(((CStatic *)GetDlgItem(IDC_STATIC_MSG))); def_font = dc.SelectObject(font); ::GetTextExtentPoint32((HDC)dc.m_hDC, lpszTemp, (int)strlen(lpszTemp), &s)) dc.SelectObject(def_font); 回复于: 2006-05-12 10:53:36 #5 得分:30 对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 Tian_Dao_Akane Tian_Dao_Akane 我赶紧试试先^_^ 回复于: 2006-05-12 13:36:53 #6 得分:0 对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 Tian_Dao_Akane Tian_Dao_Akane 测试通过了,太感谢楼上的两位朋友了!下面是我的完整代码: CStatic *temp=(CStatic *)GetDlgItem(IDC_STATIC1); CRect rect; CSize size(0,0); temp->GetWindowRect(rect); ScreenToClient(&rect); CClientDC dc(temp); CFont *pOldFont=dc.SelectObject(this->GetFont()); CString str; temp->GetWindowText(str); if(::GetTextExtentPoint32((HDC)dc,str,str.GetLength(),&size)) { rect.right=rect.left+size.cx; rect.bottom=rect.top+size.cy; } else temp->SetWindowText("GetTextExtentPoint32 fail to get the size of text!"); temp->MoveWindow(rect); dc.SelectObject(pOldFont); 结贴了!