更改计时器上的窗口背景颜色



im试图弄清楚如何每秒更改按钮的背景颜色很难。从一种颜色转到另一种颜色。这就是我创建按钮的方式。或者,如果可能的话,可能如何更改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;
}

按钮似乎是chagne颜色,但它是Quickl。我不确定如何解决此问题。

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

步骤非常简单:

  1. 添加cmfcbutton类型的成员变量(控制类型)。说您将变量声明为CMFCButton m_hButton2;

  2. 修改OnInitDialog()功能并添加以下行:

    m_hButton2.m_nFlatStyle = CMFCButton::BUTTONSTYLE_NOBORDERS;
    m_hButton2.m_bTransparent = false;
    SetTimer(255, 1000, NULL);
    
  3. 实现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);
     }
    

上面的实现有助于我每秒逐渐增加颜色的Red部分,几秒钟后(100秒左右)按钮将开始看起来红色。

相关内容

  • 没有找到相关文章

最新更新