c++ - 如何使用WIN32 API for C++更改文本的颜色和大小?

标签 c++ winapi

我一直在寻找问题的答案,但似乎找不到适合我的解决方案...可能是因为我可能认为这全错了。

我正在尝试创建一个基本的窗口,该窗口使用C++中的WIN32 API以大红色字体弹出一串文本。

我曾尝试在WindowProcedure中使用WM_CTLCOLORSTATIC控件,但似乎无法使文本更改颜色。但是,我能够使用WM_CREATE创建文本,所以我对自己做错了感到困惑...

这是我到目前为止所写的。

#include <iostream>
#include <windows.h>

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

HWND textfield;
HDC hdc;

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR args, int nccmdshow) {

    WNDCLASSW wc = { 0 };

    wc.hbrBackground =  (HBRUSH)COLOR_WINDOW;
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hInstance = hInst;
    wc.lpszClassName = L"myWindowClass";
    wc.lpfnWndProc = WindowProcedure;

    if (!RegisterClassW(&wc))
        return -1;

    CreateWindowW(L"myWindowClass", L"My Window", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 500, 200, 1000, 500,
        NULL, NULL, NULL, NULL);

    MSG msg = {0};

    while (GetMessage(&msg, NULL, NULL, NULL)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return 0;

}

LRESULT CALLBACK WindowProcedure(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) {


    switch (msg) {
    case WM_CREATE:
        textfield = CreateWindow(L"STATIC", L"DEBOODAH!", WS_VISIBLE | WS_CHILD , 500, 100, 300, 25, hWnd, NULL, NULL, NULL);
        break;

    case WM_CTLCOLORSTATIC:

    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProcW(hWnd, msg, wp, lp);
    }

}


任何帮助将不胜感激!

最佳答案

WM_CTLCOLORSTATIC消息在wParam中获取设备上下文句柄(HDC)。使用方法如下:

case WM_CTLCOLORSTATIC:
    SetTextColor((HDC)wp, RGB(255, 0, 0));
    return DefWindowProcW(hWnd, msg, wp, lp);

文字大小是一个完全不同的故事。创建静态窗口后,必须构造字体并将其提供给静态窗口:
case WM_CREATE:
    textfield = CreateWindow(/*...*/);
    HFONT hf = CreateFont(/*size=*/-12, 0, 0, 0, FW_NORMAL, 0, 0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, L"MS Sans Serif");
    SendMessage(textfield, WM_SETFONT, (WPARAM)hf, 0);
    break;

也可以按照塞巴斯蒂安的建议画自己的文字。

关于c++ - 如何使用WIN32 API for C++更改文本的颜色和大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61032209/

相关文章:

c++ - 如何在 C++ 中计算列随机矩阵的特征向量

windows - 使用文件识别进程

c# - 使用 .NET 代码防止进程产生

使用 WM_SETCURSOR C++ 光标更改为沙漏

c++ - std::getline 在遇到 eof 时抛出

c++ - 统一 block 集合中的连续 block 的算法

c++ - 如何判断 Windows XP 后的操作系统是否没有默认文件扩展名关联?

c++ - 右 ALT 发送两个虚拟键码

c++ - C++中文件地址的大小

c++ - 程序陷入循环