1 頂層選單預設都是pop-up,即彈出式選單,不能響應命令。
2. 當對某選單新增訊息響應函式時,
4
個類的訊息響應優先次序分別是:
為什麼?請參閱《深入淺出》 3.
訊息分類:
a; 標準訊息(以
wm_開頭的訊息,但不包括wm
_command
);從cwnd派生的類,可以接受這類訊息。
b; 命令訊息
on_command(idm_phone1, onphone1)
,選單和工具欄的訊息。
從ccmdtarget派生的類,可以接受這類訊息。
c. 通告訊息:按鈕,列表框發出的訊息。
從ccmdtarget派生的類,可以接受這類訊息。
ccmdtarget
只能接受命令訊息和通告訊息。而從
ccmdtarget
派生的cwnd
可以能接受命令訊息和通告訊息
,也可以接受標準訊息。
4. 確定選單的索引號,注意從
0開始, 分隔符也算數。
getmenu() 獲取乙個選單指標(選單欄物件)
getsubmenu()獲取子選單的指標
乙個子選單只能有乙個預設選單(粗體字型顯示)。
//getmenu()->getsubmenu(0)->setdefaultitem(5,true);
setmunuitembitmaps() 將指定點陣圖與選單項關聯起來,即選單項前面顯示圖形。
圖形標記選單項上顯示的點陣圖的大小是13x13
str.format("x=%d,y=%d",getsystemmetrics(sm_cxmenucheck),
getsystemmetrics(sm_cymenucheck));//
獲得系統的選單的點陣圖的大小。
enablemenuitem() 禁用選單項
setmenu(null);//
移除當前選單
cmenu menu;
menu.loadmenu(idr_mainframe);
setmenu(&menu);
menu.detach();//
增加選單,此處
detach(),
如果是區域性變數。
5.update_command_ui訊息響應設定選單項的狀態
void cmainframe::onupdateeditcut(ccmdui* pcmdui)
6. 右鍵彈出選單功能的實現方法有兩個:
a.project->add to project->component and controls->
資料夾vc components->popup menu ok b.
用 trackpopupmenu()
實現。cmenu menu;
menu.loadmenu(idr_menu1);
cmenu *ppopup=menu.getsubmenu(0);
clienttoscreen(&point);//客戶區座標轉換成螢幕座標
ppopup->trackpopupmenu(tpm_leftalign | tpm_rightbutton, point.x, point.y,
getparent());//注意,
trackpopupmenu的引數的x,y都是螢幕座標。 7.
動態建立選單的方法:
cmenu menu;
menu.createpopupmenu();
getmenu()->insertmenu(2,mf_byposition | mf_popup,(uint)menu.m_hmenu,"winsun");
menu.detach();
getmenu()->getsubmenu(0)->insertmenu(id_file_open,
mf_bycommand | mf_string,115,"
維新");
// getmenu()->deletemenu(1,mf_byposition);
// getmenu()->getsubmenu(0)->deletemenu(2,mf_byposition);
8. 為動態建立的選單增加訊息響應的步驟
a. 在
resource.h
中增加#define idm_hello 123 b.
在 mainfrm.h
中加入afx_msg void onhello();
c.mainfrm.cpp
中加入on_command(idm_hello,onhello) d.
最後加入
void cmainframe::onhello()
9. 動態增加**號碼本步驟
a. 處理
wm_char
訊息。如果回車,則清空字串,視窗重繪
invalidate
,將人名加入到選單中,將字串儲存集合類
cstringarray中,
用的是成員函式
add方法。
b. 取出動態建立的選單的資料的方法。
1 )建立乙個彈出選單,彈出選單下面有
4個子選單。將子選單的
id號連續。 2
)在resource.h
中新增 #define idm_phone1 123.... 3
)新增其訊息響應函式。注意注釋中的文字
begin_message_map(cmenu2view, cview)
//}afx_msg_map
// standard printing commands
on_command(idm_phone1, onphone1)//
一定要這
4句**移到此處。
on_command(idm_phone2, onphone2)
on_command(idm_phone3, onphone3)
on_command(idm_phone4, onphone4)
on_command(id_file_print, cview::onfileprint)
on_command(id_file_print_direct, cview::onfileprint)
on_command(id_file_print_preview, cview::onfileprintpreview)
end_message_map()
4 )填寫**
10.如何在
mainframe
中攔截oncommand
訊息?答,在它增加
oncommand
的訊息處理函式即可。
11.錯誤除錯方法:
missing ";" before "*"
cmenu2doc* getdocument();//
因為cmenu2doc
是個不認識的變數,將其標頭檔案包含進即可。
12 在cmainframe類中重繪選單欄
drawmenubar();//重繪選單欄
第6課 鏈結
你在前面幾課學到的屬性也可以應用到鏈結上 比如修改顏色 字型 新增下劃線等 但不同的是,css允許你根據鏈結是未訪問的 已訪問的 活動 的 是否有滑鼠懸停等分別定義不同的屬性。這樣,我們便可為 增添奇特而有用的效果。你需要通過偽類 pseudo class 來控制這些效果。偽類 pseudo cla...
第6題 泥塑課
小公尺是乙個幼兒園老師,每學期的泥塑課上,她都會給每個學生發不超過250立方厘公尺的等量橡皮泥,教大家做泥塑。在上課過程中,她發現每個班都恰好有乙個小朋友會去搶另乙個小朋友的橡皮泥,於是她決定,在正式開始做泥塑前,讓大家把手裡的橡皮泥都捏成乙個立方體,並且測量手裡捏好的橡皮泥的長 寬和高。這樣,她就...
第6課 終止執行緒
關閉核心物件 closehandler 如果不關閉控制代碼的話,可能造成資源洩露 掛起執行緒 suspendthread 可以掛起127次執行緒 掛起執行緒n次就需要恢復執行緒n次,但是不會大於127次 終止執行緒 exitthread該函式將終止執行緒的執行,並導致作業系統清除該執行緒使用的所有作...