分类: C/C++
2008-07-15 20:21:28
在MFC下运行此函数,
AAAA,BBBB情况下与抓图比较,差异比较大,CCCC最接近,可能绘图最好
void CCoolTabCtrl::GetTextSize(LPCTSTR lpszText, int nCount, CSize &size)
{
size.cx = 0;
size.cy = 0;
/*AAAA*********************************************
/*CString ss("Customized Split Size (0.00 MB)");
CClientDC dc(this);
int nSave = dc.SaveDC();
CFont font;
font.CreateStockObject(SYSTEM_FONT);
LOGFONT lf;
memset(&lf, 0, sizeof(LOGFONT));
font.GetLogFont(&lf);
lf.lfWidth = 6;
lf.lfHeight = 8;
strcpy(lf.lfFaceName, "宋体");
dc.SelectObject(font);
size = dc.GetTextExtent( lpszText, nCount );
CRect rc(0,0,0,0);
dc.DrawText(ss, &rc, DT_CALCRECT);
CSize s = dc.GetTextExtent("Customized Split Size (0.00 MB)");
CSize c;
GetTextExtentPoint32(dc,"Customized Split Size (0.00 MB)",31, &c);
dc.RestoreDC(nSave);
//宽度:0xd1
*/
/*BBBB*********************************************
HDC hdc=::GetDC(*this);
TEXTMETRIC tm;
LPCTSTR szString = "Customized Split Size (0.00 MB)";
::GetTextMetrics(hdc,&tm);
::GetTextExtentPoint32(hdc, szString, lstrlen(szString),&size);
int cx=size.cx;//宽度
int cy=tm.tmHeight+tm.tmExternalLeading;//高度
宽度:0xd1
*/
/*CCCC*********************************************/
CClientDC dc(this);
NONCLIENTMETRICS ncm;
ncm.cbSize = sizeof(NONCLIENTMETRICS);
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(ncm), &ncm, 0);
CRect rc(0,0,0,0);
CFont font;
font.CreateFontIndirect(&ncm.lfMessageFont);
// 将字体选进DC
CFont* pOldFont = dc.SelectObject(&font);
// 计算文本大小
CString str("Customized Split Size (0.00 MB)");
dc.DrawText(str, rc, DT_CALCRECT);
// 回复旧字体-这是必须的
dc.SelectObject(pOldFont);
// 宽度:0x96 与抓图下的象素值最接近
}
chinaunix网友2008-12-23 17:30:22
光标: 只要把LoadCursor(IDC_XXXXX);改成LoadStandardCursor(缺省光标ID号); 缺省光标ID号如下: IDC_ARROW 缺省:标准箭头 IDC_WAIT 漏沙(黑白的,而且不动) IDC_IBEAM "工" IDC_CROSS "十" IDC_UPARROW "↑" IDC_SIZEALL "十"四方向箭头 IDC_SIZENWSE "\"两方向箭头 IDC_SIZENESW "/"两方向箭头 IDC_SIZEWE "-"两方向箭头 IDC_SIZENS "|"两方向箭头