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 ,你可真要命,你必须在每行语句的结尾打上分号。。。”

           呵呵。^_^

我在CSDN上的第一篇文章

由于自己以前老是在csdn上看各位大神们写的博客,最近突然萌生了自己写博客的想法。当然,小弟还是一个没有毕业的学生,在编程方面也没什么造诣,也不能像各位牛人在博客上讨论什么高大上的技术,也不能像各位老...
  • u013806473
  • u013806473
  • 2014年11月30日 10:51
  • 239

我的第一篇文章在CSDN下诞生了~

随想
  • qq_36059642
  • qq_36059642
  • 2017年02月11日 23:25
  • 79

我的第一篇博客文章

一直没有写博客的习惯,却一直怀有
  • Teng_yun
  • Teng_yun
  • 2014年07月22日 23:13
  • 888

使用csdn的第一篇文章——java基础

在迫使自己阅读了java编程思想之后,毅然决然的做了这个约定。 我要依照之前的java学习路线将这些基础课程梳理一遍,这也是为什么要将博客搬至csdn的原因。 在依照天马营的Java入门基础教程后,总...
  • aaa199623
  • aaa199623
  • 2017年04月18日 16:03
  • 177

第一篇文章,目的是测试和体验csdn的blog

体验和测试在csdn上面发表博文为什么写博文工作一年有余,算上实习什么的已经有实打实的一年半的工作经验了,在工作中也学习了一些东西,但总是感觉自己的进步太慢。或者说目前自己的技术水平达不到自己所要求的...
  • qq_33168801
  • qq_33168801
  • 2017年07月02日 19:39
  • 31

我的第一篇文章

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和...
  • qq_14875005
  • qq_14875005
  • 2017年06月20日 13:37
  • 31

第一篇文章 work count

第一篇文章 work count
  • bat2050
  • bat2050
  • 2015年11月12日 08:59
  • 90

第一篇文章,2017年小结

第一篇文章,2017年小结总结2017年已经过完,对自己做下总结事业上,毕业四年,从事四年Android开发,处于中等水平。 健康方面,过去一年一直因为胃溃疡的问题,身体实在是不敢多说。 情感方面,真...
  • u014259620
  • u014259620
  • 2018年01月04日 13:21
  • 7

简书的第一篇文章

###简书的第一篇文章开篇词已经有很久很久没有再写过东西了,虽然日常与同事开会时会拿上公司发的日历本/自己买的小本子做一些简要的记录,但那也多是鬼画符一样的书写,只求记录下一些要点就足够了;学生时代更...
  • xiongjiamu
  • xiongjiamu
  • 2017年10月24日 14:40
  • 108

我的第一篇文章,致我曾今努力的那些年

6年前我还是一个稚嫩的,刚刚上了大学,也可以说是被大学的上了的一个学生,对互联网充满了好奇,以及那种说不出的激动的心情,大学每天在研究手机怎么刷机,怎么破解软件,然后就开始查阅相关文章,虽然过程中都是...
  • xiaoxing1992
  • xiaoxing1992
  • 2017年03月04日 14:43
  • 166
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CSDN的第一篇文章,一个很失败的错误。
举报原因:
原因补充:

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