屈、Windows暇汽!暇汽才嶧連
輝聞喘宀僉夲匯倖暇汽?扮?Windows宥械?完笥嶧連侃尖殻會窟僕叱倖音揖議嶧連。壓寄謹方秤趨和? 艇議殻會辛參策待寄何蛍嶧連?峪俶委万断勧弓公DefWindowProc軸辛。WM_INITMENU祥頁宸匯窃議嶧連?万醤嗤和双歌方?
wParam? 麼暇汽鞘凹
lParam? 0
wParam峙頁艇議麼暇汽鞘凹?軸聞聞喘宀僉夲議頁狼由暇汽嶄議?朕。Windows殻會宥械策待WM_INITMENU嶧連。勝砿壓僉嶄乎?岻念議嶧連厮将公殻會戻工阻俐個暇汽議字氏?徽頁厘断状誼緩震個延競蚊暇汽頁氏氾岱聞喘宀議。
殻會匆氏俊辺欺WM_MENUSELECT嶧連。昧彭聞喘宀壓暇汽?嶄卞強高炎賜宀報炎?殻會氏辺欺俯謹WM_MENUSELECT嶧連。宸斤糞恬椎乂淫根斤暇汽?議猟忖宙峰議彜蓑双頁載嗤逸廁議。WM_MENUSELECT議歌方泌和侭幣?
LOWORD (wParam)?瓜僉嶄?朕?暇汽ID賜宀起竃塀暇汽鞘凹
HIWORD (wParam)?僉夲縄炎
lParam: 淫根瓜僉嶄?朕議暇汽鞘凹
WM_MENUSELECT頁匯倖暇汽弖忸嶧連?wParam議峙御盆艇朕念僉夲議頁暇汽嶄議陳匯??紗互疏業?塋承陳埜?¡?wParam議互忖怏嶄議仝僉夲縄炎々辛參頁和双宸乂縄炎議怏栽?MF_GRAYED、MF_DISABLED、MF_CHECKED、MF_BITMAP、MF_POPUP、MF_HELP、MF_SYSMENU才MF_MOUSESELECT。泌惚艇俶勣功象斤暇汽?議僉夲栖個延完笥?塋焦瘕魑陳敞檻d巴環翛敏塋荒?WM_MENUSELECT嶧連。俯謹殻會委乎嶧連窟僕公DefWindowProc。
輝Windows彈姥?塋紹燦檝噉?讐傍ナ隠k賓瑫或斛虜??躋茂魴∨窯燦?WM_INITMENUPOPUP嶧連?歌方泌和?
wParam? 起竃塀暇汽鞘凹
LOWORD (lParam)?起竃塀暇汽沫哈
HIWORD (lParam)? 狼由暇汽葎1?凪万葎0
泌惚艇俶勣壓?塋承噉?讐傍ブ僐案惋短鰌濬虵嘆傍ハ遑d巴鑑盡氐虜⊂雄榜慴Ą?鐳脾viii拔┳茂鯤荒探噉?讐傍ド狼? Paste凋綜貫儒薮仮鹸崙猟忖?輝艇辺欺起竃塀暇汽嶄議WM_INITMENUPOPUP嶧連扮?哘鳩協儒薮仮坪頁倦嗤猟忖贋壓。泌惚短嗤?椎担哘乎聞 Paste暇汽?涙丼晒。厘断繍壓云嫗朔中俐個議POPPAD殻會嶄心欺宸劔議箭徨。
恷嶷勣議暇汽嶧連頁WM_COMMAND?万燕幣聞喘宀厮将貫暇汽嶄僉嶄阻匯倖瓜尼喘議暇汽?。及伊嫗嶄議WM_COMMAND嶧連匆辛參喇徨完笥陣周恢伏。泌惚艇当派葎暇汽才徨完笥陣周聞喘揖匯ID鷹?椎担艇辛參宥狛lParam議峙栖曝艶万断?暇汽?議lParam凪峙葎0?萩歌需燕10-1。
燕10-1
暇汽
陣周
LOWORD (wParam):
暇汽ID
陣周ID
HIWORD (wParam):
0
宥岑鷹
lParam:
0
徨完笥鞘凹
WM_SYSCOMMAND嶧連窃貌噐WM_COMMAND嶧連?峪頁WM_SYSCOMMAND燕幣聞喘宀貫狼由暇汽嶄僉夲匯倖尼喘議暇汽??
wParam: 暇汽ID
lParam: 0
隼遇?泌惚WM_SYSCOMMAND嶧連頁喇梓報炎梓囚恢伏議?LOWORD?lParam?才HIWORD?lParam?繍淫根報炎高炎了崔議x才y徳鳥恫炎。
斤噐WM_SYSCOMMAND?暇汽ID峺幣狼由暇汽嶄議陳匯?瓜僉嶄。斤噐圓枠協吶議狼由暇汽??熟詰議椎膨倖了哘乎才0xFFF0序佩AND塰麻栖徳盈渠?潤惚峙哘乎葎和双岻匯?SC_SIZE、SC_MOVE、SC_MINIMIZE、SC_MAXIMIZE、SC_NEXTWINDOW、SC_PREVWINDOW、SC_CLOSE、SC_VSCROLL、SC_HSCROLL、SC_ARRANGE、SC_RESTORE才SC_TASKLIST。緩翌?wParam辛參頁SC_MOUSEMENU賜SC_KEYMENU。
泌惚艇壓狼由暇汽嶄耶紗暇汽??椎担wParam議詰忖怏繍頁艇協吶議暇汽ID。葎阻閲窒嚥圓枠協吶議暇汽ID屢喝融?哘喘殻會哘乎聞喘弌噐0xF000議峙?宸斤噐繍匯違議WM_SYSCOMMAND嶧連窟僕公DefWindowProc頁載嶷勣議。泌惚艇音宸劔恂?椎担艇糞縞貧祥頁鋤喘阻屎械議狼由暇汽凋綜。
厘断繍網胎議恷朔匯倖嶧連頁WM_MENUCHAR。糞縞貧?万功云音頁暇汽嶧連。壓和双曾嶽秤趨岻匯窟伏扮?Windows氏委宸倖嶧連窟僕欺完笥嶧連侃尖殻會?泌惚聞喘宀梓和Alt才匯倖嚥暇汽?音謄塘議忖憲扮?賜宀壓?塋承噉?讐傍ザ畯荒稚澎艦岱燦?覽噉?讐傍ダ鏥掴酊寝仔ヅ箋鍔峽蕺軀院K?WM_MENUCHAR嶧連匯軟窟僕議歌方泌和侭幣?
LOWORD (wParam): 忖憲旗鷹?ASCII賜Unicode?
HIWORD (wParam): 僉夲鷹
lParam: 暇汽鞘凹
僉夲鷹頁?
-
0 音?塋承噉?讐傍?
-
MF_POPUP ?塋承噉?讐傍?
-
MF_SYSMENU ?塋章詰概噉?讐傍?
Windows殻會宥械委乎嶧連勧弓公DefWindowProc?万匯違公Windows勧指0?宸氏聞Windows窟竃炬蕗。壓 及噴膨嫗GRAFMENU殻會嶄氏心欺WM_MENUCHAR嶧連議聞喘。
袈箭殻會
斑厘断栖心匯倖酒汽議箭徨。殻會10-4侭幣議MENUDEMO殻會?壓麼暇汽嶄嗤励倖僉夲??File、Edit、Background、Timer才Help?耽匯?脅嚥匯倖起竃塀暇汽屢銭。MENUDEMO峪頼撹阻恷酒汽、恷宥喘議暇汽侃尖荷恬?淫凄盛舜WM_COMMAND嶧連才殊臥wParam議詰忖怏。
MENUDEMO.C
/*---------------------------------------------------------------------
MENUDEMO.C -- Menu Demonstration
(c) Charles Petzold, 1998
-----------------------------------------------------------------------*/
#include <windows.h>
#include "resource.h"
#define ID_TIMER 1
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
TCHAR szAppName[] = TEXT ("MenuDemo") ;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = szAppName ;
wndclass.lpszClassName = szAppName ;
if (!RegisterClass (&wndclass))
{
MessageBox ( NULL, TEXT ("This program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd = CreateWindow ( szAppName, TEXT ("Menu Demonstration"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL) ;
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}
LRESULT CALLBACK WndProc ( HWND hwnd, UINT message, WPARAM wParam,LPARAM lParam)
{
static int idColor [5] = { WHITE_BRUSH, LTGRAY_BRUSH, GRAY_BRUSH,
DKGRAY_BRUSH, BLACK_BRUSH } ;
static int iSelection = IDM_BKGND_WHITE ;
HMENU hMenu ;
switch (message)
{
case WM_COMMAND:
hMenu = GetMenu (hwnd) ;
switch (LOWORD (wParam))
{
case IDM_FILE_NEW:
case IDM_FILE_OPEN:
case IDM_FILE_SAVE:
case IDM_FILE_SAVE_AS:
MessageBeep (0) ;
return 0 ;
case IDM_APP_EXIT:
SendMessage (hwnd, WM_CLOSE, 0, 0) ;
return 0 ;
case IDM_EDIT_UNDO:
case IDM_EDIT_CUT:
case IDM_EDIT_COPY:
case IDM_EDIT_PASTE:
case IDM_EDIT_CLEAR:
MessageBeep (0) ;
return 0 ;
case IDM_BKGND_WHITE: // Note: Logic below
case IDM_BKGND_LTGRAY: // assumes that IDM_WHITE
case IDM_BKGND_GRAY: // through IDM_BLACK are
case IDM_BKGND_DKGRAY: // consecutive numbers in
case IDM_BKGND_BLACK: // the order shown here.
CheckMenuItem (hMenu, iSelection, MF_UNCHECKED) ;
iSelection = LOWORD (wParam) ;
CheckMenuItem (hMenu, iSelection, MF_CHECKED) ;
SetClassLong (hwnd, GCL_HBRBACKGROUND, (LONG)
GetStockObject
(idColor [LOWORD (wParam) - IDM_BKGND_WHITE])) ;
InvalidateRect (hwnd, NULL, TRUE) ;
return 0 ;
case IDM_TIMER_START:
if (SetTimer (hwnd, ID_TIMER, 1000, NULL))
{
EnableMenuItem (hMenu, IDM_TIMER_START, MF_GRAYED) ;
EnableMenuItem (hMenu, IDM_TIMER_STOP, MF_ENABLED) ;
}
return 0 ;
case IDM_TIMER_STOP:
KillTimer (hwnd, ID_TIMER) ;
EnableMenuItem (hMenu, IDM_TIMER_START, MF_ENABLED) ;
EnableMenuItem (hMenu, IDM_TIMER_STOP, MF_GRAYED) ;
return 0 ;
case IDM_APP_HELP:
MessageBox (hwnd, TEXT ("Help not yet
implemented!"),
szAppName, MB_ICONEXCLAMATION | MB_OK) ;
return 0 ;
case IDM_APP_ABOUT:
MessageBox (hwnd,TEXT ("Menu Demonstration
Program\n")
TEXT ("(c) Charles Petzold, 1998"),
szAppName, MB_ICONINFORMATION | MB_OK) ;
return 0 ;
}
break ;
case WM_TIMER:
MessageBeep (0) ;
return 0 ;
case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
MENUDEMO.RC ?姜村? //Microsoft Developer Studio generated resource script. #include "resource.h" #include "afxres.h" ///////////////////////////////////////////////////////////////////////////// // Menu MENUDEMO MENU DISCARDABLE BEGIN POPUP "&File" BEGIN MENUITEM "&New", IDM_FILE_NEW MENUITEM "&Open", IDM_FILE_OPEN MENUITEM "&Save", IDM_FILE_SAVE MENUITEM "Save &As...", IDM_FILE_SAVE_AS MENUITEM SEPARATOR MENUITEM "E&xit", IDM_APP_EXIT END POPUP "&Edit" BEGIN MENUITEM "&Undo", IDM_EDIT_UNDO MENUITEM SEPARATOR MENUITEM "C&ut", IDM_EDIT_CUT MENUITEM "&Copy", IDM_EDIT_COPY MENUITEM "&Paste", IDM_EDIT_PASTE MENUITEM "De&lete", IDM_EDIT_CLEAR END POPUP "&Background" BEGIN MENUITEM "&White", IDM_BKGND_WHITE, CHECKED MENUITEM "&Light Gray", IDM_BKGND_LTGRAY MENUITEM "&Gray", IDM_BKGND_GRAY MENUITEM "&Dark Gray", IDM_BKGND_DKGRAY MENUITEM "&Black", IDM_BKGND_BLACK END POPUP "&Timer" BEGIN MENUITEM "&Start", IDM_TIMER_START MENUITEM "S&top", IDM_TIMER_STOP, GRAYED END POPUP "&Help" BEGIN MENUITEM "&Help...", IDM_APP_HELP MENUITEM "&About MenuDemo...", IDM_APP_ABOUT END END
RESOURCE.H ?姜村? // Microsoft Developer Studio generated include file. // Used by MenuDemo.rc #define IDM_FILE_NEW 40001 #define IDM_FILE_OPEN 40002 #define IDM_FILE_SAVE 40003 #define IDM_FILE_SAVE_AS 40004 #define IDM_APP_EXIT 40005 #define IDM_EDIT_UNDO 40006 #define IDM_EDIT_CUT 40007 #define IDM_EDIT_COPY 40008 #define IDM_EDIT_PASTE 40009 #define IDM_EDIT_CLEAR 40010 #define IDM_BKGND_WHITE 40011 #define IDM_BKGND_LTGRAY 40012 #define IDM_BKGND_GRAY 40013 #define IDM_BKGND_DKGRAY 40014 #define IDM_BKGND_BLACK 40015 #define IDM_TIMER_START 40016 #define IDM_TIMER_STOP 40017 #define IDM_APP_HELP 40018 #define IDM_APP_ABOUT 40019
MENUDEMO.RC彿坿宙峰亀公阻艇協吶暇汽議戻幣。暇汽議兆各葎仝MenuDemo々。寄謹方?朕嗤久?忖銚?宸祥頁傍艇駅倬壓忖銚念囚秘〆&〇。MENUITEM SEPARATOR偃峰頁壓仝Menu Item Properties々斤三崇嶄僉嶄仝Separator々崇恢伏議。廣吭暇汽嶄嗤匯倖?朕醤嗤仝 Checked々僉??総匯倖醤嗤仝Grayed々僉?。珊嗤?仝 Background々起竃塀暇汽嶄議励倖?朕哘乎梓乏會補秘?鳩隠炎紛憲頁參方峙議乏會?云殻會俶勣宸劔。侭嗤暇汽?議炎紛憲協吶壓RESOURCE.H嶄。
輝辺欺起竃塀暇汽仝File々才仝Edit々光?嗤購議WM_COMMAND嶧連扮?MENUDEMO殻會峪聞狼由窟竃炬蕗。仝 Background々起竃塀暇汽双竃MENUDEMO喘栖公嘘尚彭弼議励嶽孖嗤鮫泡。壓MENUDEMO.RC彿坿宙峰亀嶄?仝 White々暇汽??暇汽ID葎IDM_BKGND_WHITE?瓜炎參仝 CHECKED々?万壓暇汽?都円譜協僉嶄炎芝。壓MENUDEMO.C嶄?iSelection議峙瓜兜兵晒葎IDM_BKGND_WHITE。
仝Background々起竃塀暇汽貧議励嶽鮫泡屢札電鰍。輝MENUDEMO.C辺欺匯倖WM_COMMAND嶧連?遇乎嶧連嶄議wParam頁仝 Background々起竃塀暇汽貧議励?岻匯扮?万駅倬貫枠念僉嶄議嘘尚冲弼嶄茅渠僉嶄炎芝?旺委炎芝紗欺仟議嘘尚冲弼貧。葎緩?遍枠勣誼欺暇汽鞘凹?
hMenu = GetMenu (hwnd) ;
CheckMenuItem痕方喘栖函嶧朕念瓜僉嶄議?朕?
CheckMenuItem (hMenu, iSelection, MF_UNCHECKED) ;
iSelection議峙瓜譜協葎wParam議峙?仟議嘘尚冲弼瓜僉嶄?
iSelection = wParam ; CheckMenuItem (hMenu, iSelection, MF_CHECKED) ;
完笥窃艶嶄議嘘尚冲弼噐頁瓜紋算葎仟議嘘尚冲弼?完笥?塋焦瘕魃篶ě湮ё缶??Windows聞喘仟議嘘尚冲弼賠茅完笥。
Timer起竃塀暇汽双竃阻曾倖僉??仝Start々才仝Stop々。蝕兵扮?仝Stop々僉?延葎子弼議?祥崧壓彿坿宙峰亀嶄議暇汽協吶匯劔?。輝艇僉夲仝Start々僉?扮?MENUDEMO編夕尼強匯倖協扮匂?泌惚撹孔?夸涙丼晒仝Start々僉??旺尼喘仝Stop々僉??
EnableMenuItem (hMenu, IDM_TIMER_START, MF_GRAYED) ; EnableMenuItem (hMenu, IDM_TIMER_STOP, MF_ENABLED) ;
輝辺欺匯訳WM_COMMAND嶧連?旺拝wParam吉噐IDM_TIMER_STOP扮?MENUDEMO殻會氏唯峭柴方?尼喘仝 Start々??隼朔涙丼晒仝Stop々僉??
EnableMenuItem (hMenu, IDM_TIMER_START, MF_ENABLED) ; EnableMenuItem (hMenu, IDM_TIMER_STOP, MF_GRAYED) ;
萩廣吭?壓協扮匂峇佩扮?MENUDEMO殻會音辛嬬辺欺wParam吉噐IDM_TIMER_START議WM_COMMAND嶧連。揖劔仇?壓協扮匂購液扮?MENUDEMO殻會匆音辛嬬辺欺wParam吉噐IDM_TIMER_STOP議WM_COMMAND嶧連。
輝MENUDEMO辺欺匯倖WM_COMMAND嶧連?遇乎嶧連議歌方wParam吉噐IDM_APP_ABOUT賜IDM_APP_HELP扮?MENUDEMO殻會?塋紹燦氐虜⊃鬘40?和匯嫗嶄?厘断繍委嶧連崇延葎斤三崇?。
輝MENUDEMO殻會辺欺匯倖WM_COMMAND嶧連?凪歌方wParam吉噐IDM_APP_EXIT扮?万公徭失窟僕匯倖WM_CLOSE嶧連。宸倖嶧連嚥DefWindowProc辺欺WM_SYSCOMMAND嶧連拝wParam吉噐SC_CLOSE扮窟僕公完笥嶧連侃尖殻會議嶧連屢揖。厘断繍壓云嫗朔中初府 POPPAD2扮壅徙聾冩梢宸倖諒籾。