日常應用中,選單主要分為兩種:(1) 標準選單(處於應用程式選單欄處的選單) (2)右鍵快捷選單
幾乎你所見過或使用過的軟體中,都有它倆兒
為應用程式新增它們的基本步驟:
(1)用**或者ide建立乙個選單資源
(2)載入、顯示選單選單
(3)如果是右鍵選單,在獲取右鍵座標按下的座標時,還應該將它轉換為螢幕座標(clienttoscreen) —— 後面有原因解析
(4)在wm_commang訊息中響應對應的操作
下面,我就來講一下標準選單和右鍵選單的建立以及用法
(1)首先,不管是標準選單還是右鍵選單,都需要先建立,建立的方式有兩種:
1>**方式,用createmenu函式來建立(為了方便,我這裡就不用**方式了,我選擇ide建立方式)(2)我這裡,為了區分,為標準選單和右鍵選單各自建立了乙個選單資源2>用ide提供的建立方式(就是新增資源,和新增位圖資源是一回事兒,這裡就是新建選單)
1>標準選單選單id為idr_menu
子選單項橢圓id為idm_ellipse
子選單項矩形id為idm_rect
子選單項退出id為idm_exit
2>右鍵選單(3)下面就是兩種選單的新增方式右鍵選單id為idr_contextmenu
子選單項橢圓id為idcm_ellipse
子選單項矩形id為idcm_rect
子選單項退出id為idcm_exit
1>標準選單的新增方式很簡單,因為視窗中預留了乙個選單欄,就是來放選單的,具體**如下:(在註冊視窗類之間修改lpszmenuname引數)(4)訊息處理,這裡為了方便,我給標準選單和右鍵選單一種同樣的相應方式2>右鍵選單的新增方式wndclass.lpszmenuname = makeintresource(idr_menu);//載入標準選單
主要是使用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;
具體**如下:
下面來看看執行效果: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中利用外部介面註冊乙個...