輕鬆實現SINDOWS 98動態選單 (轉)
輕鬆實現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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 輕鬆去掉web中flash右鍵選單【轉】Web
- .Net Core Razor動態選單實現
- 輕鬆實現刪除確認 (轉)
- WTL中動態選單的實現薦
- FullPage.js – 輕鬆實現全屏滾動(單頁網站)效果JS網站
- 輕鬆實現session的mysql處理 (轉)SessionMySql
- 輕鬆理解 Java 靜態代理/動態代理Java
- css3實現動態導航選單CSSS3
- [轉]Android輕鬆實現RecyclerView懸浮條AndroidView
- 輕鬆玩轉花樣表單表單提交(轉)
- 基於jquery-treeview的動態選單實現jQueryView
- 輕鬆實現報表整合
- 在ASP.NET裡輕鬆實現縮圖 (轉)ASP.NET
- TextView自定義輕鬆實現下劃線、點選彈框TextView
- ASP環境下輕鬆實現報表的列印 (轉)
- 輕鬆實現在家高效辦公
- 輕鬆實現 Web 效能優化Web優化
- WIN98特殊視窗的動態拖動 (轉)
- Win98和WinXP雙系統啟動選單的恢復(轉)
- HarmonyOS USB DDK助你輕鬆實現USB驅動開發
- 選擇GoDaddy,輕鬆進行域名轉移Go
- Nacos釋出0.5.0版本,輕鬆玩轉動態 DNS 服務DNS
- 【react】實現動態表單中巢狀動態表單React巢狀
- 辦公室革命,教你輕鬆搞定輕鬆玩轉ExcelExcel
- 動態建立選單
- DW+ASP 玩轉動態二級選單 (轉)
- 簡單實現Crystal Report的動態載入 (轉)
- Redis輕鬆實現秒殺系統Redis
- js輕鬆實現摺疊皮膚JS
- PowerPoint輕鬆實現列表播放功能
- 輕鬆實現.NET應用自動更新:AutoUpdater.NET教程
- 簡單幾行程式碼輕鬆實現大文字平行計算行程
- 輕鬆查詢Windows自啟動程式(轉)Windows
- 技術基礎 | 用JSON在抖音上釋出動態——使用Stargate即可輕鬆實現JSON
- 自繪選單的實現 (轉)
- Vue實現左右選單聯動實現(更新)Vue
- 看動畫輕鬆理解「遞迴」與「動態規劃」動畫遞迴動態規劃
- Windows server 2008(windows Vista)啟動選單輕鬆搞定薦WindowsServer