我无法确定如何每秒更改按钮的背景颜色。从一种颜色到另一种颜色。 这就是我创建My Button的方式。或者如果可能的话,你怎么能改变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;
}
这个按钮似乎有颜色,但它要快速。我不知道如何解决这个问题。
答案 0 :(得分:1)
如果您使用的是MFC,我更喜欢在这种情况下使用CMFCButton
。
步骤非常简单:
添加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秒左右)按钮将开始显示红色。