(一)菜單和加速鍵
#include<windows.h><br />#include"Resource.h"</p><p>TCHARszBuffer[128];<br />TCHARszClassName[] = TEXT("Menu Example");<br />TCHARszCaptionMain[] = TEXT("Menu");<br />TCHAR szCaption[] = TEXT("菜單選擇");<br />TCHARszMenuHelp[] = TEXT("說明主題(&H)");<br />TCHARszMenuAbout[] = TEXT("關於本程式(&A)...");<br />TCHARszFormat[] = TEXT("您選擇了功能表命令: %08x");<br />HWNDhMainWnd;<br />HMENUhMenu;<br />HMENUhSubMenu;<br />HACCELhAccelerator;</p><p>VOID DisplayMenuItem(DWORD dwCommandID)<br />{<br />wsprintf(szBuffer, szFormat, dwCommandID);<br />MessageBox(hMainWnd, szBuffer, szCaption, MB_OK);<br />}</p><p>VOID Quit()<br />{<br />DestroyWindow(hMainWnd);<br />PostQuitMessage(0);<br />}</p><p>LRESULT CALLBACK ProcWinMain(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)<br />{<br />POINTstPt;<br />HMENUhSysMenu;</p><p>switch(uMsg)<br />{<br />case WM_CREATE:<br />hSubMenu = GetSubMenu(hMenu, 1);<br />hSysMenu = GetSystemMenu(hWnd, FALSE);<br />AppendMenu(hSysMenu, MF_SEPARATOR, 0, NULL);<br />AppendMenu(hSysMenu, 0, IDM_HELP, szMenuHelp);<br />AppendMenu(hSysMenu, 0, IDM_ABOUT, szMenuAbout);<br />return 0;</p><p>case WM_COMMAND:<br />DisplayMenuItem(wParam);<br />switch(LOWORD(wParam))<br />{<br />case IDM_EXIT:<br />Quit();<br />return 0;<br /> case IDM_TOOLBAR:<br />case IDM_TOOLBARTEXT:<br />case IDM_INPUTBAR:<br />case IDM_STATUSBAR:<br />if(MF_CHECKED == GetMenuState(hMenu, (UINT)wParam, MF_BYCOMMAND))<br />{<br />CheckMenuItem(hMenu, (UINT)wParam, MF_UNCHECKED);<br />}<br />else<br />{<br />CheckMenuItem(hMenu, (UINT)wParam, MF_CHECKED);<br />}<br />return 0;<br />case IDM_BIG:<br />case IDM_SMALL:<br />case IDM_LIST:<br />case IDM_DETAIL:<br />CheckMenuRadioItem(hMenu, IDM_BIG, IDM_DETAIL, LOWORD(wParam), MF_BYCOMMAND);<br />return 0;<br />}<br />break;<br />caseWM_SYSCOMMAND:<br />switch(LOWORD(wParam))<br />{<br />caseIDM_HELP:<br />caseIDM_ABOUT:<br />DisplayMenuItem(wParam);<br />return 0;<br />default:<br />return DefWindowProc(hWnd, uMsg, wParam, lParam);<br />}<br />break;<br />case WM_RBUTTONDOWN:<br />GetCursorPos(&stPt);<br />TrackPopupMenu(hSubMenu, TPM_LEFTALIGN, stPt.x, stPt.y, 0, hMainWnd, NULL);<br />return 0;<br />case WM_CLOSE:<br />Quit();<br />return 0;<br />}<br />return DefWindowProc(hWnd, uMsg, wParam, lParam);<br />}</p><p>int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)<br />{<br />WNDCLASSEXstWndCls;<br />MSGstMsg;</p><p>RtlZeroMemory(&stWndCls, sizeof(stWndCls));<br />stWndCls.hCursor = LoadCursor(NULL, IDC_ARROW);<br />stWndCls.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MAIN));<br />stWndCls.hIconSm = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MAIN));<br />stWndCls.cbWndExtra = 0;<br />stWndCls.cbClsExtra = 0;<br />stWndCls.hInstance = hInstance;<br />stWndCls.cbSize = sizeof(WNDCLASSEX);<br />stWndCls.style = CS_HREDRAW | CS_VREDRAW;<br />stWndCls.lpfnWndProc = ProcWinMain;<br />stWndCls.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);<br />stWndCls.lpszClassName = szClassName;<br />stWndCls.lpszMenuName = NULL;</p><p>RegisterClassEx(&stWndCls);</p><p>hMenu = LoadMenu(hInstance, MAKEINTRESOURCE(IDM_MAIN));<br />hAccelerator = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDA_ACCELERATOR));<br />hMainWnd = CreateWindowEx(WS_EX_CLIENTEDGE, szClassName, szCaptionMain,<br />WS_OVERLAPPEDWINDOW, 100, 100, 600, 400, NULL, hMenu, hInstance, NULL);</p><p>ShowWindow(hMainWnd, SW_SHOWNORMAL);<br />UpdateWindow(hMainWnd);</p><p>while(GetMessage(&stMsg, NULL, 0, 0))<br />{<br />if(0 == TranslateAccelerator(hMainWnd, hAccelerator, &stMsg))<br />{<br />TranslateMessage(&stMsg);<br />DispatchMessage(&stMsg);<br />}<br />}<br />return stMsg.wParam;<br />}