實現VC程序啓動時最小化到任務欄(完美解決閃爍問題)

之前寫的一個VC應用程序,是程序啓動時就直接出現在任務欄,

窗體不出現,等用戶點擊任務欄圖標再出現窗口。和一些防火牆什麼的軟件類似。

這種效果實現並不是很困難的,硬是找不到最好的。爲什麼呢?

首先,在網絡上找到的大部分說法都是:

BOOL CBBBApp::InitInstance()
{
  ...
m_pMainWnd
->ShowWindow(SW_HIDE); // 原來是m_pMainWnd->ShowWindow(SW_SHOW);
....
}

這樣雖然可以實現效果,但是會在啓動瞬間快速顯示一下窗口,然後再隱藏。給人一種閃爍一下的感覺,

然後繼續在網上找,有些人建議可以先把窗口設成1X1大小,然後再點擊顯示的時候再還原成原來大小。但是不知道爲什麼我的程序做不到,調了1X1但是窗口大約有200x200大小(

終於在今晚找到了最好的解決方法:

首先在CBBBApp::InitInstance()去掉m_pMainWnd->ShowWindow(SW_SHOW);  這樣窗口就不會出現

然後在CMainFrame::OnCreate中加上AfxGetApp()->m_nCmdShow   =   SW_HIDE;   

  int   CMainFrame::OnCreate(LPCREATESTRUCT   lpCreateStruct)   
  
{   
          
if   (CFrameWnd::OnCreate(lpCreateStruct)   ==   -1)   
                  
return   -1;   
          AfxGetApp()
->m_nCmdShow   =   SW_HIDE;   
  ........   
          
return   0;   
  }
   

好了,終於可以完美解決這個閃爍的問題了。

PS:任務欄圖標使用的TrayIcon.cpp類,又是另外的話題了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章