本文簡單介紹一下VC中基于對話框的程序啟動后的自動隱藏技術。
有的程序需要在啟動后立即隱藏主窗口,只在系統托盤區域顯示一個圖標,這常見于很多后臺服務程序。對于基于對話框的程序,要實現此功能需要一點技巧。
該技術的關鍵點在于,需要使用非模態對話框,而不是默認的模態對話框。模態對話框的DoModal()事實上執行了對話框的創建、顯示、消息循環等一系列過程。我們這里要做的就是把這個過程重現,并控制中間的顯示過程來達到我們隱藏主窗口的目的。現實起來非常簡單,我們只需要把CXXXApp中的InitInstance()函數中默認的對話框顯示代碼:
BOOL CXXXApp::InitInstance()
{
//
其它代碼
// 主窗口對話框實例
CXXXDlg dlg;
m_pMainWnd = &dlg;
// 模態對話框
dlg.DoModal();
return FALSE;
}
改變為如下代碼即可,其它地方的代碼完全不用修改:
BOOL CXXXApp::InitInstance()
{
//
其它代碼
// 主窗口對話框實例
CXXXDlg dlg;
m_pMainWnd = &dlg;
// 非模態對話框
dlg.Create(CXXXDlg::IDD);
dlg.DoSomethingBeforeMsgLoop(); // 可以在此函數隱藏窗口及執行其它操作
dlg.RunModalLoop();
return FALSE;
}
在上面的代碼中,可以在DoSomethingBeforeMsgLoop()函數中使用ShowWindow()來隱藏窗口,同時還可以執行其它一些操作,也可以直接在DoSomethingBeforeMsgLoop()函數調用處調用ShowWindow()函數來隱藏窗口。
也有人提出了其它方法。比如仍然使用模態對話框,但使用計數器設定很短一個時間來觸發事件,并在處理該計數器事件中隱藏窗口。該方法可行,但太麻煩,沒有上面的方法方便。
posted on 2010-01-26 22:33
zhaoyg 閱讀(1473)
評論(0) 編輯 收藏 引用 所屬分類:
MFC學習筆記