VS中如何正确使用TextOut()
函数功能:该函数用当前选择字符、背景颜色和正文颜色将一个字符串写到指定位置。
函数原型:BOOL TextOut (HDC hdc, int nXStart, int nYStart, LPCTSTR lpString, int cbString);
参数:
hdc:设备环境句柄。
nXStart:指定用于字符串对齐的基准点的逻辑X坐标。
nYStart:指定用于字符串对齐的基准点的逻辑Y坐标。
lpString:指向将被绘制字符串的指针。此字符串不必为以结束的,因为cbString中指定了字符串的长度。
cbString:字符串的字符数。
返回值:如果函数调用成功,返回值非零;如果函数调用失败,返回值是0。
第三个参数,需要定义为LPCWSTR类型
TextOut 最后一个参数要的是字串的长度,你定义的宏常量是加了 _T 的,如果你选择 UNICODE 字符集编译,对应的字串长必须是以“多少个UNICODE字符”来描述,所以必须是 lstrlen 才能计算正确。
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
LPCWSTR text1 = TEXT("manage of students grades");
switch (message)
{
case WM_COMMAND:
{
int wmId = LOWORD(wParam);
// 分析菜单选择:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
}
break;
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
// TODO: 在此处添加使用 hdc 的任何绘图代码...
Rectangle(hdc, 0, 0, 25, 50 );
COLORREF color1 = RGB(0, 255, 0);
COLORREF color2 = RGB(255, 0, 0);
::SetTextColor(hdc, color1);
::SetBkColor(hdc, color2);
::TextOut(hdc, 100, 100, text1, lstrlen(text1));
EndPaint(hWnd, &ps);
}
break;
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}