1. 程式人生 > >MFC基於對話方塊程式啟動時隱藏視窗的實現

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

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

1 OnInitialDialog()函式

OnInitialDialog()函式是CDialog類的成員函式,該函式用來響應WM_INITDIALOG訊息的。當呼叫CDialog類的Create()CreateIndirect()DoModal()函式時,都會向對話方塊傳送WM_INITDIALOG訊息,對話方塊收到該訊息後呼叫OnInitialDialog()

函式。

OnInitialDialog()函式中主要完成一些特殊的處理,這些處理將會在對話方塊初始化時起作用。例如,設定對話方塊的風格、標題等。需要注意的是,OnInitialDialog()函式是在顯示對話方塊之前被呼叫的,因此,即使在該函式中使用了

ShowWindow(SW_HIDE);
程式碼來隱藏對話方塊,在該函式呼叫之後,顯示對話方塊的函式還會被呼叫,所以對話方塊仍然會顯示。

2 OnWindowPosChanging()函式

可以在WM_WINDOWPOSCHANGING訊息的響應函式OnWindowPosChanging()中將對話方塊的顯示屬性去掉,達到隱藏對話方塊的目的。

當對話方塊的大小、位置或者排列層次即將發生變化時,系統會向該對話方塊傳送

WM_WINDOWPOSCHANGING訊息,該訊息的響應函式為OnWindowPosChanging(),該函式的格式為

afx_msg void OnWindowPosChanging(
   WINDOWPOS* lpwndpos
);
引數lpwndposWINDOWPOS結構的指標,該結構包含了視窗大小和位置的資訊。其中有一個成員變數flags表示視窗位置的屬性,該成員變數的值SWP_SHOWWINDOW表示顯示視窗,我們只需將變數中的該值去掉即可。

為視窗新增WM_WINDOWPOSCHANGING訊息的響應OnWindowPosChanging(),在該函式中新增如下程式碼

lpwndpos->flags &= ~SWP_SHOWWINDOW;
以上程式碼的功能即為將flagsSWP_SHOWWINDOW屬性去掉。

相關推薦

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

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

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基於對話方塊程式選單欄不更新

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

mfc基於對話方塊的簡單四則運算計算器

1.①建立mfc對話方塊視窗,對話方塊中所有控制元件都delete。    ②繪製介面,按鍵都button,顯示區域edit control,計算器名字用static text。    ③所有控制元件ID改成語義化ID(可不改),如數字1 IDC_BUTTON_NU

MFC基於對話方塊如何新增點陣圖並使點陣圖背景透明(TransparentBlt函式)

MFC中比較重要的一部分學習內容即是繪圖,而繪圖時我們會發現如果想插入一張圖片而又不想要圖片的背景,或者已經把圖片的背景用Ps去掉了,但是在MFC視窗中顯示圖片的時候又有了白色的背景,這個時候就可以使用TransparentBlt函式(通常支援點陣圖)來實現將圖

VS2013 MFC基於對話方塊程式設計(建立工程)

一、新建MFC專案 選擇:基於對話方塊MFC的使用:  在共享DLL中使用MFC (程式執行需要dll)  在靜態庫中使用MFC (程式較大,執行時不需要dll) 設定MFC程式主框架樣式和標題  高階功能  若是用不上“ActiveX控制元件”可以去掉勾選,若要涉及

MFC基於對話方塊上插入MENU選單欄並點選選單彈出新視窗

一、建立基於對話方塊的應用程式框架        1.選擇選單項檔案->新建->專案,彈出“新建專案”對話方塊。        2.直接選擇“MFC應用程式”或左側面板中模板的Visual C++下選擇MFC,中間視窗中選擇MFC應用程式,然後在下面編輯框中鍵入

MFC基於對話方塊新增背景圖

//實現以下程式碼之前需要首先新增點陣圖資源;void CPicProcessDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用於繪製的裝置上下文 SendMessage(WM_ICONERAS

MFC基於對話方塊程式設計例項:使用“未定義進度”的進度條(有一節小進度在進度條中滾動)

效果展示------- (由於gif的錄製問題,進度顯示不連貫,實際上效果很不錯的) 程式例項------- 1、開啟Visual Studio(此文以VS2010做例子),新建一個基於對話方塊的MFC程式,命名為Progress。 2、向對話方塊中拖入一個Pro

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

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

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

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

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

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

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

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

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

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

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

基於對話方塊MFC程式新增狀態列

首先 需要建立一個 狀態列物件: CStatusBar m_Statusbar;   //狀態列 然後在初始化程式中 //建立狀態列 m_Statusbar.Create(this); m_Statusbar.SetIndicators(indicators,si

基於對話方塊MFC應用程式GetWindowRect(),GetClientRect()探究

先建一個基於對話方塊的MFC應用程式,在對話方塊上放置一個靜態文字控制元件m_plot 用m_rectOldWindow變數儲存對話方塊RECT,用m_rectOldPlotWindow儲存靜態文字控制元件RECT 在OnInitDialog()新增如下測試程式碼 Ge

用控制元件子類化實現拖放顯示檔名編輯框遇到的問題【基於對話方塊

控制元件子類化的步驟: 為控制元件派生一個新類,在其中加上需要響應的訊息函式。 為DLG類新增控制元件派生類的物件,並在OnInitDialog中呼叫XXX.SubClassDlgItem(IDC_XXX,this); 由於需要實現拖放檔案功能,所以在EDIT控制元件初始化時需