天天看點

基于Dialog程式,啟動時不顯示主視窗,隻顯示子視窗的實作

在項目中有如下的一個需求:

軟體在網絡啟動狀态下顯示主視窗,而在單機狀态下隻顯示其子對話框(我的是無模式的).

在網上找了一天,各種辦法都似乎不太好,

不過晚上終于找到了一個不錯的解決辦法.

使得我很好的解決了這個問題.

基于Dialog程式,啟動時不顯示主視窗,隻顯示子視窗的實作

    if (theApp.m_bUnConnect)

基于Dialog程式,啟動時不顯示主視窗,隻顯示子視窗的實作

    {

基于Dialog程式,啟動時不顯示主視窗,隻顯示子視窗的實作

        CRecordDlg* dlg;

基于Dialog程式,啟動時不顯示主視窗,隻顯示子視窗的實作

        CWnd* m_pCWnd = this;

基于Dialog程式,啟動時不顯示主視窗,隻顯示子視窗的實作

        dlg = new CRecordDlg(m_pCWnd);

基于Dialog程式,啟動時不顯示主視窗,隻顯示子視窗的實作

        dlg->Create(IDD_DLG_RECORD,m_pCWnd);

基于Dialog程式,啟動時不顯示主視窗,隻顯示子視窗的實作

        dlg->ShowWindow(SW_SHOW); 

基于Dialog程式,啟動時不顯示主視窗,隻顯示子視窗的實作

        this->SetWindowPos(&wndTop,0,0,0,0,NULL);

基于Dialog程式,啟動時不顯示主視窗,隻顯示子視窗的實作

    } // if ()

基于Dialog程式,啟動時不顯示主視窗,隻顯示子視窗的實作

    else

基于Dialog程式,啟動時不顯示主視窗,隻顯示子視窗的實作
基于Dialog程式,啟動時不顯示主視窗,隻顯示子視窗的實作

       ShowWindow(SW_MAXIMIZE);

基于Dialog程式,啟動時不顯示主視窗,隻顯示子視窗的實作

    }

以上為我實作代碼.

實作主視窗隐藏的是SetWindowPos(),從代碼很容易了解出來,就是把主視窗的坐标設定為(0,0,0,0),也就是說把主視窗設定為一個點,并且點處于原點處.

其實是一種僞隐藏,可是它還是實作了隐藏,并且實作的效果相當不錯,沒有閃爍,也沒有副作用(至少現在沒有發現有).

不過要注意的是,無模式對話框關閉時候除了要DestroyWindow(),還需要PostQuitMessage(0);将主視窗給關閉掉,否則程式程序實際還在.

嘿嘿,實在是很不錯的解決方案,簡單有效.

繼續閱讀