关于OnShowWindow()
程序中,
CMainFrame中
初始化时,建立了两个定时器1和2
SetTimer(1,5*60*1000,NULL);
SetTimer(2,1*60*1000,NULL);
===================
CMainFrame -----成员 CmyDlg----非模式对话框
在OnCreate()中 new Cmydlg 这个对话框变量mydlg
然后mydlg.ShowWindow(SW_HIDE);将其隐藏
OnTimer()中
if(nIDEvent==1)
{
KillTimer(1);
mydlg.ShowWindow(SW_SHOW);
}
if(nIDEvent==2)
{
KillTimer(2);
mydlg.ShowWindow(SW_SHOW);
}
-----------------------------------
CMyDlg类中
有变量m_bOk,初始值FALSE;
对话框上有个编辑框,对应的成员CString m_stredit进行绑定
CMyDlg::OnShowWindow()
{
CDiglog::OnShowWindow();
if(m_bOk)
{
m_stredit="123";
}
else
{
m_stredit="234";
}
updatedata(false);
}
------------------------
这个程序大致想要得作用是:
在5分得时候,CMyDlg对话框上的编辑框显示123
在1分钟的时候,显示234
---------------------------
但实际的情况:
显示的一直是123
-------------------------
我先是怀疑:
CMainFrame中定时器2,没有成功
但是,通过写日志或单步跟踪,两个定时器都已经设置成功
在单步跟踪的过程中发现
当定时器1,即5分钟的时候,能进行CMyDlg::OnShowWindow 中进行单步调试
但是,当定时器2,即1分钟时候,却不能到CMyDlg::OnShowWindow 中单步调试
------------------
这里也没有什么差别,定时器1和2中 OnTimer()中的代码都一样
都调用了mydlg.ShowWindow(SW_SHOW);
那为什么定时器2执行mydlg.ShowWindow(SW_SHOW);
,不能再CMyDlg::OnShowWindow 中单步调试
附注:CMyDlg::OnShowWindow 中设有断点
----------------------
[解决办法]
当窗口show或hide时 都会OnShowWindow
[解决办法]
参考:
OnShowWindow( BOOL bShow, UINT nStatus );
参数: bShow 指定窗口是否要被显示。如果窗口要被显示,则为TRUE;如果窗口要被隐藏,则为FALSE。
nStatus 指定了要显示的窗口的状态。如果是因为调用ShowWindow成员函数而发出的消息,则为0;否则nStatus为下列值之一: · SW_PARENTCLOSING 父窗口正被关闭(变为图标)或弹出式窗口正被隐藏。
· SW_PARENTOPENING 父窗口正被打开(被显示)或弹出式窗口正被显示。 f
说明:
当CWnd对象要被显示或隐藏时,框架调用这个成员函数。当调用ShowWindow成员函数时,或者重叠窗口被最大化或复原,或者重叠式或弹出式窗口被关闭(变为图标)或打开(被显示)时,窗口被显示或隐藏。当重叠窗口被关闭时,所有的与此窗口相关的所有弹出窗口都被隐藏。
注意 框架调用这个成员函数以允许你的应用程序处理一个Windows消息。传递给你的成员函数的参数反映了接收到消息时框架接收到的参数。如果你调用了这个函数的基类实现,则该实现将使用最初传递给消息的参数(而不是你提供给这个函数的参数)。