首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

为啥窗口不显示菜单呢

2013-07-04 
为什么窗口不显示菜单呢?#include windows.h#include resource.h#define ID_TIMER 1LRESULT CALLBACK

为什么窗口不显示菜单呢?


#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 szCmdLine, int iCmdShow)
{
     HWND     hwnd ;
     MSG      msg ;
     WNDCLASS wndclass ;
     
     wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
     wndclass.lpfnWndProc   = WndProc ;
     wndclass.cbClsExtra    = 0 ;
     wndclass.cbWndExtra    = 0 ;
     wndclass.hInstance     = hInstance ;
     wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
     wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
     wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
     wndclass.lpszMenuName  = szAppName ;
     wndclass.lpszClassName = szAppName ;
     
     if (!RegisterClass (&wndclass))
     {
          MessageBox (NULL, TEXT ("This program requires Windows NT!"),
                      szAppName, MB_ICONERROR) ;
          return 0 ;
     }
     
     hwnd = CreateWindow (szAppName, TEXT ("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 int idColor[5] = {WHITE_BRUSH, LTGRAY_BRUSH, GRAY_BRUSH, DKGRAY_BRUSH, BLACK_BRUSH};
static int iSelection = IDM_BKGND_WHITE;
HMENU hMenu;

switch(message)
{
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 (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 numbers in
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);
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!"), 
       szAppName, MB_ICONINFORMATION | MB_OK);
return 0;
}
break;
case WM_TIMER:
MessageBeep(0);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, message, wParam, lParam);


}


我用资源脚本添加一些菜单项怎么运行后窗口不显示相关菜单呢?
[解决办法]
估计里面有个 #define ID_MENU1 101
也或还有     #define MENUDOME 102

把这两句删除掉,试试
[解决办法]
如果要设菜单为MENUDEMO.
wndclass.lpszMenuName  = "MENODEMO";

再在resource.h里面去掉#define MENODEMO 101 这个

确定你的资源rc 文件中是
// Menu
//前面一个名字是        
MENUDEMO MENU DISCARDABLE
        
BEGIN
        
   POPUP "&File"
        
   BEGIN
        
                  MENUITEM "&New",                             IDM_FILE_NEW
        
                MENUITEM "&Open",                            IDM_FILE_OPEN


        
                  MENUITEM "&Save",                            IDM_FILE_SAVE
        
                  MENUITEM "Save &As...",              IDM_FILE_SAVE_AS
        ...........


更简单的可以这样做,如果你建一个菜单标识为IDR_MENU1.

wndclass.lpszMenuName  = MAKEINTRESOURCE(IDR_MENU1);
   

热点排行