第6課 選單

2021-07-22 08:00:46 字數 3506 閱讀 7455

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該函式將終止執行緒的執行,並導致作業系統清除該執行緒使用的所有作...