1. 程式人生 > >MFC中基於對話方塊的程式啟動後自動隱藏

MFC中基於對話方塊的程式啟動後自動隱藏

本文簡單介紹一下VC中基於對話方塊的程式啟動後的自動隱藏技術。

有的程式需要在啟動後立即隱藏主視窗,只在系統托盤區域顯示一個圖示,這常見於很多後臺服務程式。對於基於對話方塊的程式,要實現此功能需要一點技巧。

該技術的關鍵點在於,需要使用非模態對話方塊,而不是預設的模態對話方塊。模態對話方塊的DoModal()事實上執行了對話方塊的建立、顯示、訊息迴圈等一系列過程。我們這裡要做的就是把這個過程重現,並控制中間的顯示過程來達到我們隱藏主視窗的目的。現實起來非常簡單,我們只需要把CXXXApp中的InitInstance()函式中預設的對話方塊顯示程式碼:
BOOL CXXXApp::InitInstance()
{
// 其它程式碼

// 主視窗對話方塊例項
CXXXDlg dlg;
m_pMainWnd = &dlg;

// 模態對話方塊
dlg.DoModal();


return FALSE;
}

改變為如下程式碼即可,其它地方的程式碼完全不用修改:

BOOL CXXXApp::InitInstance()
{
// 其它程式碼

// 主視窗對話方塊例項
CXXXDlg dlg;
m_pMainWnd = &dlg;

// 非模態對話方塊
dlg.Create(CXXXDlg::IDD);
dlg.DoSomethingBeforeMsgLoop (); // 可以在此函式隱藏視窗及執行其它操作
dlg.RunModalLoop();

return FALSE;
}

在上面的程式碼中,可以在DoSomethingBeforeMsgLoop()函式中使用ShowWindow()來隱藏視窗,同時還可以執行其它一些操作,也可以直接在DoSomethingBeforeMsgLoop()函式呼叫處呼叫ShowWindow()函式來隱藏視窗。

也有人提出了其它方法。比如仍然使用模態對話方塊,但使用計數器設定很短一個時間來觸發事件,並在處理該計數器事件中隱藏視窗。該方法可行,但太麻煩,沒有上面的方法方便。

相關推薦

MFC基於對話方塊程式啟動自動隱藏

本文簡單介紹一下VC中基於對話方塊的程式啟動後的自動隱藏技術。 有的程式需要在啟動後立即隱藏主視窗,只在系統托盤區域顯示一個圖示,這常見於很多後臺服務程式。對於基於對話方塊的程式,要實現此功能需要一點技巧。 該技術的關鍵點在於,需要使用非模態對話方塊,而不是預設的模態對話方

MFC基於對話方塊程式啟動隱藏視窗的實現

對於基於對話方塊的MFC程式,如果想要程式啟動時就隱藏主視窗,無法在該對話方塊類的OnInitialDialog()函式中實現隱藏視窗的功能。但是,可以通過對話方塊程式響應WM_WINDOWPOSCHANGING訊息來實現隱藏視窗的功能。 1 OnInitialDialog

MFC基於對話方塊程式選單欄不更新

環境:win10,vs2017 問題描述: 為mfc對話方塊程式添加了一個托盤選單,但這個托盤選單不響應ON_UPDATE_COMMAND_UI訊息, 並且設定選單項的勾選(SetCheck)時,可以通過程式碼觀察到勾選成功,但選單欄顯示的勾選狀態依然不變。 經過幾天的百度,終於發現

MFC-10】VS2010/MFC基於對話方塊程式的登入視窗實現

一、開發環境 1、VS2010; 2、C++ / MFC; 二、登入視窗設計示例 1、新建基於對話方塊的MFC專案,命名為“UserLogin”; 2、資源檢視中插入一個Dialog,修改ID為:IDD_LOGIN_DIALOG,標題修改為登入對話方塊,並新增控制元

MFC對話方塊程式啟動的時候直接隱藏、在工作列不顯示圖示

2011-06-19 以前做一個專案,要求程式啟動的時候主對話方塊是隱藏的。當時不知道怎麼做,修改視窗風格、視窗類、OnInitDialog裡ShowWindow、Create函式、WM_CREATE訊息、PreCreateWindow等等都嘗試了,沒什麼用,相當鬱悶。後來有

再探MFC(一)基於對話方塊MFC應用程式專案框架

大學畢設時學的MFC,工作頭一年還用的MFC,之後再也用不到了.當時買的MFC書籍早就束之高閣了.現在需要開發一個簡單的桌面程式,於是我又把MFC撿起來.MFC早已過時,不過如果開發簡單的Windows桌面應用,MFC不失為一個簡單的選擇.再撿起MFC,充滿了對大學和逝去的

MFC基於對話方塊的視窗置底

