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。
步骤非常简单:
-
添加cmfcbutton类型的成员变量(控制类型)。说您将变量声明为
CMFCButton m_hButton2;
-
修改
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); }
上面的实现有助于我每秒逐渐增加颜色的Red
部分,几秒钟后(100秒左右)按钮将开始看起来红色。