隱藏基於對話方塊的MFC應用程式視窗的方法

2021-07-23 08:01:54 字數 2284 閱讀 8258

很多人可能會將視窗建立出來,然後用乙個 showwindow(sw_hide) 的方法去隱藏視窗,當然這是可以做到隱藏的功能,但是有一點不足的地方就是視窗在隱藏之前會有一下短瞬的閃爍,而以下這種方法可以解決這種問題:

c***dlg dlg;

m_pmainwnd = &dlg;

int nresponse = dlg.domodal();

if (nresponse == idok)

else if (nresponse == idcancel)

// since the dialog has been closed, return false so that we exit the

return false;

換成:

c***dlg *dlg = new c***dlg;

m_pmainwnd = dlg;

return dlg->create(idd_***_dialog);

同時將 idd_***_dialog 的對話方塊資源的 "more stytles" 屬性頁的 visible 屬性的勾去掉即可。這是我認為最簡單的一種方法,還有另外一種方法,就是在工作區的資源選單中插入乙個新的對話方塊,然後用 classwizard 新建乙個與之對應的類, 而下面

c***dlg *dlg = new c***dlg;

m_pmainwnd = dlg;

return dlg->create(idd_***_dialog);

這裡的c***dlg和idd_***_dialog改為與你新建的對話方塊的對應即可,方法的原理與上面的一樣,只是麻煩了一點點而已.

1) 最簡單的方法是從網上的找到的,可行,好用

cmainframe::activeframe()    

因為 mfc 有兩個步驟來顯示 sdi 主視窗, 所有必須在這兩個地方都 sw_hide, 否則就會閃動。即便 hwnd 沒有 ws_visible 屬性, 用showwindow(sw_show) 還是可以顯示該 hwnd 的, 所以vcbear的方法有問題。這裡的activeframe函式可以在classwizard中新增.

2)第二種方法則相對繁瑣得多

第一步,將cmainframe的建構函式改為public屬性(預設是protected的)

csingledoctemplate* pdoctemplate;

pdoctemplate = new csingledoctemplate(

idr_mainframe,

runtime_class(ctesthidedoc),

runtime_class(cmainframe), // main sdi frame window

runtime_class(ctesthideview));

adddoctemplate(pdoctemplate);

// parse command line for standard shell commands, dde, file open

ccommandlineinfo cmdinfo;

parsecommandline(cmdinfo);

// dispatch commands specified on the command line

if (!processshellcommand(cmdinfo))

return false;

// the one and only window has been initialized, so show and update it.

m_pmainwnd->showwindow(sw_show);

m_pmainwnd->updatewindow();

換成以下的**:

m_pmainwnd = new cmainframe();

bool bret = ((cmainframe *)m_pmainwnd)->loadframe(idr_mainframe);

if (bret)

else

}

這樣子編繹出來的程式執行時便不會有主視窗。

縱觀上面的隱藏視窗的方法,除了使用showwindow(sw_hide)的方法之外,其實都是將程式中m_pmainwnd指標換一下面目,原來是正常顯示的,就改為不顯示,或者用其它的對話方塊或者自身新建乙個不同類別的框架指標.

return cwinthread::run();

}呵呵,原來只要 m_pmainwnd 不為 null, 則主線程就可以轉起來.至此,所有的問題就迎刃而解。

隱藏基於對話方塊程式

定義托盤響應訊息 define wm systray wm user 120 在標頭檔案中定義變數 windowplacement m wp 以便在恢復時使用 notifyicondata m tmid 托盤結構 crect m rectwnd 儲存視窗區域 在初始化函式中加入 getwindowr...

MFC基於對話方塊程式

001 020 else if nresponse idcancel 如果對話方塊是用取消來關閉的,則 021 025 026 由於對話方塊已關閉,所以將返回 false 以便退出應用程式,027 而不是啟動應用程式的訊息幫浦。028 return false 029 因為initinstance ...

mfc對話方塊隱藏

有很多應用程式要求一起動就隱藏起來,這些程式多作為後台程式執行,希望不影響其他視窗,往往只在托盤區顯示乙個圖示。這些程式通常都是對話方塊程式,而對話方塊在初始化的過程上與sdi mdi的初始化是不同的,對話方塊只需要domodule或者是createdialog等等對話方塊函式呼叫一次便可,sdi ...