回 帖 发 新 帖 刷新版面

主题:各位高手,帮帮忙!

我做了一个界面,添加了菜单资源,程序可以运行,但是看不到菜单,只有界面,为什么,好想少了mak后缀的文件,怎么解决?我是初学者,求好心人帮忙.谢谢!

回复列表 (共4个回复)

沙发

你贴出你的代码给大家看看就知道什么问题了。

板凳

#include<windows.h>
#include"resource.h"

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

HINSTANCE hInst;
TCHAR szAppName[] = TEXT("PopMenu");

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                   PSTR szCmdLine, int iCmdShow)
{
    HWND  hwnd;
    MSG   msg;
    WNDCLASS   wndclass;

    wndclass.cbClsExtra       = 0;
    wndclass.cbClsExtra       = 0;
    wndclass.hbrBackground    = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wndclass.hCursor          = LoadCursor(NULL, IDC_ARROW);
    wndclass.hIcon            = LoadIcon(NULL, szAppName);
    wndclass.hInstance        = hInstance;
    wndclass.lpfnWndProc      = WndProc;
    wndclass.lpszClassName    = szAppName;
    wndclass.lpszMenuName     = NULL;
    wndclass.style            = CS_HREDRAW | CS_VREDRAW;
    
    if(!RegisterClass(&wndclass))
        return FALSE;

    hInst = hInstance;

    hwnd = CreateWindow(szAppName, TEXT("Popup 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 HMENU  hMenu;
    static int  idColor[5] = {WHITE_BRUSH, LTGRAY_BRUSH,GRAY_BRUSH,
                              DKGRAY_BRUSH, BLACK_BRUSH};
    static int  iSelection = IDM_BKGND_WHITE;
    POINT       point;

    switch(message)
    {
    case WM_CREATE:
        hMenu = LoadMenu(hInst, szAppName);
        hMenu = GetSubMenu(hMenu, 0);
        return 0;

    case WM_RBUTTONUP:
        point.x = LOWORD(lParam);
        point.y = HIWORD(lParam);
        ClientToScreen(hwnd, &point);

        TrackPopupMenu(hMenu, TPM_RIGHTBUTTON,point.x, point.y,
                       0, hwnd, NULL);
        return 0;

    case WM_COMMAND:
        switch(LOWORD(wParam))
        {
        case IDM_FILE_NEW:
        case IDM_FILE_OPEN:
        case IDM_FILE_SAVE:
        case IDM_EDIT_CUT:
        case IDM_EDIT_COPY:
        case IDM_EDIT_PASTE:
            MessageBeep(0);
            return 0;

        case IDM_BKGND_WHITE:
        case IDM_BKGND_LTGRAY:
        case IDM_BKGND_GRAY:
        case IDM_BKGND_DKGRAY:
        case IDM_BKGND_BLACK:
            
            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_APP_ABOUT:
            MessageBox(hwnd, TEXT("Popup Menu DemoNstration Program\n"),
                szAppName, MB_ICONINFORMATION | MB_OK);
            return 0;

        case IDM_APP_EXIT:
            SendMessage(hwnd, WM_CLOSE, 0, 0);
            return 0;

        case IDM_APP_HELP:
            MessageBox(hwnd, TEXT("学习编程太难了!加油呀!"),
                szAppName, MB_ICONEXCLAMATION |MB_OK);
            return 0;
        }
        break;
        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;
    }
    return DefWindowProc(hwnd, message, wParam, lParam);
}

3 楼

这是源代码,请帮忙!

4 楼

hMenu = LoadMenu(hInst, szAppName);要在 CreateWindow 前, CreateWindow里有个参数就是管菜单的,用hMenu填充就行了。

我来回复

您尚未登录,请登录后再回复。点此登录或注册