對話方塊可以分為模式對話方塊和非模式對話方塊兩種。模式對話方塊是指使用者只能在當前的窗體中進行操作,在該窗體沒有關閉之前不能切換到其他的窗體。非模式對話方塊是指當前的所操作的窗體可以切換。
一般情況下,用於確認資訊的操作和一般的操作的對話方塊屬於模式對話方塊。如開啟檔案對話方塊就是典型的模式對話方塊,而常見的查詢和替換便是非模式對話方塊。
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 收縮後的對話...