MFC之對話方塊

2021-06-09 11:58:20 字數 3376 閱讀 6102

對話方塊可以分為模式對話方塊和非模式對話方塊兩種。模式對話方塊是指使用者只能在當前的窗體中進行操作,在該窗體沒有關閉之前不能切換到其他的窗體。非模式對話方塊是指當前的所操作的窗體可以切換。

一般情況下,用於確認資訊的操作和一般的操作的對話方塊屬於模式對話方塊。如開啟檔案對話方塊就是典型的模式對話方塊,而常見的查詢和替換便是非模式對話方塊。

a)、模式對話方塊

cdialog dlg;

dlg.domodal();

b)、非模式對話方塊

cdialog *dlg = new cdialog;

dlg->create(idd_dialog);

dlg->centerwindow(this);

dlg->showwindow(sw_show);

在模式對話方塊中,通過setwindowtext()可以顯示文字;

例:dlg.m_static_waiting.setwindowtext("請等待……");

但在非模式對話方塊中,要顯示文字需要再showwindow()之前,即先使用setdlgitemtext()設定要顯示的文字,然後呼叫showwindow(),然後要呼叫redrawwindow()重畫視窗,才能正常顯示。

例:dlg->setdlgitemtext(idd_static_waiting,"請等待……");

dlg->showwindow(sw_show);

dlg->redrawwindow();

afx_manage_state(afxgetstaticmodulestate());

cxxdlg dlg;

dlg.domodal();//實現dll資源切換的,afx_manage_state(afxgetstaticmodulestate());

方法1:textout()

cdc *pdc = getdc();

pdc->setbkmode(transparent);   //設定輸出區域背景透明

pdc->textout(50,50,_t("hello"));

方法2:drawtext()

//dc定義同上

pdc->drawtext("hello",crect(50,50,rect.width(),100),dt_center); //crect指定乙個文字輸出的矩形框,前兩個引數是左上角座標,後兩個引數是右下角座標,dt_center表示居中顯示。

方法3:setwindowtext()  //標題欄上輸出資訊

setwindowtext("等待框");

1、在cpp檔案中宣告通知區全域性變數data及訊息wm_ontray

#define wm_ontray wm_user + 1

notifyicondata data;

2、在需要顯示托盤的位置設定data的值並顯示(如初始化函式中)

cstring title = "托盤測試";

lstrcpyn(data.sztip,title,title.getlength()+1);

data.cbsize = sizeof(notifyicondata);

data.hicon  = m_hicon;

data.hwnd   = m_hwnd;

data.ucallbackmessage = wm_ontray;

data.uflags = nif_message|nif_icon|nif_tip;

data.uid    = 0;

shell_notifyicon(nim_add,&data);

3、在message_map中定義訊息對映

on_message(wm_ontray,ontray)

4、實現成員函式ontray(wparam wparam, lparam lparam),以響應各種事件,比如滑鼠右鍵單擊等

void cnotifyicontestdlg::ontray(wparam wparam, lparam lparam)

else

getcursorpos(&point);

setforegroundwindow();

ppopup->trackpopupmenu(tpm_leftalign | tpm_rightbutton,point.x,point.y,this);}}

break;

case wm_lbuttondblclk:

break;}}

方法一:在視窗初始化處增加:

//這句話改變視窗的屬性,也可以在視窗的建立int c***dlg::oncreate(lpcreatestruct lpcreatestruct)或者預建立函式bool c***dlg::precreatewindow(createstruct& cs) 

中進行類似的處理

此方法有乙個bug就是標題欄會受到影響。

方法二:

if ( m_wndowner.m_hwnd == null )

c***dlg dlg(&m_wndowner);  //這幾行是關鍵,得修改原來的幾行

m_pmainwnd = &dlg;

int_ptr nresponse = dlg.domodal();

if (nresponse == idok)

else if (nresponse == idcancel)

if (m_wndowner.m_hwnd != null)

m_wndowner.destroywindow();

// 由於對話方塊已關閉,所以將返回 false 以便退出應用程式,

// 而不是啟動應用程式的訊息幫浦。

return false;}

接著需要截獲對話方塊的最小化事件和關閉事件,響應wm_syscommand訊息,在其中對sc_minimize以及sc_close事件進行處理,隱藏視窗,並在托盤區顯示。

在onpaint()中新增如下**:

cbitmap m_dlgbk;

m_dlgbk.loadbitmap(idb_bitmap1);

cbrush m_dlgbrush(&m_dlgbk);

cdc *pdc=getdc();

crect rect;

getclientrect(&rect);

pdc->fillrect(crect(0,0,rect.width(),rect.height()),&m_dlgbrush);

1、在對話方塊的類中新增變數

例如: cstring title ;

2、在對話方塊初始化函式中oninitdialog()新增setwindowtext(title);

3、在其他地方呼叫該對話方塊時,定義完對話方塊物件後,給成員變數title賦一下值即可顯示此字串為對話方塊標題

cdlg mydlg;

mydlg.title = "修改記錄";

mydlg.domodle();

mfc 子對話方塊控制父對話方塊 MFC對話方塊構架程式

遺憾的是 從來沒有被堅定選擇過,就像是,他只是剛好需要,你只是剛好在。網易雲熱評 一 對話方塊架構分類 1 模式對話方塊,彈出來不能進行其他操作 2 無模式對話方塊,彈出來後可以進行其他操作 二 新建win32應用程式 模式對話方塊 1 建立 2 修改屬性 3 新增dialog資源 4 包含標頭檔案...

MFC 對話方塊

1 建立對話方塊模板,設定對話方塊屬性 cadditionddlg 主對話方塊類 顯示的主要介面 addition的資源樹 4個子項 dialog 對話方塊 含有2個對話方塊模板 id為idd aboutbox 關於對話方塊模板 idd addtion dlalog 主對話方塊模板 lcon 圖示 ...

MFC擴充套件對話方塊 即收縮對話方塊

mfc擴充套件對話方塊 即收縮對話方塊 效果圖如下,擴充套件前 上 擴充套件後 下 上下擴充套件 具體步驟如下 1.在.h檔案中新增如下 1private 2boolm shrink 標記是否收縮 3intm winheight 儲存對話方塊的高度 4intm shrinkheight 收縮後的對話...