改变窗口背景颜色在计时器
问题描述:
我试图弄清楚如何每秒更改一个按钮的背景色。从一种颜色转到另一种颜色。 这是我如何创建我的按钮。或者如果可能的话,你怎么能改变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 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秒左右)按钮将开始寻找红色。
难道你不想让WM_TIMER关闭WM_ERASEBKGND吗? [使用计时器](https://msdn.microsoft.com/en-us/library/windows/desktop/ms644901(v = vs.85).aspx) –
您当前正在将超时值设置为20毫秒你的计时器,所以我应该认为颜色的变化*会很快!你有没有试图延长这一点?正如约翰尼暗示的那样,您不会向我们展示您的WM_TIMER消息处理程序的代码,但我认为该部分是正确的。 –
除了@CodyGray的评论,我们还假设你在你的消息映射中有一个'ON_WM_TIMER()'条目。 – sergiol