Windows环境下32位汇编程序设计C版code--第五章(一)
(一)菜單和加速鍵
?
#include <windows.h> #include "Resource.h"TCHAR szBuffer[128]; TCHAR szClassName[] = TEXT("Menu Example"); TCHAR szCaptionMain[] = TEXT("Menu"); TCHAR szCaption[] = TEXT("菜單選擇"); TCHAR szMenuHelp[] = TEXT("幫助主題(&H)"); TCHAR szMenuAbout[] = TEXT("關(guān)于本程序(&A)..."); TCHAR szFormat[] = TEXT("您選擇了菜單命令: %08x"); HWND hMainWnd; HMENU hMenu; HMENU hSubMenu; HACCEL hAccelerator;VOID DisplayMenuItem(DWORD dwCommandID) {wsprintf(szBuffer, szFormat, dwCommandID);MessageBox(hMainWnd, szBuffer, szCaption, MB_OK); }VOID Quit() {DestroyWindow(hMainWnd);PostQuitMessage(0); }LRESULT CALLBACK ProcWinMain(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {POINT stPt;HMENU hSysMenu;switch(uMsg){case WM_CREATE:hSubMenu = GetSubMenu(hMenu, 1);hSysMenu = GetSystemMenu(hWnd, FALSE);AppendMenu(hSysMenu, MF_SEPARATOR, 0, NULL);AppendMenu(hSysMenu, 0, IDM_HELP, szMenuHelp);AppendMenu(hSysMenu, 0, IDM_ABOUT, szMenuAbout);return 0;case WM_COMMAND:DisplayMenuItem(wParam);switch(LOWORD(wParam)){case IDM_EXIT:Quit();return 0;case IDM_TOOLBAR:case IDM_TOOLBARTEXT:case IDM_INPUTBAR:case IDM_STATUSBAR:if(MF_CHECKED == GetMenuState(hMenu, (UINT)wParam, MF_BYCOMMAND)){CheckMenuItem(hMenu, (UINT)wParam, MF_UNCHECKED);}else{CheckMenuItem(hMenu, (UINT)wParam, MF_CHECKED);}return 0;case IDM_BIG: case IDM_SMALL: case IDM_LIST: case IDM_DETAIL:CheckMenuRadioItem(hMenu, IDM_BIG, IDM_DETAIL, LOWORD(wParam), MF_BYCOMMAND);return 0;}break;case WM_SYSCOMMAND:switch(LOWORD(wParam)){case IDM_HELP:case IDM_ABOUT:DisplayMenuItem(wParam);return 0;default:return DefWindowProc(hWnd, uMsg, wParam, lParam);}break;case WM_RBUTTONDOWN:GetCursorPos(&stPt);TrackPopupMenu(hSubMenu, TPM_LEFTALIGN, stPt.x, stPt.y, 0, hMainWnd, NULL);return 0;case WM_CLOSE:Quit();return 0;}return DefWindowProc(hWnd, uMsg, wParam, lParam); }int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) {WNDCLASSEX stWndCls;MSG stMsg;RtlZeroMemory(&stWndCls, sizeof(stWndCls));stWndCls.hCursor = LoadCursor(NULL, IDC_ARROW);stWndCls.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MAIN));stWndCls.hIconSm = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MAIN));stWndCls.cbWndExtra = 0;stWndCls.cbClsExtra = 0;stWndCls.hInstance = hInstance;stWndCls.cbSize = sizeof(WNDCLASSEX);stWndCls.style = CS_HREDRAW | CS_VREDRAW;stWndCls.lpfnWndProc = ProcWinMain;stWndCls.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);stWndCls.lpszClassName = szClassName;stWndCls.lpszMenuName = NULL;RegisterClassEx(&stWndCls);hMenu = LoadMenu(hInstance, MAKEINTRESOURCE(IDM_MAIN));hAccelerator = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDA_ACCELERATOR));hMainWnd = CreateWindowEx(WS_EX_CLIENTEDGE, szClassName, szCaptionMain, WS_OVERLAPPEDWINDOW, 100, 100, 600, 400, NULL, hMenu, hInstance, NULL);ShowWindow(hMainWnd, SW_SHOWNORMAL);UpdateWindow(hMainWnd);while(GetMessage(&stMsg, NULL, 0, 0)){if(0 == TranslateAccelerator(hMainWnd, hAccelerator, &stMsg)){TranslateMessage(&stMsg);DispatchMessage(&stMsg);}}return stMsg.wParam; }
總結(jié)
以上是生活随笔為你收集整理的Windows环境下32位汇编程序设计C版code--第五章(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NS各种常用资料
- 下一篇: Windows环境下32位汇编程序设计C