來看看標準選單和右鍵選單的玩法

2021-09-01 19:29:16 字數 2310 閱讀 4601

日常應用中,選單主要分為兩種:(1) 標準選單(處於應用程式選單欄處的選單) (2)右鍵快捷選單

幾乎你所見過或使用過的軟體中,都有它倆兒

為應用程式新增它們的基本步驟:

(1)用**或者ide建立乙個選單資源

(2)載入、顯示選單選單

(3)如果是右鍵選單,在獲取右鍵座標按下的座標時,還應該將它轉換為螢幕座標(clienttoscreen) —— 後面有原因解析

(4)在wm_commang訊息中響應對應的操作

下面,我就來講一下標準選單和右鍵選單的建立以及用法

(1)首先,不管是標準選單還是右鍵選單,都需要先建立,建立的方式有兩種:

1>**方式,用createmenu函式來建立(為了方便,我這裡就不用**方式了,我選擇ide建立方式)

2>用ide提供的建立方式(就是新增資源,和新增位圖資源是一回事兒,這裡就是新建選單)

(2)我這裡,為了區分,為標準選單和右鍵選單各自建立了乙個選單資源

1>標準選單

選單id為idr_menu

子選單項橢圓id為idm_ellipse

子選單項矩形id為idm_rect

子選單項退出id為idm_exit

2>右鍵選單

右鍵選單id為idr_contextmenu

子選單項橢圓id為idcm_ellipse

子選單項矩形id為idcm_rect

子選單項退出id為idcm_exit

(3)下面就是兩種選單的新增方式

1>標準選單的新增方式很簡單,因為視窗中預留了乙個選單欄,就是來放選單的,具體**如下:(在註冊視窗類之間修改lpszmenuname引數)

wndclass.lpszmenuname	= makeintresource(idr_menu);//載入標準選單
2>右鍵選單的新增方式

主要是使用trackmenu這個函式來顯示,來看看msdn:

bool trackpopupmenu(
hmenu hmenu,//選單控制代碼

uint uflags,//位置標記

int x, //x座標

int y, //y座標

int nreserved,//必須為0,不用管

hwnd hwnd, //擁有右鍵選單的視窗的控制代碼

hwnd prcrect//忽略(null)

);

具體**:(在右鍵按下訊息中顯示右鍵選單)

case wm_rbuttondown:

ptcm.x = loword(lparam);//設定右鍵選單座標

ptcm.y = hiword(lparam);

/* 當前獲取的座標是客戶區座標 , 而trackpopupmenu函式顯示的座標是螢幕座標

因此 , 需將ptcm轉換成螢幕座標(否則顯示位置不正確)

*/ clienttoscreen(hwnd, &ptcm);

//顯示右鍵選單

trackpopupmenu(hsub,

tpm_leftalign | tpm_topalign | tpm_leftbutton,

ptcm.x, ptcm.y,

0, hwnd, null);

return 0;

(4)訊息處理,這裡為了方便,我給標準選單和右鍵選單一種同樣的相應方式

具體**如下:

case wm_command:

//響應選單訊息

switch(loword(wparam))//判斷子選單項的id

return 0;

下面來看看執行效果:

來看看標準選單和右鍵選單的玩法

日常應用中,選單主要分為兩種 1 標準選單 處於應用程式選單欄處的選單 2 右鍵快捷選單 幾乎你所見過或使用過的軟體中,都有它倆兒 為應用程式新增它們的基本步驟 1 用 或者ide建立乙個選單資源 2 載入 顯示選單選單 3 如果是右鍵選單,在獲取右鍵座標按下的座標時,還應該將它轉換為螢幕座標 cl...

來看看標準選單和右鍵選單的玩法

日常應用中,選單主要分為兩種 1 標準選單 處於應用程式選單欄處的選單 2 右鍵快捷選單 幾乎你所見過或使用過的軟體中,都有它倆兒 為應用程式新增它們的基本步驟 1 用 或者ide建立乙個選單資源 2 載入 顯示選單選單 3 如果是右鍵選單,在獲取右鍵座標按下的座標時,還應該將它轉換為螢幕座標 cl...

flex 滑鼠右鍵事件 和右鍵選單的實現

flex 滑鼠右鍵事件監聽事件的mouseevent.right click事件 比如對某個控制項a進行監控右鍵點選事件 a.addeventlistener mouseevent.right click,func 滑鼠的其他事件也可以監聽,具體見 其基本思路為 1,在flex中利用外部介面註冊乙個...