问一个C++程序错在哪了?

2025-02-07 11:34:41
推荐回答(3个)
回答1:

`UNIT' has not been declared
char lpszClassName[]="窗口";标点符号中文

回答2:

有几个小问题。
1.LRESULT CALLBACK WndProc(HWND,UNIT,WPARAM,LPARAM);这句中的UNIT应该为UINT
2.有几个分号写成了大写:应该在英文半角下输入分号;
3.wc.hInstance=hInstance;//定义应用程序的实例句柄,这里的hInstance应该小写hinstance
同样在hwnd=CreateWindow()中的hInstance应该为hinstance
4.代码里面有很多不能识别的空字符,你要将它删除,可能是在网上copy代码时识别不了的。
改正后的程序如下:
#include
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);//这里的UNIT应该是UINT
//主函数
int WINAPI WinMain(HINSTANCE hinstance,
HINSTANCE preInstance,
LPSTR lpCmdLine,
int nCmdShow
)
{
HWND hwnd; //定义窗口句柄
MSG msg; //定义用来存储消息的变量
char lpszClassName[]="窗口"; //窗口类型名
WNDCLASS wc;//定义一个窗口类型变量
wc.style=0;//窗口样式,一般置为0
wc.lpfnWndProc=WndProc;//指向窗口函数的指针
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hInstance=hinstance;//定义应用程序的实例句柄,这里的hInstance应该小写hinstance
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);//窗口的图标
wc.hCursor=LoadCursor(NULL,IDC_ARROW);//窗口的光标,这里的Cusor应该为hCursor
wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//设置用户区背景颜色
wc.lpszMenuName=NULL;//窗口的菜单资源名
wc.lpszClassName=lpszClassName;//窗口的类型名

RegisterClass(&wc);//注册窗口类

hwnd=CreateWindow( lpszClassName, //创建窗口//窗口类型
"windows",//窗口名字
WS_OVERLAPPEDWINDOW,//窗口风格
120,50,800,600,//左上角坐标、窗口宽长度
NULL,//父窗口的句柄
NULL,//主菜单的句柄
hinstance, //应用程序实例句柄,同样要小写
NULL); //该值为NULL

ShowWindow(hwnd,nCmdShow);//显示窗口,参数:窗口句柄、窗口显示方式
UpdateWindow(hwnd);

while(GetMessage(&msg,NULL,0,0)) //消息循环
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
//-------------------------------------------
//处理消息的窗口函数
LRESULT CALLBACK WndProc(HWND hwnd,
UINT message,
WPARAM wParam, //附加参数1
LPARAM lParam) //附加参数2
{
switch(message)
{
case WM_LBUTTONDOWN: //鼠标左键按下消息
{
MessageBeep(0);//可以发出声音的API函数
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,message,wParam,lParam);

}
return 0;
}

回答3:

第一处错误 wc.hInstance=hInstance; //定义应用程序的实例句柄 这里的大小写名字写错了,修改为wc.hInstance=hinstance; //定义应用程序的实例句柄

第二处
wc.Cursor=LoadCursor(NULL,IDC_ARROW);//窗口的光标 你打错名字了,修改为
wc.hCursor=LoadCursor(NULL,IDC_ARROW);//窗口的光标

第三处
hwnd=CreateWindow( lpszClassName,"windows",WS_OVERLAPPEDWINDOW,120,50,800,600,NULL,NULL,hInstance,NULL);//该值为NULL
跟第一处一样hInstance修改为hinstance

hwnd=CreateWindow( lpszClassName,"windows",WS_OVERLAPPEDWINDOW,120,50,800,600,NULL,NULL,hinstance,NULL);//该值为NULL

最终代码

#include

LRESULT CALLBACK WndProc(HWND,unsigned int,WPARAM,LPARAM);
//主函数
int WINAPI WinMain(HINSTANCE hinstance,
HINSTANCE preInstance,
LPSTR lpCmdLine,
int nCmdShow
)
{
HWND hwnd; //定义窗口句柄
MSG msg; //定义用来存储消息的变量
char lpszClassName[]="窗口"; //窗口类型名
WNDCLASS wc; //定义一个窗口类型变量
wc.style=0; //窗口样式,一般置为0
wc.lpfnWndProc=WndProc; //指向窗口函数的指针
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hInstance=hinstance; //定义应用程序的实例句柄
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);//窗口的图标
wc.hCursor=LoadCursor(NULL,IDC_ARROW);//窗口的光标
wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//设置用户区背景颜色
wc.lpszMenuName=NULL;//窗口的菜单资源名
wc.lpszClassName=lpszClassName;//窗口的类型名

RegisterClass(&wc);//注册窗口类

hwnd=CreateWindow( lpszClassName,"windows",WS_OVERLAPPEDWINDOW,120,50,800,600,NULL,NULL,hinstance,NULL);//该值为NULL
ShowWindow(hwnd,nCmdShow); //显示窗口,参数:窗口句柄、窗口显示方式
UpdateWindow(hwnd);

while(GetMessage(&msg,NULL,0,0)) //消息循环
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
//-------------------------------------------
//处理消息的窗口函数
LRESULT CALLBACK WndProc(HWND hwnd,
UINT message,
WPARAM wParam, //附加参数1
LPARAM lParam) //附加参数2
{
switch(message)
{
case WM_LBUTTONDOWN: //鼠标左键按下消息
{
MessageBeep(0); //可以发出声音的API函数
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,message,wParam,lParam);

}
return 0;
}