奇怪的是:我有一个用WS_EX_OVERLAPPEDWINDOW | WS_EX_COMPOSITED
扩展样式创建的窗口。在WM_SIZE
上我使用SetTimer
创建(或重置)一个计时器,在调整大小时暂停100毫秒后调用绘制函数(帮助平滑调整大小。)
这工作正常,但我注意到如果我删除WS_EX_COMPOSITIED
样式,我的计时器突然停止工作!咦?我已经确认正在调用SetTimer
,但我从未尝试过回调函数。把风格重新放回去,一切都很开心。
我有一种感觉,我在这里遗漏了一些东西。还有其他人经历过这个吗?
Windows 7,64位(如果重要的话。)
答案 0 :(得分:0)
我有Win 7 x64,看起来它对我有用。无论如何,你可以在这里发布一些小片段,也许它会分享一些问题。
class CMainWindow : public CWindowImpl<CMainWindow, CWindow, CFrameWinTraits>
{
public:
DECLARE_WND_SUPERCLASS(_T("CMainWindow"), CWindow::GetWndClassName())
BEGIN_MSG_MAP(CMainWindow)
MSG_WM_SIZE(OnSize)
MSG_WM_TIMER(OnTimer)
END_MSG_MAP();
VOID OnSize(UINT, CSize)
{
m_timerId = SetTimer((UINT_PTR)this, 100);
}
VOID OnTimer(UINT_PTR)
{
KillTimer(m_timerId);
CDCHandle dc = GetDC();
Draw(dc);
}
VOID Draw(HDC hDC)
{
CDCHandle dc(hDC);
CRect objClientRect;
GetClientRect(objClientRect);
dc.FillSolidRect(objClientRect, RGB(0, 255, 0));
}
private:
UINT_PTR m_timerId;
};
int main(HINSTANCE hInstance, HINSTANCE, LPSTR, int)
{
_Module.Init(0, hInstance, 0);
CMainWindow wnd;
wnd.Create(NULL, CWindow::rcDefault, _T("Hello world"));
wnd.ShowWindow(SW_SHOW);
CMessageLoop loop;
_Module.AddMessageLoop(&loop);
int res = loop.Run();
_Module.Term();
return 0;
}