介紹
在 VCKBASE Online Journal 第21期中,NorthTibet 寫了“如何隱藏顯示在任務欄中的對話框程序”一文,頗為巧妙,而且非常好用,唯一不爽的是有點麻煩。踩在他的肩膀上,我找到了一個比較簡單的方法。
實現
隱藏這個Main Dialog的思路就是把這個Dialog看成一個子窗口,然後再把WS_EX_APPWINDOW屬性去掉。
WS_EX_APPWINDOW不大常用,MSDN的解釋是:
Forces a top-level window onto the taskbar when the window is visible.
把頂層的並且可見的窗口放到任務欄上,移除 WS_EX_APPWINDOW 很容易:
ModifyStyleEx(WS_EX_APPWINDOW, 0);
就可以了。
那麼什麼辦法能夠最簡單的實現創建一個父窗口呢?CFrameWnd 就有點笨了,干脆就用自己好了。在
BOOL CHideApp::InitInstance()中:
CHideDlg dlgParent;
dlgParent.Create(IDD_HIDE_DIALOG);
dlgParent.ShowWindow(SW_HIDE);
//dlgParent.ShowWindow(SW_SHOW);
CHideDlg dlg(&dlgParent);
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
dlgParent.DestroyWindow();
在BOOL CHideDlg::OnInitDialog()中:
this->ModifyStyleEx(WS_EX_APPWINDOW, 0);
只短短幾行,就實現了對話框在任務欄的隱藏。
結束語
如果使用 CDialog 的話,ALT+TAB 圖標就不對了:) 之前我也試過用 CWnd,可恨的是它還要去注冊窗口類,相比之下還是CHideDlg 最經濟,你說呢?祝大家身體健康,每天都有新發現!
E-Mail : [email protected] QQ : 923452
本文配套源碼