Visual c++ 更改计时器上的窗口背景色

Visual c++ 更改计时器上的窗口背景色,visual-c++,graphics,Visual C++,Graphics,我很难想出如何改变按钮的背景色每秒钟。从一种颜色到另一种颜色。 这就是我创建按钮的方式。或者,如果可能,您如何在onPaint之外更改HWND实例的颜色 hButton = CreateWindowEx(WS_EX_TRANSPARENT, "Button","B", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 20, 30, 20, 20, hwnd, (HMENU)ID_BUTTON, hInst, NULL); 这是WndProc

我很难想出如何改变按钮的背景色每秒钟。从一种颜色到另一种颜色。 这就是我创建按钮的方式。或者,如果可能,您如何在onPaint之外更改HWND实例的颜色

hButton = CreateWindowEx(WS_EX_TRANSPARENT, "Button","B",
    WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
    20, 30, 20, 20, hwnd, (HMENU)ID_BUTTON,
    hInst, NULL);
这是WndProc内部的变色盒

case WM_ERASEBKGND:

     RECT rc;
     GetClientRect(hButton, &rc);
     SetBkColor((HDC)wParam, 0x000000ff); // red
     ExtTextOut((HDC)wParam, 0, 0, ETO_OPAQUE, &rc, 0, 0, 0);
     return 1;
下面是我如何设置计时器的

if (!SetTimer(hwnd, TIMER1, 20, NULL))
{
    MessageBox(hwnd, "No Timers Available", "Info", MB_OK);
    return FALSE;
}

这个按钮似乎在改变颜色,但它很快就会消失。我不知道如何解决这个问题

我更喜欢在这种情况下使用
CMFCButton
,前提是您使用的是MFC

步骤非常简单:

  • 添加CMFCButton类型的成员变量(控件类型)。假设您将变量声明为
    CMFCButton mhbutton2

  • 修改
    OnInitDialog()
    函数并添加以下行:

    m_hButton2.m_nFlatStyle = CMFCButton::BUTTONSTYLE_NOBORDERS;
    m_hButton2.m_bTransparent = false;
    SetTimer(255, 1000, NULL);
    
  • 实现
    OnTime()
    函数以更改所选颜色。我已经实现了如下内容

    void CMFCApplicationDialogDlg::OnTimer(UINT_PTR nIDEvent)
     {
        if(nIDEvent == 255)
        {
            static int nRedColor = 0;
            m_hButton2.SetFaceColor(RGB(nRedColor++,0,0), true);
        }
        CDialogEx::OnTimer(nIDEvent);
     }
    

  • 上面的实现帮助我每秒逐渐增加
    红色
    部分颜色,几秒钟后(大约100秒后)按钮将开始显示红色

    你不想让WM_定时器关闭WM_橡皮擦接地吗?您当前正在为计时器设置20毫秒的超时值,因此我认为颜色更改将非常快!你试过把它加长吗?正如Johnny暗示的那样,您没有向我们显示WM\u TIMER消息处理程序的代码,但我假设该部分是正确的。除了@CodyGray的注释外,我们还假设您在消息映射上有一个关于WM\u TIMER()的
    条目。