第七章
1. 模態對話方塊
1.1 建立 domodal();
內部呼叫showwindow(sw_show);
對話方塊類的物件宣告為區域性變數就可以,因為domodal阻塞在這裡。
1.2 銷毀,直接點「確定」、「取消」就可以了。ctestdlg::onok()和ctestdlg:: oncancel ()呼叫cdialog::onok()和cdialog:: oncancel (),後面兩個呼叫enddialog()。對於模態,enddialog()銷毀對話方塊。
2.非模態對話方塊
2.1 建立
// lpsztemplatename對話方塊模板名稱
// pparentwnd 對話方塊的父視窗,一般用this(誰呼叫。this就是誰)
bool create(lpctstr lpsztemplatename, cwnd* pparentwnd = null);
bool create(uint nidtemplate, cwnd* pparentwnd = null);
showwindow(sw_show);
注意:對話方塊類物件要用全域性變數或呼叫所在類的成員變數,或定義為區域性指標變數,然後new出來,存在於堆上。
2.2銷毀
a). 如果是new出來的區域性比變數,要在ctestdlg::postncdestory()
b). ok按鈕呼叫的enddialog() 對於非模態,只是隱藏,並未銷毀。
解決方法:重寫onok和oncancel,呼叫destroywindow(),同時不要在呼叫cdialog::onok()和cdialog:: oncancel ();
3.動態建立按鈕
cbutton
類成員函式create(); 可以在mfc專案裡檢視介面。
4.控制項的訪問
cwnd::cwnd* getdlgitem(int
nid) const;獲取控制項指標
getnextdlgtabitem();//返回指定控制項前面或後面乙個具有ws_tabstop風格的控制項
setwindowtext(); getwindowtext();
getdlgitemtext(); setdlgitemtext();
getdlgiteminit(); setdlgiteminit()
char ch1[256];memset(ch1,0,sizeof(char)/sizeof(char));
sendmessage(getdlgitem(nid)->m_hwnd,wm_gettext,10,(lparam)ch1);
sendmessage(m_edit.m_hwnd,wm_gettext,10,(lparam)ch1);
m_edit.sendmessage(wm_gettext,10,(lparam)ch1);
wm_settext
4.對話方塊伸縮功能 通過getwindowrect()或者getclientrect()等獲取視窗大小,然後呼叫setwindowpos來實現對話方塊伸縮。
5.焦點傳遞
a).實現方法
a-1).為編輯框控制項編寫乙個類,利用這個類來捕獲鍵盤訊息
a-2).修改編輯框控制項過程函式
wndproc prevproc; 定乙個視窗過程
lresult callback neweditproc //視窗過程的名字可以隨意命名
hwnd hwnd, // 視窗的控制代碼
uint umsg, // 訊息標示
wparam wparam, //第乙個訊息引數
lparam lparam // 第二個訊息引數
if(umsg == wm_char && wparam == 0x0d)//判斷是都為回車符,wparam引數儲存的是字元的ascii碼
::setfocus(getnextwindow(hwnd,gw_hwndnext))//setfocus(hwnd), getnextwindow(hwndhwnd/*當前視窗控制代碼*/,unit wcmd /*查詢方向*/);//
gw_hwndnext gw_hwndprev
return 1;
else
return prevproc(hwnd,umsg,wparam,lparam);如果不是回車呼叫先前的視窗過程來處理該訊息
在oninitdialog() 函式中呼叫setwindowlong(),因為在相應precreatewindow()和create()函式的時候,對話方塊及其子控制項都沒有全部建立完畢,所以無法獲取各子控制項的視窗物件,也就無法修改編輯框的視窗過程函式。
oninitdialog()
prevproc = (wndproc)setwindowlong(getdlgitem(idc_edit1)->m_hwnd,gwl_wndproc,(long)neweditproc);
setfouce(hwnd hwnd)
MFC程式設計入門之七(對話方塊 為對話方塊新增控制項)
建立對話方塊資源需要建立對話方塊模板 修改對話方塊屬性 為對話方塊新增各種控制項等步驟,前面一講中已經講了建立對話方塊模板和修改對話方塊屬性,本節繼續講如何為對話方塊新增控制項。上一節中建立了乙個名為 addition 的工程,目的是生成乙個實現加法運算的應用程式。實現加法計算有幾個必要的因素 被加...
MFC對話方塊控制項訪問的七種方式
最簡單的動態建立按鈕 if m btn.m hwnd 視窗控制代碼不為空 else 實現 點選add按鈕,將 編輯框1的數 編輯框2 的數 放到編輯框3中 int num1,num2,num3 char ch1 10 ch2 10 ch3 10 getdlgitem idc edit1 getwin...
《深入淺出MFC》第十章 MFC與對話方塊
可以通過對話方塊編輯器設計對話方塊模板,在資源檢視中選擇新增乙個對話方塊資源。通過屬性頁可以設定對話方塊或控制項的屬性。通過vs環境中的格式,tab順序可以設定控制項的tab順序,只需按指定的順序依次點選控制項即可。在vs開發環境中選擇 格式 選單中的測試對話方塊可以直接測試對話方塊。對話方塊調整完...