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函数同样不相应,这是为十马??!!
18 个解决方案
#1
你的水平比我高!!
我帮你UP!
我帮你UP!
#2
无模式对话框又没有自己的消息循环,故此定时器无效
#3
但是主线程的消息循环为什么不把这个WM_TIMER分发给static呢?
#4
up
#5
呜呼,那怎么整?
#6
糕鱼昏这名字怎么这么耳熟?回忆ing...
#7
You can give me the source code.
rosement@sina.com
http://rosement.diy.163.com
rosement@sina.com
http://rosement.diy.163.com
#8
糕鱼昏,被五角飞碟收拾者也。
#9
定時器是無法在非模式得對話框裡面運行得.
但是你可以在非模式得上一層設置OnTimer..然後用指正傳遞到你的裡面
但是你可以在非模式得上一層設置OnTimer..然後用指正傳遞到你的裡面
#10
>但是你可以在非模式得上一層設置OnTimer..然後用指正傳遞到你的裡面
教我,我不认识繁体字。
教我,我不认识繁体字。
#11
我是这么想的,模式对话框有他自己的消息循环,他是你定义那个类的窗口的父窗口,所以在模式下,你的程序正确,但在非模式下时,该对话框,已没有了自己的消息循环,所以,你的static里的ontimer消息已传到了,你整个程序的主窗口,而你并没有处理。
我只是这么想,我水平不高
我只是这么想,我水平不高
#12
to iProgram(小癞蛤蟆):
你也看《童话大王》吗?
你也看《童话大王》吗?
#13
小时候看,郑猿截呵呵。
to chinaren_shibo:
那我该如何做呢?
难道只有我一个人需要在非模式对话框里使用定时器?如何在非模式对话框里使用定时器?
to chinaren_shibo:
那我该如何做呢?
难道只有我一个人需要在非模式对话框里使用定时器?如何在非模式对话框里使用定时器?
#14
诸位:有没有搞错!
我做过的,目的是用一个非模式对话框模仿CDialogBar,在OnInitDialog()设置定时器,OnDestroy()中销毁,完全可以用。
如果照诸位讲的没有消息循环,OnPaint,OnDestroy,OnSetcursor,OnCreat不都没法用了?怎么会没有消息?
我做过的,目的是用一个非模式对话框模仿CDialogBar,在OnInitDialog()设置定时器,OnDestroy()中销毁,完全可以用。
如果照诸位讲的没有消息循环,OnPaint,OnDestroy,OnSetcursor,OnCreat不都没法用了?怎么会没有消息?
#15
hehe,很奇怪,我就在非模里用ontimer呀,一点问题都没有的
#16
是的,搞错乐,不是非模式对话框的原因,是OnTimer没有在SetTimer后正常启动,奇怪,研究ing...
相关:http://www.csdn.net/Expert/TopicView1.asp?id=949731
相关:http://www.csdn.net/Expert/TopicView1.asp?id=949731
#17
而且我还有一个CStatic派生的滚动字幕控件,在控件里面OnTimer,控件放在非模对话框里,也没有问题
#18
突然想到一个问题,你的OnTimer是用ClassWizard加的还是你自己手写的?
定义的时候是用afx_msg void OnTimer(UINT nIDEvent);吗
定义的时候是用afx_msg void OnTimer(UINT nIDEvent);吗
#1
你的水平比我高!!
我帮你UP!
我帮你UP!
#2
无模式对话框又没有自己的消息循环,故此定时器无效
#3
但是主线程的消息循环为什么不把这个WM_TIMER分发给static呢?
#4
up
#5
呜呼,那怎么整?
#6
糕鱼昏这名字怎么这么耳熟?回忆ing...
#7
You can give me the source code.
rosement@sina.com
http://rosement.diy.163.com
rosement@sina.com
http://rosement.diy.163.com
#8
糕鱼昏,被五角飞碟收拾者也。
#9
定時器是無法在非模式得對話框裡面運行得.
但是你可以在非模式得上一層設置OnTimer..然後用指正傳遞到你的裡面
但是你可以在非模式得上一層設置OnTimer..然後用指正傳遞到你的裡面
#10
>但是你可以在非模式得上一層設置OnTimer..然後用指正傳遞到你的裡面
教我,我不认识繁体字。
教我,我不认识繁体字。
#11
我是这么想的,模式对话框有他自己的消息循环,他是你定义那个类的窗口的父窗口,所以在模式下,你的程序正确,但在非模式下时,该对话框,已没有了自己的消息循环,所以,你的static里的ontimer消息已传到了,你整个程序的主窗口,而你并没有处理。
我只是这么想,我水平不高
我只是这么想,我水平不高
#12
to iProgram(小癞蛤蟆):
你也看《童话大王》吗?
你也看《童话大王》吗?
#13
小时候看,郑猿截呵呵。
to chinaren_shibo:
那我该如何做呢?
难道只有我一个人需要在非模式对话框里使用定时器?如何在非模式对话框里使用定时器?
to chinaren_shibo:
那我该如何做呢?
难道只有我一个人需要在非模式对话框里使用定时器?如何在非模式对话框里使用定时器?
#14
诸位:有没有搞错!
我做过的,目的是用一个非模式对话框模仿CDialogBar,在OnInitDialog()设置定时器,OnDestroy()中销毁,完全可以用。
如果照诸位讲的没有消息循环,OnPaint,OnDestroy,OnSetcursor,OnCreat不都没法用了?怎么会没有消息?
我做过的,目的是用一个非模式对话框模仿CDialogBar,在OnInitDialog()设置定时器,OnDestroy()中销毁,完全可以用。
如果照诸位讲的没有消息循环,OnPaint,OnDestroy,OnSetcursor,OnCreat不都没法用了?怎么会没有消息?
#15
hehe,很奇怪,我就在非模里用ontimer呀,一点问题都没有的
#16
是的,搞错乐,不是非模式对话框的原因,是OnTimer没有在SetTimer后正常启动,奇怪,研究ing...
相关:http://www.csdn.net/Expert/TopicView1.asp?id=949731
相关:http://www.csdn.net/Expert/TopicView1.asp?id=949731
#17
而且我还有一个CStatic派生的滚动字幕控件,在控件里面OnTimer,控件放在非模对话框里,也没有问题
#18
突然想到一个问题,你的OnTimer是用ClassWizard加的还是你自己手写的?
定义的时候是用afx_msg void OnTimer(UINT nIDEvent);吗
定义的时候是用afx_msg void OnTimer(UINT nIDEvent);吗