读书人

无效定义编译过了界面就是不出来?

发布时间: 2012-02-27 10:00:22 作者: rapoo

无效定义,编译过了,界面就是不出来?
在C中建立一个菜单,但是就显示时里的项目是无效的定义,此问题1,问题了,就是将这些问题//取消掉,单单只是窗口一运行就退出,怎么也看不出那里错,报错是:The thread 0xD5C has exited with code 10 (0xA).
Menu.exe ' has exited with code 0 (0x0).

全部的程序如下:第一个问题的报错如下:
# include <windows.h>
# include <string.h>
# include "menu.h "
# include "resource.h "

HWND hWndMain;
HINSTANCE hInst;

int APIENTRY WinMain(
HINSTANCE hInstance,HINSTANCE hPrevInstace,
LPSTR lpCmdline, int nCmdShow)
{
MSG msg;
HACCEL hAccel;

if (!InitApplication(hInstance))
return(FALSE);
if (!InitInstance(hInstance,nCmdShow))
return(FALSE);
//装入快捷表资源
hAccel = LoadAccelerators(hInstance, "MenuAppAccel ");
while(GetMessage(&msg,NULL,0,0))
{
//依据快捷方式,把键盘消息转译为菜单命令消息。
if (!TranslateAccelerator(hWndMain,hAccel,&msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return(msg.wParam);
}

BOOL InitApplication(HINSTANCE hInstance)
{
WNDCLASSEX wcexMenuApp;
wcexMenuApp.cbSize = sizeof(WNDCLASSEX);
wcexMenuApp.style =0;
wcexMenuApp.lpfnWndProc =(WNDPROC)MainWndProc;
wcexMenuApp.cbClsExtra = 0;
wcexMenuApp.hInstance = hInstance;
wcexMenuApp.hIcon =LoadIcon(hInstance, "MenuAppIcon ");
wcexMenuApp.hCursor = LoadCursor(NULL,IDC_ARROW);
wcexMenuApp.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wcexMenuApp.lpszMenuName= "MenuAppMenu ";
wcexMenuApp.lpszClassName = "MenuAppWClass ";
wcexMenuApp.hIconSm = NULL;//LoadIcon(hInstance. "SMALLICON ");

return (RegisterClassEx(&wcexMenuApp));

}

BOOL InitInstance (HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
hInst = hInstance;
hWnd = CreateWindow( "MenuAppWClass ", "菜单示范程序 ",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL,NULL,hInstance,NULL);
if (!hWnd)
return (FALSE);
hWndMain = hWnd;
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
return(TRUE);
}
LRESULT APIENTRY MainWndProc(
HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
static CHAR szbuf[128];
HDC hdc;
PAINTSTRUCT ps;
RECT rel = {0,0,100,30};
UINT idCommand;
static BOOL bFontStyle[4];

switch(message)


{
case WM_CREATE:
InitAlignMenu(hWnd);

//对菜单项的状态进行初始化
CheckMenuRadioItem(GetMenu(hWnd),IDM_ALIGNLEFT,IDM_ALIGNRIGHT,IDM_ALIGNLEFT,
MF_BYCOMMAND);
CheckMenuRadioItem(GetMenu(hWnd),IDM_SMALLFONTSIZE,IDM_LARGEFONTSIZE,IDM_SMALLFONTSIZE,
MF_BYCOMMAND);
EnableMenuItem(GetMenu(hWnd),IDM_EDITPASTE,MF_BYCOMMAND | MF_GRAYED);
bFontStyle[0] = bFontStyle[1] = bFontStyle[2] = bFontStyle[3] = FALSE;
CheckMenuItem(GetMenu(hWnd),IDM_BOLD,MF_BYCOMMAND|MF_UNCHECKED);
CheckMenuItem(GetMenu(hWnd),IDM_ITALIC,MF_BYCOMMAND|MF_UNCHECKED);
CheckMenuItem(GetMenu(hWnd),IDM_UNDERLINE,MF_BYCOMMAND | MF_UNCHECKED);
CheckMenuItem(GetMenu(hWnd),IDM_STRIKEOUT,MF_BYCOMMAND | MF_UNCHECKED);
break;
case WM_PAINT:
{
CHAR szText[] = "请选择菜单项,或使用菜单快捷键: ";
hdc = BeginPaint(hWnd,&ps);
TextOut(hdc,20,20,szText,lstrlen(szText));
EndPaint(hWnd,&ps);
}
break;
case WM_SIZE:
break;
case WM_COMMAND:
idCommand=LOWORD(wParam);

switch(idCommand)
{
case IDM_BOLD:
case IDM_ITALIC:
case IDM_UNDERLINE:
case IDM_STRIKEOUT:
bFontStyle[idCommand - IDM_BOLD]=!bFontStyle[idCommand - IDM_BOLD];
CheckMenuItem(GetMenu(hWnd),idCommand,MF_BYCOMMAND | bFontStyle
[idCommand - IDM_BOLD]? MF_CHECKED:MF_UNCHECKED);
break;
case IDM_SHOWTOOLBAR:
case IDM_SHOWSTATUSBAR:
if (GetMenuState(GetMenu(hWnd),idCommand,MF_BYCOMMAND&MF_CHECKED))
CheckMenuItem(GetMenu(hWnd),idCommand,MF_BYCOMMAND | MF_UNCHECKED);
else
CheckMenuItem(GetMenu(hWnd),idCommand,MF_BYCOMMAND | MF_CHECKED);
break;

case IDM_ALIGENLEFT:
case IDM_ALIGENCENTER:
case IDM_ALIGNRIGHT:
CheckMenuRadioItem(GetMenu(hWnd),IDM_ALIGNLEFT,IDM_ALIGNRIGHT,idCommand,
MF_BYCOMMAND);
break;
case IDM_SMALLFONTSIZE:
case IDM_NORMALFONTSIZE:


case IDM_LARGEFONTSIZE:
CheckMenuRadioItem(GetMenu(hWnd),
IDM_SMALLFONTSIZE,IDM_LARGEFONTSIZE,idCommand,MF_BYCOMMAND);
break;
case IDM_EDITUNDO:
EnableMenuItem(GetMenu(hWnd),IDM_EDITUNDO,MF_BYCOMMAND | MF_GRAYED);
break;
case IDM_EDITCOPY:
case IDM_EDITCUT:
EnableMenuItem(GetMenu(hWnd),
IDM_EDITPASTE,MF_BYCOMMAND | MF_ENABLED);
break;
case IDM_EDITDELETE:
EnableMenuItem(GetMenu(hWnd),IDM_EDITPASTE,MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(GetMenu(hWnd),IDM_EDITUNDO,MF_BYCOMMAND | MF_ENABLED);
break;
case IDM_ABOUT:
MessageBox(hWnd, "这是菜单示范程序!\n\n张波编写 ", "关于 ", MB_OK | MB_ICONINFORMATION);
break;
case IDM_EXIT:
PostQuitMessage(0);
break;
default:
return (DefWindowProc(hWnd,message,wParam,lParam));
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return (DefWindowProc(hWnd,message,wParam,lParam));
}
return 0;
}
/***************************************************************************
* 函数:InitAlignMenu(HWND) *
* 用途:在主菜单中插入[格式]下拉式菜单,并追加菜单项 *
***************************************************************************/
VOID InitAlignMenu(HWND hWnd)
{
HMENU hMenuMain; /*主菜单句柄*/
HMENU hMenuAlign; /*[格式]下拉式菜单句柄*/

/*检取主菜单句柄 。*/
hMenuMain = GetMenu(hWnd);
/*创建一个初始为空的下拉式主菜单*/
hMenuAlign = CreatePopupMenu();
/*把新的下拉式菜单插入到主菜单的第四个位置,并加上字符串。*/
InsertMenu(hMenuMain,(UINT)3,MF_BYPOSITION | MF_STRING |MF_POPUP,(UINT)hMenuAlign, "格式(&M) ");
/*把三种对齐方式的菜单项分别追加到[格式]菜单中。*/


AppendMenu(hMenuAlign,MF_STRING,IDM_ALIGNLEFT,(LPCTSTR) "左对齐 ");
AppendMenu(hMenuAlign,MF_STRING,IDM_ALIGNCENTER,(LPCTSTR) "居中对齐 ");
AppendMenu(hMenuAlign,MF_STRING,IDM_ALIGNRIGHT,(LPCTSTR) "右对齐 ");
return;
}

报错如下:
Menu.cpp
D:\chess\C++\menu\Menu.cpp(84) : error C2065: 'IDM_ALIGNLEFT ' : undeclared identifier
D:\chess\C++\menu\Menu.cpp(84) : error C2065: 'IDM_ALIGNRIGHT ' : undeclared identifier
D:\chess\C++\menu\Menu.cpp(126) : error C2065: 'IDM_ALIGENLEFT ' : undeclared identifier
D:\chess\C++\menu\Menu.cpp(126) : error C2051: case expression not constant
D:\chess\C++\menu\Menu.cpp(127) : error C2065: 'IDM_ALIGENCENTER ' : undeclared identifier
D:\chess\C++\menu\Menu.cpp(127) : error C2051: case expression not constant
D:\chess\C++\menu\Menu.cpp(128) : error C2051: case expression not constant
D:\chess\C++\menu\Menu.cpp(185) : error C2065: 'IDM_ALIGNCENTER ' : undeclared identifier
Error executing cl.exe.

[解决办法]
界面不出来可能原因很多,DEBUG一下,看看HWND的值。

读书人网 >C++

热点推荐