VS中如何正确使用TextOut()

 函数功能:该函数用当前选择字符、背景颜色和正文颜色将一个字符串写到指定位置。

 函数原型:BOOL TextOut (HDC hdc, int nXStart, int nYStart, LPCTSTR lpString, int cbString);

参数:

    hdc:设备环境句柄。

    nXStart:指定用于字符串对齐的基准点的逻辑X坐标。

    nYStart:指定用于字符串对齐的基准点的逻辑Y坐标。

    lpString:指向将被绘制字符串的指针。此字符串不必为以\0结束的,因为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;
}


你可能感兴趣的:(API)