不用CDC的成员函数!!!!!!
我开始用API DrawText 将其中的uFormat 参数设置成DT_CALCRECT,但是计算出来的大小始终很小,完全不行。我自己的代码如下: m_pWnd = new CWindow;
m_pWnd->Create(_T("STATIC"),m_hWnd,&rc,NULL,WS_CHILD | WS_VISIBLE | WS_EX_STATICEDGE | SS_SUNKEN | SS_NOTIFY ,0,0U,NULL);
pfont->pWnd = m_pWnd;
LOGFONT lf;
memset(&lf,0,sizeof(LOGFONT));
::GetObject(::GetStockObject(SYSTEM_FONT),sizeof(lf),&lf);
lf.lfHeight = pfont->nFontSize;
lf.lfWidth = pfont->nFontSize;
_tcscpy(lf.lfFaceName,pfont->pwszFontFamily);
m_hFont = ::CreateFontIndirect(&lf);
pfont->hFont = m_hFont;
m_pWnd->SetFont(m_hFont);
RECT rect ;
memset(&rect,0,sizeof(rect));
::GetWindowRect(m_hWnd,&rect);
ScreenToClient(&rect);
rect.left = 0;
rect.bottom = 0;
rect.top = 0;
::DrawTextW(::GetDC(m_pWnd->m_hWnd),OLE2T(strText),1,&rect,DT_CALCRECT | DT_SINGLELINE | DT_VCENTER );
望高手指点!如何正确计算???????
我开始用API DrawText 将其中的uFormat 参数设置成DT_CALCRECT,但是计算出来的大小始终很小,完全不行。我自己的代码如下: m_pWnd = new CWindow;
m_pWnd->Create(_T("STATIC"),m_hWnd,&rc,NULL,WS_CHILD | WS_VISIBLE | WS_EX_STATICEDGE | SS_SUNKEN | SS_NOTIFY ,0,0U,NULL);
pfont->pWnd = m_pWnd;
LOGFONT lf;
memset(&lf,0,sizeof(LOGFONT));
::GetObject(::GetStockObject(SYSTEM_FONT),sizeof(lf),&lf);
lf.lfHeight = pfont->nFontSize;
lf.lfWidth = pfont->nFontSize;
_tcscpy(lf.lfFaceName,pfont->pwszFontFamily);
m_hFont = ::CreateFontIndirect(&lf);
pfont->hFont = m_hFont;
m_pWnd->SetFont(m_hFont);
RECT rect ;
memset(&rect,0,sizeof(rect));
::GetWindowRect(m_hWnd,&rect);
ScreenToClient(&rect);
rect.left = 0;
rect.bottom = 0;
rect.top = 0;
::DrawTextW(::GetDC(m_pWnd->m_hWnd),OLE2T(strText),1,&rect,DT_CALCRECT | DT_SINGLELINE | DT_VCENTER );
望高手指点!如何正确计算???????
长度为1;
DrawTextW(::GetDC(m_pWnd->m_hWnd),OLE2T(strText),wcslen(OLE2T(strText)),&rect,DT_CALCRECT | DT_SINGLELINE | DT_VCENTER );_tcscpy(lf.lfFaceName,pfont->pwszFontFamily);
留意一下宽的窄的可能有区别 或者版本问题
不是很在意就是+1的事,调试的时候看看
m_pWnd = new CWindow;
m_pWnd->Create(_T("STATIC"),m_hWnd,&rc,NULL,WS_CHILD | WS_VISIBLE | SS_SUNKEN | SS_NOTIFY ,0,0U,NULL);
pfont->pWnd = m_pWnd;
LOGFONT lf;
memset(&lf,0,sizeof(LOGFONT));
::GetObject(::GetStockObject(SYSTEM_FONT),sizeof(lf),&lf);
lf.lfHeight = pfont->nFontSize;
lf.lfWidth = pfont->nFontSize;
_tcscpy(lf.lfFaceName,pfont->pwszFontFamily);
m_hFont = ::CreateFontIndirect(&lf);
pfont->hFont = m_hFont;
HFONT hOldFont;
m_pWnd->SetFont(m_hFont);
hOldFont = (HFONT)::SelectObject(::GetDC(m_pWnd->m_hWnd),(HGDIOBJ)m_hFont);
RECT rect ;
memset(&rect,0,sizeof(rect));
::GetWindowRect(m_hWnd,&rect);
ScreenToClient(&rect);
::DrawTextW(::GetDC(m_pWnd->m_hWnd),OLE2T(strText),stLen,&rect,DT_CALCRECT | DT_VCENTER );
m_pWnd->SetWindowText(strText);
::SelectObject(::GetDC(m_pWnd->m_hWnd),(HGDIOBJ)hOldFont);
::MoveWindow(m_pWnd->m_hWnd,rect.left,rect.top,rect.right - rect.left ,rect.bottom - rect.top,TRUE);
系统的字体大小来计算???
DrawTextW使用""宽字符""UnicodeDrawTextA使用""多字节字符集""
nt系统最终调用的是ExtTextOutW
还是你要计算rect?
如果正文有多行,使用rect定义的矩形宽度,并扩展底部以容纳正文最后一行,如果只有一行,则改变右边界,容纳正文最后一个字符,上述任何一种情况,返回格式化正文的高度
CSize size = pdc->GetTextExtent(lpString, lpString.GetLength());
字体是当前pdc选择的字体。可以重新选择字体以按字体测量。