gpt4 book ai didi

在运行时更改标签颜色

转载 作者:可可西里 更新时间:2023-11-01 11:12:41 24 4
gpt4 key购买 nike

我试图在用户点击标签时更改标签的颜色。我可以设置等待 WM_CTLCOLORSTATIC 消息的文本颜色并执行以下操作:

hdc = (HDC)wParam;
SetTextColor(hdc, RGB(150, 150, 150));

因此,我尝试对 WM_LBUTTONUP 消息执行相同的操作:

case WM_LBUTTONUP:
{
hdc = GetDC(hLabel);
SetTextColor(hdc, RGB(100, 100, 100));
ReleaseDC(hLabel, hdc);
return 0;
}

和之前创建的标签:

hLabel = CreateWindowW(
L"STATIC", L"Some text", WS_CHILD | WS_VISIBLE | SS_LEFT,
10, 10, 100, 30, hwnd, (HMENU)2, NULL, NULL
);

这不会改变颜色,GetLastError 返回 0。我做错了什么?

最佳答案

我会建议不同的方法。介绍static BYTE名为 changeColor 的变量并将其设置为零。然后将此变量设置为 1回应WM_RBUTTONUP并使您的标签无效。像这样:

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static BYTE changeColor;

// the rest of your code, like main switch and other variables...

然后在你的WM_CREATE中初始化它像这样的处理程序:

case WM_CREATE:
{
changeColor = 0;
// the rest of your code, if you had any
}
return 0L;

现在你需要重写你的WM_CTLCOLORSTATIC像这样:

case WM_CTLCOLORSTATIC:
{
hdc = (HDC)wParam;
SetTextColor(hdc, RGB( 150 - 50 * changeColor,
150 - 50 * changeColor, 150 - 50 * changeColor ) );
}
return DefWindowProc(hWnd, msg, wParam, lParam);

关键是在你设置changeColor之后至 1在你的WM_LBUTTONUP并使标签无效,即 RGB 中的表达式宏将是 RGB( 100, 100, 100 )这正是你想要的。您没有指定在哪里重置颜色,但您将执行与 WM_LBUTTONUP 中相同的操作。除了changeColor将被设置为零。

现在唯一剩下的就是告诉你如何处理WM_LBUTTONUP (或 WM_RBUTTONUP,我不知道,因为您的问题的那部分内容不清楚):

case WM_LBUTTONUP:
{
changeColor = 1;
InvalidateRect( hLabel, NULL, TRUE );
// the rest of your code goes here, if there is any
}
return 0L;

你的问题不够清楚,我无法进一步帮助你,所以我希望这对你有所帮助。

如果您需要进一步的帮助,请发表评论。

祝你好运!

关于在运行时更改标签颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25042527/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com