對話方塊基礎複習三
2011.4.24
tab control控制項
:(ctabctr類)
分析原理,其實tabcontrol
控制項並不是多頁面
,只是在乙個窗體上面新增了tab
的按鈕,每次在
tab按鈕的選擇改變時候響應訊息,
通過利用它作為父視窗建立的子視窗集合相互交替顯示和隱藏
,就可以實現tab
頁面的切換。
使用方法:
①為tab control
關聯乙個控制物件,例如
m_tabtest
②要設定多少個頁面就建立多少個dialog
,並將dialog
設定為child
③為每個頁面的dialog
建立乙個類,並建立響應的物件,例如
m_page0 ④
insertitem
新增乙個頁面tab
標籤,可以直接新增乙個寬字的字串,也可以用
tcitem
結構體來新增等作為tab標籤
⑤讓tab control
作為父視窗
creat
非模態對話方塊
m_page0.
create
(idd_page0,
&m_tabtest);
⑥設定這些非模態對話方塊的位置,下面是技巧
crect
rc;
m_tabtest.
getclientrect
(rc); //獲得
tab面板的區域
rc.top += 20;
rc.bottom -= 8;
rc.left += 8;
rc.right -= 8;
m_page0.
movewindow
(&rc);
⑦把頁面非模態對話方塊顯示,並把第0
頁設為可見
m_page0.showwindow(sw_show);
m_page1.showwindow(sw_hide);
⑧響應 tab control
的 tcn_selchanging訊息
getcursel
獲取選中tab
的index
,例如m_tabtest.getcursel();
然後會相應的對話方塊進行顯示和隱藏,便可以實現頁面的切換了。
關於hot key
控制項 :(
chotkeyctrl類)
分析原理,其實不用
hotkey 控制項也可以建立
全域性熱鍵
,下面的方法直接第③步就可以了。其實不用新增訊息對映也行,override
processmessagefilter
這個virtual function
,在這裡過濾
wm_hotkey
這個訊息也行。
全域性熱鍵建立方法:
①為 hotkey
控制項關聯乙個控制物件
②對控制物件進行設定
setrules
設定熱鍵的規制
sethotkey
設定乙個熱鍵
virtual-key
是 vk_*
可以到msdn查
③registerhotkey
系統api
註冊乙個熱鍵
bool registerhotkey(
hwnd hwnd, // handle to window
int id, // hot key identifier
uint fsmodifiers, // key-modifier options
uint vk // virtual-key code
);在(message_map
)訊息對映中新增wm_hotkey
訊息的響應
on_message(wm_hotkey, onhotkey)
在標頭檔案中新增onhotkey
處理函式
afx_msg void onhotkey(wparam wparam, lparam lparam);
④在 onhotkey
中獲取熱鍵訊息
wparam
是在 registerhotkey 這設定的id
lparam
其中low-order word specify
了對應用的組合鍵
high-order word specify 了
virtual-key code
其中用取高低位的方法獲得對應的元素
hiword
取高位uint uvirtkey = (uint)
hiword
(lparam);
loword
取低位
⑤在程式結束之後要登出系統熱鍵
例如在
ondestroy
中 unregisterhotkey
,這樣就不會占用系統熱鍵了。
關於 accelerator
的使用 (非全域性熱鍵 的建立):
①建立乙個accelerator
②將乙個
控制項id
和 key
進行關聯
③建立類成員,型別為
haccel
④在建構函式中初始化
m_haccel=::
loadaccelerators
(afxgetinstancehandle
(),
makeintresource
(idr_accelerator1));
⑤override the virtual function
: pretranslatemessage
在其中設定攔截 用
translateaccelerator
來處理訊息,然後
return true
例如:if(m_haccel) }
這樣就能對非全域性熱鍵進行響應了
pretranslatemessage
返回非零就會特殊處理,返回0
就會正常處理
對字的操作擴充套件:
hiword
、loword
取高、低位字
make
wparam
構造wparma
hibyte
、lobyte
取高、低位位元組
make
lparam
構造 lparma
MFC 對話方塊程式 模式對話方塊與非模式對話方塊
一 根據主視窗型別,mfc軟體工程可以分為以下幾種架構模型 例如 記事本和畫筆等。2 mdi multiple document inte ce 多文件介面,乙個主框架視窗下可以同時編輯多份文件。例如 vc 6.0,photoshop等軟體。3 基於對話方塊的軟體模型 主視窗是通過資源管理器,在對話...
MFC基於對話方塊程式
001 020 else if nresponse idcancel 如果對話方塊是用取消來關閉的,則 021 025 026 由於對話方塊已關閉,所以將返回 false 以便退出應用程式,027 而不是啟動應用程式的訊息幫浦。028 return false 029 因為initinstance ...
mfc 子對話方塊控制父對話方塊 MFC對話方塊構架程式
遺憾的是 從來沒有被堅定選擇過,就像是,他只是剛好需要,你只是剛好在。網易雲熱評 一 對話方塊架構分類 1 模式對話方塊,彈出來不能進行其他操作 2 無模式對話方塊,彈出來後可以進行其他操作 二 新建win32應用程式 模式對話方塊 1 建立 2 修改屬性 3 新增dialog資源 4 包含標頭檔案...