添加普通菜单

首先建立一个win32项目后,点击资源视图,右键项目名-添加-资源,选中Menu,新建
这里写图片描述
之后就可以添加菜单选项了
这里写图片描述
这是制作的菜单的效果
这里写图片描述
添加好资源后,就可以编写代码了,记得包好”resource.h”

# 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 lpCmdLine,
    int iCmdShow
    )
{

    WNDCLASS wndclass;

    wndclass.cbClsExtra = 0;
    wndclass.cbWndExtra = 0;
    wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
    wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wndclass.hInstance = hInstance;
    wndclass.lpfnWndProc = WndProc;
    wndclass.lpszClassName = szAppName;
    wndclass.lpszMenuName = (LPCWSTR)IDR_MENU1;//IDR_MENU1是生成的菜单资         //源的句柄
    wndclass.style = CS_HREDRAW | CS_VREDRAW;

    if (!RegisterClass(&wndclass))//注册窗口类
    {
        MessageBox(NULL, TEXT("Program requires windows NT!"), szAppName, MB_ICONERROR);
        return 0;
    }

    HWND hwnd;
    hwnd = CreateWindow(szAppName,  TEXT("Menu Demonstrator"),WS_OVERLAPPEDWINDOW, 
        CW_USEDEFAULT, CW_USEDEFAULT,
        CW_USEDEFAULT, CW_USEDEFAULT, NULL,NULL, hInstance, NULL);
    ShowWindow(hwnd, SW_SHOW);
    UpdateWindow(hwnd);

    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return 0;
}


LRESULT CALLBACK WndProc(HWND hwnd,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam
    )
{
    static int idColor[5] = { WHITE_BRUSH, LTGRAY_BRUSH, GRAY_BRUSH, DKGRAY_BRUSH, BLACK_BRUSH };//注意resource.h里5种颜色的宏要连续
    static int iSelection = IDM_BKGND_GRAY;
    HMENU hMenu;

    switch (uMsg)
    {
    case WM_COMMAND:
        hMenu = GetMenu(hwnd);

        switch (LOWORD(wParam))//wParam的低位字对应菜单ID
        {
        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(adj. 连贯的;连续不断的) 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(实施;执行adj.应用的)!"),
                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_CLOSE:
        PostQuitMessage(0);
        //DestroyWindow(hwnd);
        return 0;
  }


        return DefWindowProc(hwnd, uMsg, wParam, lParam);

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值