CSDN的第一篇文章,一个很失败的错误。

原创 2007年10月11日 07:57:00

        最近一直在看Andre LaMothe的 <<Windows 游戏编程大师技巧>> ,使我学到了很多VC++开发Windows程序的基本常识。感谢作者写了这么一本好书。

        昨天写书中的一个例子程序,一个弹球在窗口中运动,代码如下:

#include "stdafx.h"
#include "resource.h"

#define MAX_LOADSTRING 100
#define WINDOW_WIDTH 400;
#define WINDOW_HEIGHTS 300;

// Global Variables:
HINSTANCE hInst; // current instance
TCHAR szTitle[MAX_LOADSTRING]; // The title bar text
TCHAR szWindowClass[MAX_LOADSTRING]="Ball2";
HDC hdc;
HWND    hWnd;

ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
MSG msg;
MyRegisterClass(hInstance);

if (!InitInstance (hInstance, nCmdShow)) 
{
return FALSE;
}

// Main message loop:
int ball_x = WINDOW_WIDTH/2;
int ball_y = WINDOW_HEIGHTS/2;

int xv = -4+rand()%8;
int yv = -4+rand()%8;

HPEN   white_pen = CreatePen(PS_SOLID, 1, RGB(255,255,255));
HPEN   black_pen = CreatePen(PS_SOLID, 1, RGB(0,0,0));
HBRUSH green_brush = CreateSolidBrush(RGB(0,255,0));
HBRUSH black_brush = CreateSolidBrush(RGB(0,0,0));
hdc=GetDC(hWnd);
srand(GetTickCount());
while(true)
{
if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))

if (msg.message == WM_QUIT)
break;

TranslateMessage(&msg);

DispatchMessage(&msg);
}

SelectObject(hdc,black_pen);
SelectObject(hdc,black_brush);
Ellipse(hdc, ball_x, ball_y, ball_x + 32, ball_y + 32);

ball_x+=xv;
ball_y+=yv;

// test for collisions, first x-axis
if (ball_x <0 ¦ ¦ball_x >WINDOW_WIDTH-32)

xv=-xv;

ball_x+=xv;


else
if (ball_y  < 0  ¦ ¦ ball_y  > WINDOW_HEIGHTS - 32)

yv=-yv;

ball_y+=yv;



SelectObject(hdc, white_pen);
SelectObject(hdc, green_brush);

Ellipse(hdc, ball_x, ball_y, ball_x + 32, ball_y + 32);

if (KEYDOWN(VK_ESCAPE))
    SendMessage(hwnd, WM_CLOSE, 0,0);

Sleep(10); 
}
// delete all the objects
DeleteObject(white_pen);
DeleteObject(black_pen);
DeleteObject(green_brush);
DeleteObject(black_brush);

// release the device context
ReleaseDC(hWnd,hdc);
return msg.wParam;
}
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;

wcex.cbSize = sizeof(WNDCLASSEX); 

wcex.style = CS_HREDRAW  ¦ CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_BALL2);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);

return RegisterClassEx(&wcex);
}
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   hWnd;

   hInst = hInstance; // Store instance handle in our global variable

   hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, WINDOW_WIDTH, WINDOW_HEIGHTS, NULL, NULL, hInstance, NULL);


   if (!hWnd)
   {
      return FALSE;
   }

   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);

   return TRUE;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;

switch (message) 
{
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
   }
   return 0;
}

       结果程序一编译,报了十几个错误,后来在论坛上问了问,才知道

#define WINDOW_WIDTH 400;
#define WINDOW_HEIGHTS 300;
应该把分号去掉。。。(严重无语,应认真检讨)

       #define,#include不是C++语句,后面不能有分号,这本来知道,可是一使用就忘了,还是实践太少啊。

        现在突然想起<<Windows 游戏编程大师技巧>> 的序中,署名为Richard Benson(后面标注:3D程序员 梦工厂 电子艺界),他写道:Andre LaMothe请他开发一个简单的程序,可是程序总是无法运行,后来Andre LaMothe看了他的程序说:“Richard ,你可真要命,你必须在每行语句的结尾打上分号。。。”

           呵呵。^_^

每天一篇文章---新概念4 (1)Finding Fossil Man

We can read of things that happened 5,000 years ago in the Near East, where people first learned to ...
  • bangni_lz
  • bangni_lz
  • 2007-08-28 23:57:00
  • 402

在CSDN上的第一篇文章

在CSDN上的第一篇文章 www.reverse-ssn-lookup.com 
  • reg138
  • reg138
  • 2008-12-27 16:01:00
  • 252

csdn第一篇文章

     上次登录csdn的时间已经不记得了,连账号都给忘了,所以无奈只好重新申请一个账号,也就是此账号了,因为我感觉csdn里面的兄弟姐妹们都很无私大爱,自己有什么好东西都愿意与别人分享,别人提出来...
  • happy_h
  • happy_h
  • 2010-08-28 21:08:00
  • 96

在CSDN的第一篇文章~

GIS专业大三学生一枚...参与过一些不太难的开发工作,从大一开始学习编程,知识来源主要是课程和课堂作业...(简直弱爆了...)。正处于必须逼着自己养成些好习惯的时候,比如做事有计划,比如每天锻炼背...
  • windtalker2012
  • windtalker2012
  • 2012-10-16 19:42:37
  • 97

csdn 我的第一篇文章

 注册csdn有两年了,还没有怎么来过,以前都是来下载点资料,现在看这里有太多的话题,前辈学习经验... 我也从大学刚出来进入社会,工作有一个月了,在这里,我也开始记录我的软件生涯....
  • rxslove1314
  • rxslove1314
  • 2009-03-21 11:43:00
  • 119

在CSDN的第一篇文章

 纯粹是个人兴趣而已,希望能在这里学到更多有价值的东西,充分挖掘自己的兴趣~~...
  • usbuild
  • usbuild
  • 2011-03-24 22:14:00
  • 66

我在CSDN的第一篇文章

很久没来了。事情太多太忙了。要出书,还有公司的事情一堆。很高兴再次来了这里。下面罗列一下我精通的技术:vb,vc,vf,java,vc#,vb.net,vj#.net............javae...
  • tianenjava
  • tianenjava
  • 2006-08-23 18:56:00
  • 351

CSDN里的第一篇文章

  最近一直都是在做网站,速度还是快,2个月时间,已经有4个成品了,其中3个为行业门户!  很烦,价格很底,其他公司要几万的,我几千就做了,感觉差距好大,但是我技术不一定比其他公司的差!  哎,人家有...
  • hezhongpu
  • hezhongpu
  • 2008-05-10 18:20:00
  • 118

csdn 上的第一篇文章!

在csdn上游荡了很久,从中攫取了不少的“黄金”,决定在此开辟自己的一亩三分田。。。。...
  • hunanxiaochuan
  • hunanxiaochuan
  • 2009-07-24 13:31:00
  • 42

在CSDN上的 第一篇文章

       作为一个刚上研的普通大学研究生,对于计算机专业4年的本科生涯还是不尽满意,编程经验很少,项目几乎没做过,不希望在读研期间仍然浑浑噩噩地读下去。一直在看CSDN的各位大神分享技术和经验,希...
  • qq_38537503
  • qq_38537503
  • 2018-03-01 23:53:02
  • 10
收藏助手
不良信息举报
您举报文章:CSDN的第一篇文章,一个很失败的错误。
举报原因:
原因补充:

(最多只允许输入30个字)