我做了一个CStatic派生类,用定时器每隔100ms重画窗口,加上了定时器:
BEGIN_MESSAGE_MAP(CGradientbar, CStatic)
//{{AFX_MSG_MAP(CGradientbar)
ON_WM_PAINT()
ON_WM_TIMER()
//}}AFX_MSG_MAP
END_MESSAGE_MAP() void CGradientbar::OnTimer(UINT nIDEvent)
{
//。
MessageBox("Test");
}void CGradientbar::Start()
{
////////.............................
SetTimer(0,100,NULL);}
把一个Static资源加到对话框CTestDlg中,用Classwizard声明为CGradientbar类对象,奇怪的是,CTestDlg作为模式对话框使用时,一切正常:
CTestDlg dlg;
dlg.DoModal(); //在dlg的initdlg中调用CGradientbar::Start()但是将CTestDlg作为非模式对话框使用时,就无法进入OnTimer函数:
CTestDlg dlg;
dlg.Create(IDD_DIALOG_TEST);
dlg.ShowWindow(SW_SHOW);
经调试已经运行Start()的SetTimer函数,但是OnTimer就是不相应。
随后在SetTimer函数后加上MessageBox("Test2")后,就可以相应OnTimer函数,靠见鬼了。我又试了试在CtestDlg中使用定时器,同样结果,如果对话框是非模式对话框的话,对话框映射的OnTimer函数同样不相应,这是为十马??!!
BEGIN_MESSAGE_MAP(CGradientbar, CStatic)
//{{AFX_MSG_MAP(CGradientbar)
ON_WM_PAINT()
ON_WM_TIMER()
//}}AFX_MSG_MAP
END_MESSAGE_MAP() void CGradientbar::OnTimer(UINT nIDEvent)
{
//。
MessageBox("Test");
}void CGradientbar::Start()
{
////////.............................
SetTimer(0,100,NULL);}
把一个Static资源加到对话框CTestDlg中,用Classwizard声明为CGradientbar类对象,奇怪的是,CTestDlg作为模式对话框使用时,一切正常:
CTestDlg dlg;
dlg.DoModal(); //在dlg的initdlg中调用CGradientbar::Start()但是将CTestDlg作为非模式对话框使用时,就无法进入OnTimer函数:
CTestDlg dlg;
dlg.Create(IDD_DIALOG_TEST);
dlg.ShowWindow(SW_SHOW);
经调试已经运行Start()的SetTimer函数,但是OnTimer就是不相应。
随后在SetTimer函数后加上MessageBox("Test2")后,就可以相应OnTimer函数,靠见鬼了。我又试了试在CtestDlg中使用定时器,同样结果,如果对话框是非模式对话框的话,对话框映射的OnTimer函数同样不相应,这是为十马??!!
[email protected]
http://rosement.diy.163.com
但是你可以在非模式得上一層設置OnTimer..然後用指正傳遞到你的裡面
你也看《童话大王》吗?
那我该如何做呢?难道只有我一个人需要在非模式对话框里使用定时器?如何在非模式对话框里使用定时器?
我做过的,目的是用一个非模式对话框模仿CDialogBar,在OnInitDialog()设置定时器,OnDestroy()中销毁,完全可以用。
如果照诸位讲的没有消息循环,OnPaint,OnDestroy,OnSetcursor,OnCreat不都没法用了?怎么会没有消息?
定义的时候是用afx_msg void OnTimer(UINT nIDEvent);吗