MFC對話方塊程式基礎複習003

2021-06-16 05:37:58 字數 3319 閱讀 4080

對話方塊基礎複習三 

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 包含標頭檔案...