鱼C论坛

 找回密码
 立即注册
查看: 3688|回复: 3

求助啊 关于菜单API

[复制链接]
发表于 2013-9-12 20:10:51 | 显示全部楼层 |阅读模式
20鱼币
              我在windows程序设计这本书上发现
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 ;这效果是这样


为什么同样的代码在我的程序里面编译出来是不行的?
我这是获取了第一个菜单的弹出菜单了 而这本书是直接获取了整个菜单项 这是神马原因?下面是代码,如果这样实在不行的话,希望站出来一位大神教教我实现动态弹出整个菜单项!
#include <windows.h>

#include "resource.h"

#define ID_TIMER 1

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

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR szCmdLine,int iCmdShow)
{
TCHAR szAppName[5]=TEXT("Menu");

HWND hwnd;
WNDCLASS wndclass;
MSG msg;

wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hbrBackground=(HBRUSH)::GetStockObject(WHITE_BRUSH);
wndclass.hCursor=::LoadCursor(0,IDC_ARROW);
wndclass.hIcon=::LoadIcon(0,IDI_APPLICATION);
wndclass.hInstance=hInstance;
wndclass.lpfnWndProc=WndProc;
wndclass.lpszClassName=szAppName;
wndclass.lpszMenuName=0;
wndclass.style=CS_VREDRAW | CS_HREDRAW;

if(!::RegisterClass(&wndclass))
{
        ::MessageBox(0,TEXT("May it Need WinNT"),szAppName,MB_ICONERROR);
        return 0;
}

hwnd=::CreateWindow(szAppName,TEXT("Menu"),WS_OVERLAPPEDWINDOW  ,
                                        CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
                                        0,/*::LoadMenu(hInstance,MAKEINTRESOURCE(IDR_MENU1))*/0,hInstance,0);

::ShowWindow(hwnd,iCmdShow);
::UpdateWindow(hwnd);

while(::GetMessage(&msg,0,0,0))
{
        ::TranslateMessage(&msg);
        ::DispatchMessage(&msg);
}
return msg.wParam;
}





LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
        static int iColor[5] = { WHITE_BRUSH , GRAY_BRUSH , LTGRAY_BRUSH ,
                                                         DKGRAY_BRUSH ,BLACK_BRUSH };
        static int iSelection = IDM_BKGND_WHITE ;

        static HMENU hMenu, hMenuPopup;

        POINT pt;

        switch(message)
        {
        case WM_CREATE:

                hMenu = ::LoadMenu(((LPCREATESTRUCT)lParam)->hInstance,MAKEINTRESOURCE(IDR_MENU1));
                hMenu = ::GetSubMenu(hMenu, 0);

                return 0;
       
        case WM_RBUTTONUP:

                pt.x=LOWORD(lParam);
                pt.y=HIWORD(lParam);
                ::ClientToScreen(hwnd, &pt);

                ::TrackPopupMenu(hMenu, TPM_RIGHTBUTTON, pt.x, pt.y, 0, hwnd, 0);

                return 0;

        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(-1);
                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:
        case IDM_BKGND_GRAY:
        case IDM_BKGND_LTGRAY:
        case IDM_BKGND_BLACK:
        case IDM_BKGND_DKGRAY:

                ::CheckMenuItem(hMenu,iSelection,MF_UNCHECKED);
                iSelection=LOWORD(wParam);
                ::CheckMenuItem(hMenu,iSelection,MF_CHECKED);
               
                ::SetClassLong(hwnd,GCL_HBRBACKGROUND,
                        (long)::GetStockObject(iColor[iSelection-IDM_BKGND_WHITE]));

                ::InvalidateRect(hwnd,0,true);
                return 0;

        case IDM_TIMER_START:

                if(::SetTimer(hwnd,ID_TIMER,1000,0))
                {
                        ::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:

                TCHAR szBuffer[5];
                int iLength;

                ::GetClassName(hwnd,szBuffer,5);

                ::MessageBox(hwnd,TEXT("Help Not Yet Prepared"),szBuffer,MB_OK);
                return 0;

        case IDM_APP_ABOUT:

                ::MessageBox(hwnd , TEXT("It's My Program!") , TEXT("Luo Xuan") , MB_OK);
                return 0;

        }
        break;

        case WM_TIMER:
                //::MessageBox(0, TEXT("Ca"), 0, MB_OK);
                ::MessageBeep(-1);
                return 0;

        case WM_DESTROY:
                ::PostQuitMessage(0);
                return 0;
        }
        return ::DefWindowProc(hwnd , message , wParam , lParam);
}


New.jpg
QQ图片20130912200412.jpg
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-9-12 20:12:43 | 显示全部楼层
自己给自己顶上去!求解救!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-9-12 20:28:55 | 显示全部楼层
谢谢广大鱼友,我已经发现了错误,实为我自己粗心!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-9-12 23:40:49 | 显示全部楼层
                hMenu = ::GetSubMenu(hMenu, 0);
这行删掉吧
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-6 07:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表