MFCVC模態主對話方塊程式隱藏到托盤的終極解決方案

2021-05-28 07:54:00 字數 1274 閱讀 4451

我們很多的專案僅僅需要最簡單的mfc對話方塊程式就可以了,但是最近的乙個專案中需要將基於主對話方塊程式的專案在程式啟動的時候最小化,僅僅需要在托盤中操作隱藏和恢復。

功能需求:1. mfc主對話方塊程式,開機隱藏主視窗2. 不能有閃爍(有的方案在開機有一瞬間閃爍,然後消失)3. 工作列不能有圖示(預設的對話方塊工作列裡頭有圖示出現)4. 在托盤中能夠完美恢復被隱藏的對話方塊

常規方法中,主對話方塊的隱藏僅僅是showwindow或者設定屬性不可見都是不行的。網路上搜尋了一番,也能見到一些解決方案,但是因為本人的專案中用到了其他的ui庫,比如有的方法需要響應ncpaint,在畫程式邊框之前的訊息中隱藏主視窗,但是本人的程式中無法接受此訊息,有人提出用movewindow(0,0,0,0)解決,但本人的程式規定了最小大小;等等原因就不一一枚舉了,最後還是讓我找到了相對完美的解決方案,此方案綠色環保無公害,值得推薦。原理:通過movewindow函式,將主對話方塊引動到toppoint(0,0)之外,即顯示螢幕之外就行了。道理就是這麼簡單,這樣做的唯一麻煩之處就是,因為要頻繁的切換主對話方塊隱藏位置,需要記錄上一次的主對話方塊正確的可視位置。並且隨著對話方塊的大小位置改變都要記錄此位置。下面逐步介紹重要的步驟和**:1. 2個重要的函式void cmodedlghidedlg::hidemaindlg()

void cmodedlghidedlg::restoremaindlg()

sendmessage(wm_size);

setforegroundwindow();

}可以在對話方塊初始化函式中呼叫hidemaindlg函式,在需要恢復原狀的地方呼叫restoremaindlg:traymessage(nim_add);

this->centerwindow();

hidemaindlg();

bool cmodedlghidedlg::traymessage( dword dwflag, uint uiconid)

lresult cmodedlghidedlg::windowproc(uint message, wparam wparam,lparam lparam)

else if(lparam==wm_rbuttondown)

break; 

}return cdialog::windowproc(message, wparam, lparam);

}2. 在onsize和oncancel處加上適宜的**:

void cmodedlghidedlg::onsize(uint ntype, int cx, int cy)

}void cmodedlghidedlg::oncancel()

模態對話方塊 非模態對話方塊 標準對話方塊 檔案對話方塊

模態對話方塊 qdialog 非模態對話方塊 qdialog 標準對話方塊 關於對話方塊 問題對話方塊等 qmessagebox 檔案對話方塊 qfiledialog 標準對話方塊還有 qcolordialog 選擇顏色 qfiledialog 選擇檔案或者目錄 qfontdialog 選擇字型 q...

模態對話方塊與非模態對話方塊

1.對話方塊分類 按工作方式不同,可將對話方塊分成兩類 模態對話方塊 modal 在關閉模態對話方塊之前,程式不能進行其他工作 如一般的 開啟檔案 對話方塊 非模態對話方塊 modeless 非模態對話方塊開啟後,程式仍然能夠進行其他工作 如一般的 查詢與替換 對話方塊 2.對話方塊建立 模態對話方...

模態對話方塊和非模態對話方塊

模態對話方塊和非模態對話方塊的區別 在這裡我就說的比較通俗易懂了,就是當你開啟乙個模態對話方塊時,你的焦點不能轉移到程式的其他視窗上,也就是你只能先響應模態對話方塊,才能進行成下面的操作。而非模態對話方塊則相反,你可以不用管它,照常能夠將其他視窗啟用。建立模態對話方塊,主要是應用對話方塊的domod...