GetTextMetrics

本文介绍如何在程序中通过调用`GetTextMetrics`函数获取当前字体的详细信息,并利用这些信息自定义窗口的插入符大小。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

该函数的参数要求是一个TEXTMETRIC结构体的指针 也就是说我们可以定义一个结构类型的变量 将该变量的地址传递进来 通过该函数就能得到当前字体的信息来填充这个结构体


int CXuexi2View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
//调用Windows处理函数对应的create
// TODO: Add your specialized creation code here
/* CClientDC dc(this);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);//得到窗口字体信息
CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);//用于表示插入符的消息、/8经过试验以后验证是最好的
ShowCaret();
*/
CreateSolidCaret(1,10);//自己定义窗口的插入符的大小
ShowCaret();

return 0;
}

CDC::GetTextMetrics 

BOOL GetTextMetrics( LPTEXTMETRIC lpMetrics ) const;

Return Value

Nonzero if the function is successful; otherwise 0.

Parameters

lpMetrics

Points to the TEXTMETRIC structure that receives the metrics.

Remarks

Retrieves the metrics for the current font using the attribute device context.

typedef struct tagTEXTMETRIC { // tm 
    LONG tmHeight; 插入符的高度
    LONG tmAscent; 升序的高度 gh他们高度不一样h高一点  所以h带表了升序的高度
    LONG tmDescent; 降序的高度g-h表示了降序的高度
    LONG tmInternalLeading; 
    LONG tmExternalLeading; 
    LONG tmAveCharWidth; 字符的平均宽度值
    LONG tmMaxCharWidth; 
    LONG tmWeight; 
    LONG tmOverhang; 
    LONG tmDigitizedAspectX; 
    LONG tmDigitizedAspectY; 
    BCHAR tmFirstChar; 
    BCHAR tmLastChar; 
    BCHAR tmDefaultChar; 
    BCHAR tmBreakChar; 
    BYTE tmItalic; 
    BYTE tmUnderlined; 
    BYTE tmStruckOut; 
    BYTE tmPitchAndFamily; 
    BYTE tmCharSet; 
} TEXTMETRIC; 
 

转载于:https://www.cnblogs.com/jianxin-lilang/p/4654918.html

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; HFONT hF_black, hF_big; PAINTSTRUCT ps; TEXTMETRIC tm; int X = 0, Y = 0; RECT rect; SIZE size; LPCWSTR lpsz_1 = L"这是一行红色的、字体为SYSTEM_FONT的字体,红色代表未来。"; LPCWSTR lpsz_2 = L"现在显示的是自定义字体,颜色为绿色,绿色代表生机勃勃。"; LPCWSTR lpsz_3 = L"现在展现在您面前的是蓝色的粗体字,蓝色代表广阔的海洋和天空。"; LPCWSTR lpsz_4 = L"当前字体为大号、斜体并带有下划线的文字。"; LPCWSTR lpsz_5 = L"现在您掌握了字体的操作了吗?祝您成功!"; switch (message) { case WM_CREATE: { SetTimer(hwnd, 9999, 50, NULL); break; } case WM_TIMER: { if (wParam == 9999) { InvalidateRect(hwnd, NULL, true); } break; } case WM_PAINT: { rect.right += 2; hdc = BeginPaint(hwnd, &ps); SetTextColor(hdc, RGB(255, 0, 0)); GetTextMetrics(hdc, &tm); TextOut(hdc, X, Y, lpsz_1, _tcsclen(lpsz_1)); Y = Y + tm.tmHeight + tm.tmExternalLeading; hF_black = CreateFont ( 20, 0, 0, 0, FW_HEAVY, 0, 0, 0, GB2312_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH|FF_DONTCARE, L"粗体字" ); SetTextColor(hdc, RGB(0, 255, 0)); SelectObject(hdc, hF_black); GetTextMetrics(hdc, &tm); TextOut(hdc, X, Y, lpsz_2, _tcsclen(lpsz_2)); Y = Y + tm.tmHeight + tm.tmExternalLeading; GetTextExtentPoint32(hdc, lpsz_2, _tcsclen(lpsz_2), &size); EndPaint(hwnd, &ps); return 0; } case WM_DESTROY: PostQuitMessage(0); return 0; default: return DefWindowProc(hwnd, message, wParam, lParam); } } 严重性 代码 说明 项目 文件 行 禁止显示状态 详细信息 错误(活动) E0167 "LPCWSTR" (aka "const WCHAR *") 类型的实参与 "LPCSTR" (aka "const CHAR *") 类型的形参不兼容 1 D:\桌面\win第5周作业\1\1.cpp 93 严重性 代码 说明 项目 文件 行 禁止显示状态 详细信息 错误(活动) E0167 "LPCWSTR" (aka "const WCHAR *") 类型的实参与 "const char *" 类型的形参不兼容 1 D:\桌面\win第5周作业\1\1.cpp 93 严重性 代码 说明 项目 文件 行 禁止显示状态 详细信息 错误(活动) E0167 "const wchar_t *" 类型的实参与 "LPCSTR" (aka "const CHAR *") 类型的形参不兼容 1 D:\桌面\win第5周作业\1\1.cpp 112
最新发布
03-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值