C语言窗口程序如何解决窗口绘制文字背景被涂白并调整文字大小?

下面是我写的一个窗口程序:
#include <windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) {
    WNDCLASS wc;

    static TCHAR *szAppName = TEXT("ck");

    HWND hwnd = NULL;

    MSG msg;

    wc.style = CS_HREDRAW | CS_VREDRAW; //窗口样式
    wc.lpfnWndProc = WndProc; //过程函数
    wc.cbClsExtra = 0; //扩展字段
    wc.cbWndExtra = 0; //扩展字段
    wc.hInstance = hInstance; //当前实例句柄
    wc.hIcon = LoadIcon(hInstance, IDI_APPLICATION); //设置程序图标
    wc.hCursor = LoadCursor(NULL, IDC_ARROW); //设置鼠标
    wc.hbrBackground = (HBRUSH) GetStockObject(BLACK_BRUSH);
    wc.lpszMenuName = NULL;
    wc.lpszClassName = szAppName;

    if (!RegisterClass(&wc)) {

        MessageBox(NULL, TEXT("程序只能在windowsNT下运行"),

                   szAppName, MB_ICONERROR);

        return 0;

    }

    hwnd = CreateWindow(szAppName, //要注册的窗口类名
                        TEXT("c"),//窗口标题
                        WS_OVERLAPPEDWINDOW, //窗口样式
                        CW_USEDEFAULT, //窗口距离屏幕左上角都横坐标
                        CW_USEDEFAULT, //窗口距离屏幕左上角都纵坐标
                        400, //窗口宽度
                        300, //窗口高度
                        NULL, //父窗口句柄
                        NULL, //菜单句柄
                        hInstance, //当前实例句柄
                        NULL);
    ShowWindow(hwnd, iCmdShow);
    UpdateWindow(hwnd);

    while (GetMessage(&msg, NULL, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;

}
/**

消息处理函数

*/

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {

    switch (message) {
        case WM_PAINT:{
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hwnd, &ps);
            SetTextColor(hdc, RGB(255, 0, 0));
            TextOut(hdc, 50, 50, "hello!", strlen("hello!"));
            EndPaint(hwnd, &ps);
        }
            break;

        case WM_DESTROY:

            PostQuitMessage(0);

            break;

    }



//调用默认的过程函数

    return DefWindowProc(hwnd, message, wParam, lParam);

}

功能是创建一个黑色窗口并在上面绘制一个红色的“hello!”文字,但运行结果如下:

img

打印“hello!”的区域屏幕背景被设置成了白色,而且在编程过程中我还发现文字的大小不可调,只能固定这么大。
请问如何解决窗口绘制文字背景被涂白,如何调整文字大小?谢谢。

加上 SetBkColor

PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
SetTextColor(hdc, RGB(255, 0, 0));
SetBkColor(hdc, RGB(0, 0, 0)); // 设置背景色为黑色
TextOut(hdc, 50, 50, "hello!", strlen("hello!"));
EndPaint(hwnd, &ps);

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/731180
  • 除此之外, 这篇博客: 因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配中的  路径修改注册信息 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

            1)在 HKEY_CLASSES_ROOT 下找到.xls.xlsx。

            2)查看.xls.xlsx文件夹默认处的数值是否设置正确。.xls是创建xls表格的.xlsx是创建xlsx表格的。如下图所示,默认出的数值需要与以下箭头所指对应。没有就自己创建。该处的目的是创建右键可创建表格。(创建文件夹为:单击鼠标右键>新建>项。创建文件里的数值为:单击鼠标右键>新建>字符串值)(ET.Xls.6  Excel.Sheet.12)

             3)查看ET.Xls.6与Excel.Sheet.12中是否有ShellNew。没有就自己创建文件夹。

             4)在ET.Xls.6与Excel.Sheet.12中的ShellNew中,创建FileName,并将值修改为C:\Program Files\Microsoft Office\root\vfs\Windows\SHELLNEW\EXCEL12.XLSX(该对应的是XLSX的,XLS的照着添加即可)。如有自己修改值即可。

            该处的目的是,创建一个默认创建的模板。不一定需要上面的那个路径,也可以自己新建一个xls和xlsx文件放在一个目录中,将FileName的值指向该路径即可。

             此时,可正常打开。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^