Visual c++ 更改计时器上的窗口背景色
我很难想出如何改变按钮的背景色每秒钟。从一种颜色到另一种颜色。 这就是我创建按钮的方式。或者,如果可能,您如何在onPaint之外更改HWND实例的颜色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
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 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()的条目。