首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

关于OnShowWindow(),该怎么解决

2014-05-27 
关于OnShowWindow()程序中,CMainFrame中初始化时,建立了两个定时器1和2SetTimer(1,5*60*1000,NULL)SetTim

关于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消息。传递给你的成员函数的参数反映了接收到消息时框架接收到的参数。如果你调用了这个函数的基类实现,则该实现将使用最初传递给消息的参数(而不是你提供给这个函数的参数)。

热点排行