代码无法编译,求解答

ynuxcc 2011-08-24 12:39:38
#include<windows.h>
#include<stdio.h>

LRESULT CALLBACK WinSunProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd
)
{
WNDCLASS wndcls;
wndcls.cbClsExtra=0;
wndcls.cbWndExtra=0;
wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wndcls.hCursor=LoadCursor(NULL,IDC_APPSTARTING);
wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);
wndcls.hInstance=hInstance;
wndcls.lpfnWndProc=WinSunProc;
wndcls.lpszClassName="xiaopi";
wndcls.lpszMenuName=NULL;
wndcls.style=CS_HREDRAW | CS_VREDRAW;
RegisterClass(&wndcls);

HWND hwnd;
hwnd=CreateWindow("xiaopi","窗口",WS_OVERLAPPEDWINDOW,
0,0,800,600,NULL,NULL,hInstance,NULL);

ShowWindow(hwnd,SW_SHOWNORMAL);
UpdateWindow(hwnd);

MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}

LRESULT CALLBACK WinSunProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{
switch(uMsg)
{
case WM_CHAR:
char szChar[20];
sprintf(szChar,"char is d%",wParam);
MessageBox(hwnd,szChar,"xia",0);
break;
case WM_LBUTTONDOWN:
MessageBox(hwnd,"zuojian","xia",0);
HDC hdc;
hdc=GetDC(hwnd);
TextOut(hdc,0,20,"鼠标左键按下时显示",strlen("鼠标左键按下时显示"));
ReleaseDC(hwnd,hdc);
break;
case WM_PAINT:
HDC hDC;
PAINTSTRUCT ps;
hDC=BeginPaint(hwnd,&ps);
TextOut(hDC,0,0,"绘制窗口程序",strlen("绘制窗口程序"));
EndPaint(hwnd,&ps);
break;
case WM_CLOSE:
if(IDYES==MessageBox(hwnd,"是否退出程序?","xia",MB_YESNO))
{
DestroyWindow(hwnd);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return 0;
}


...全文
172 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Proteas 2011-08-24
  • 打赏
  • 举报
回复
把编译器的输出贴一下,这样找问题更简单。
w346581442 2011-08-24
  • 打赏
  • 举报
回复
重启电脑
赵4老师 2011-08-24
  • 打赏
  • 举报
回复
新建Win32 Application,An empty project,OK
AnYidan 2011-08-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ynuxcc 的回复:]
有两个错误,一个要说无效在MAIN函数,一个是忘记了,你们用编译器编译一下就知道了,语法没错误
[/Quote]

有性格!!!
codejava 2011-08-24
  • 打赏
  • 举报
回复
貌似无错啊
Alexander 2011-08-24
  • 打赏
  • 举报
回复
LZ把你的文件后缀改成.cpp就可以正确编译出来了。

原因是VC的C编译器只承认写在模块开始位置的变量声明,因此把所有变量声明放到函数刚开始的位置就好了。

另指出两点小问题:
1.设备句柄(HDC)定义重复,由于switch只会执行一个分支,两个分支里的HDC不会相互干扰,因此只需定义一个就行了;
2.
sprintf(szChar,"char is d%",wParam);
这里照LZ的意图应该是
sprintf(szChar,"char is %d",wParam);
才对吧。

PS:一点题外话,大家睡太晚对身体不好……(虽然我也没资格说你们,在下也是夜猫子一个 -_-)
wintree 2011-08-24
  • 打赏
  • 举报
回复
能把报错的地方给贴出来把么?
z8323664 2011-08-24
  • 打赏
  • 举报
回复
帮顶!!!!+10分~
ljhhh0123 2011-08-24
  • 打赏
  • 举报
回复
除了这一行在运行时有问题sprintf(szChar,"char is d%",wParam);
应是%d
此文件必须按c++语言编译,在vc6.0里文件名的扩展名必须为.cpp

一个错误都没有。

点文件->新建Win32 Application,An empty project,OK
点文件->新建c++source file, 文件名写test.cpp
ynuxcc 2011-08-24
  • 打赏
  • 举报
回复
有两个错误,一个要说无效在MAIN函数,一个是忘记了,你们用编译器编译一下就知道了,语法没错误
icemornings 2011-08-24
  • 打赏
  • 举报
回复
没有给出编译出错信息,只能猜测哪几个地方可能出错:
1、源文件名为.c后缀,WinMain中却把变量的声明定义放在了中间,而不是函数开头。
2、WinSunProc中在switch...case中定义新的变量,把变量移到WinSunProc开头,或者在case指间加上大括号,把变量的定义放在括号中。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