很多人可能會將視窗建立出來,然後用乙個 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;同時將 idd_***_dialog 的對話方塊資源的 "more stytles" 屬性頁的 visible 屬性的勾去掉即可。這是我認為最簡單的一種方法,還有另外一種方法,就是在工作區的資源選單中插入乙個新的對話方塊,然後用 classwizard 新建乙個與之對應的類, 而下面m_pmainwnd = dlg;
return dlg->create(idd_***_dialog);
c***dlg *dlg = new c***dlg;這裡的c***dlg和idd_***_dialog改為與你新建的對話方塊的對應即可,方法的原理與上面的一樣,只是麻煩了一點點而已.m_pmainwnd = dlg;
return dlg->create(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 ...