環境:win10,vs2017 之前發過一篇視窗置底的文章,最近找到了一種新的方法,感覺效果更好一點。 思路就是,將自己程式的父視窗設為桌面,程式就會嵌入到桌面內部,便可實現置頂。 程式碼如下 將置底部分新增到OnInitDialog函式裡面: BOOL CDesktopEv

MFC修改對話方塊、編輯框、button按鈕背景色

一、修改對話方塊背景色: 1、為目標對話方塊新增WM_CTRCOLOR訊息; 2、位目標Dlg類定義一個CBrush型別的私有成員變數:m_brushBg,並在其建構函式中將此畫刷初始為 一個淡藍色畫刷(畫刷顏色可任意修改):m_brushBg.CreateSolidBru

MFC模態對話方塊程式不響應OnIdle

從程式碼分析原因吧: OnIdle函式在MFC的CWinThread::Run函式中被呼叫,如下 // main running routine until thread exits int CWinThread::Run() { ASSERT_VALID(this); _AFX_THRE

在VC6.0安裝對話方塊程式開發嚮導

上一篇文章中我介紹了在VC6.0中開發訊息框,以後我將介紹如何開發如:計算器 音樂播放器  Windows優化大師 等更加實用的程式 在此之前,你的VC6.0中必須安裝 DlgBasedApplica

bat如何等某個程式啟動再執行其他程式

大概思路 每個5秒鐘去查詢程序中是否存在某程序,存在則執行其他程式,否則等待 具體程式碼可參照: set status=false :TaskXXX for /f "delims= " %%i in ('tasklist') do ( if "%%i"=="TaskXXX

關於hbase分散式環境遇到的問題---HMaster 啟動自動關閉

最近在搭建hbase分散式環境中遇到的問題,出現這個問題我也去網上參考別人是怎麼解決的,但是沒有解決我的問題,我不斷的去看日誌為什麼會出現這個,後來我發現日誌不斷提示異常,我就想是不是和這個有關係,嘗試了一下,解決了我的問題,話不多說,先上日誌:2018-03-26 21:3

基於對話方塊MFC程式啟動時完全隱藏的簡單方法

如果想基於對話方塊的MFC程式在啟動時就完全隱藏,只在托盤顯示一個圖示,有很多方法可實現,但效果都不理想,總是可以看到對話方塊一閃而過的痕跡。有沒有一個方法徹底的將其隱藏呢,答案是肯定的。這兒有一個簡單的方法實現,效果非常理想,並且只需兩步即可實現。 1.首先要用到的是Mo

基於對話方塊MFC程式,實現非模態子視窗在工作列顯示圖示以及視窗左上角加圖示

在基於對話方塊的MFC程式中為了使子視窗同父視窗一樣在工作列顯示圖示,並且在子視窗最小化時可以在工作列顯示圖示,可以在子視窗的OnInitDialog函式中呼叫函式ModifyStyleEx進行修改視窗的樣式實現具體程式碼為: ModifyStyleEx(WS_EX_TOO

MFC對話方塊程式當滑鼠移動到控制元件上改變形狀

處理父視窗的WM_SETCURSOR訊息:      BOOL   CYourDlg::OnSetCursor(CWnd*   pWnd,   UINT   nHitTest,   UINT   message)        {          //   TODO:   Add   your   me

MFC對話方塊程式使用OpenGL

        在MFC的對話方塊程式中需要使用OpenGL在某個對話方塊中作圖,綜合了網上的兩篇文章的內容(文章一,文章二),也有自己的心得體會。         首先需要配置好opengl的環境,程式中會使用到glaux中的庫和函式,這裡將它的lib,h,dll檔案的下

基於對話方塊MFC動態的新增對話方塊

        在Dialog類中新增兩個私有成員變數m_imagelist,m_toolbar,型別如下CImageList,CToolBar      在OnInitDlalog方法中新增如下程式

MFC介面程式設計基礎(10):基於對話方塊MFC應用程式

上一篇:MFC介面程式設計基礎(09):選單(二) 下一篇:MFC介面程式設計基礎(11):靜態文字框、命令按鈕和編輯框 MFC程式設計 MFC 是 Visual C++ 的核心。雖然在 Windows 應用程

MFC-8】VS2010更改基於對話方塊MFC程式標題欄圖示和生產的執行檔案的圖示

一、開發環境 1、VS2010; 2、C++ / MFC; 二、更改步驟 1)建立一個新工程,可以什麼都不加。開啟“資源檢視”, 右鍵點選專案名稱,選擇“新增資源”,匯入“Icon”資原始檔(事先準備好); 2)修改上一步加入的“Icon”資源屬性ID為“IDI_IC

1.3 基於對話方塊MFC應用程式例項

MFC的全程是“Microsoft Foundation Classes”(微軟基礎類庫),是微軟為了簡化Windows下應用程式的編寫而提供的一個框架。MFC對基本API做了封裝,並提供了數量眾多的C++封裝類。在程式設計時使用MFC,雖然會降低少許執行效率,