輕鬆實現SINDOWS 98動態選單 (轉)

gugu99發表於2008-04-15
輕鬆實現SINDOWS 98動態選單 (轉)[@more@]

輕鬆實現SINDOWS 98動態選單


   在 98中,當你第一次使用動態選單時,一定感到非常奇妙。其實在中,較容易動態地建立整個彈出式選單,並可將其加到一個已存在的選單中。
首先,用CreatePopMenu()建立選單,函式原型如下:
HMENU CreatePopupMenu(void);
該函式建立一個空選單並返回選單控制程式碼。建立選單後,使用AppendMenu()來增加選單專案。選單構造完成後即可將其用AppendMenu()增加到已存在的選單中。使用CreatePopupMenu()函式建立的選單必須被廢棄。若選單連線到一個視窗,將自動廢棄。當DeleteMenu()函式將選單從父選單中清除時,也將被廢棄。動態選單也可以透過呼叫DestroyMenu()函式廢棄。
本在中文版WINDOWS 98中,採用VISUAL C++ 6.0編譯連線透過。執行後,若你多次點選菜但中的″增加選單”子專案時,你一定會有驚奇的發現。附源程式DMENU.C、資源描述檔案DMENU.RC和標頭檔案DMENU.H。
// Windows98 動態選單源程式
——dmenu.c
#include
#include
#include
#include″dmenu.h″
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
char *szWinName=″Main″; //winclass name
int WINAPI WinMain(HINSTANCE hThisInst,HINSTANCE hPrevInst,
PSTR pszCmdLine,int nCmdShow)
{
HWND hwnd;
MSG uMsg;
WNDCLASS wndclass;
HACCEL hAccel;
// 定義視窗類
wndclass.style=0;
wndclass.lpfnWndProc=WndProc;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hThisInst;
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground=GetStock(WHITE_BRUSH);
wndclass.lpszMenuName=″SampleMenu″;
wndclass.lpszClassName=szWinName;
//註冊視窗類
RegisterClass(&wndclass);
//建立視窗
hwnd=CreateWindow(szWinName,″Windows 98 動態選單″,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,HWND_DESKTOP,NULL,hThisInst,NULL);
//載入加速鍵表
hAccel=LoadAccelerators(hThisInst,″SampleMenu″);
// 顯示視窗
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
// 建立訊息迴圈
while(GetMessage(&uMsg,NULL,0,0)){
if(!TranslateAccelerator(hwnd,hAccel,&uMsg))
TranslateMessage(&uMsg);
DispatchMessage(&uMsg);
}
}
return uMsg.wParam;
}
//視窗函式處理各種訊息,由WINDOWS系統呼叫
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,
WPARAM wParam,LPARAM lParam)
{
HMENU hmenu,hsubmenu,hpopup;
int return_value;
switch(message){
case WM_COMMAND:
switch(LO(wParam)){
case IDM_EXIT:
MessageBox(hwnd,″退出程式″,″退出″,MB_OK);
PostQuitMessage(0);
break;
case IDM_ADDITEM://增加選單
hmenu=GetMenu(hwnd); //主選單薄控制程式碼
hsubmenu=GetSubMenu(hmenu,0); //彈出式選單控制程式碼
//建立新的彈出選單
hpopup=CreatePopupMenu();
//新增新選單項
AppendMenu(hpopup,MF_ENABLED,IDM_NEW,″動態選單1″);
AppendMenu(hpopup,MF_ENABLED,IDM_NEW,″dynamic menu 2″);
//把新選單加到檔案選單中
AppendMenu(hsubmenu,MF_SEPARATOR,0,″″);
AppendMenu(hsubmenu,MF_POPUP,(UINT)hpopup,″動態選單(&D)″);
break;
case IDM_ABOUT:
MessageBox(hwnd,″Windows 98 動態選單nn 2000.4.27nn
n″,″關於″,MB_OK);
break;
}
break;
case WM_DESTROY:
return_value=MessageBox(hwnd,″退出程式?″,″退出″,MB_OK);
if(return_value=IDOK)
{
PostQuitMessage(0);
break;
}
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return 0;
}
資源描述檔案DMENU.RC內容如下:
#include
#include″dmenu.h″
SampleMenu MENU
{
POPUP ″檔案(&F)″
{
MENUITEM ″退出(&x)t ALT-x″,
IDM_EXIT
MENUITEM ″新增選單(&A)″,
IDM_ADDITEM
}
MENUITEM″關於(&A)″,IDM_ABOUT
}
SampleMenu ACCELERATORS
{
″x″, IDM_EXIT, ALT
VK-F1,IDM-ABOUT,
VIRTKEY,ALT
}
標頭檔案DMENU.H內容如下:
#define IDM_EXIT 101
#define IDM_ABOUT 102
#define IDM_ADDITEM 103
#define IDM_NEW 104 (安徽 王翌)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1002567/,如需轉載,請註明出處,否則將追究法律責任。

相關文章