vc。net 游戏开发 第一章 创建窗口
vc。net 游戏开发 第一章 创建窗口 我写程序的时间不长也就4年但是啥都作啥都不精通,所以现在吗打算认定一个坚持下去,哪怕辞职我也愿意,现在和我们一起开始把。
游戏的分类我就不说了前人写了一大堆,我先按照我的想法往下写,有部分是别人的我学习发到这,有部分是自己的成果,呵呵成果阿
如果你对VC.NET的使用不会先去买本书看看,如果你有vc6.0的使用经验那就不成问题我觉得是大同小异,只是在机理上不一样。
以下是创建游戏窗口的代码,我注释的非常清晰,如有疑问去查MSDN。
拷贝及可运行,程序执行的结果是全屏幕红色背景,单击鼠标右键弹出消息窗口,按ESC键退出。
这是我的运行环境,不是显得晃,使有些人在知道这些后能更好的学习。
说到这了也许有人会问这不都是一样的代码吗?从哪抄来的?是啊写窗口的建立都是这样大同小异,没啥区别,再说了微软都给你订制好了你还能有多大的创造余地?只能是算法上可能不同而已。不过学习吗就是借鉴他人的思想,完成自己的理想。再次对那些前辈牛人之以崇高的敬意,后面的文章我会把一些代码的出处写上去。
在这解释一下,好多初学程序的不明白算法是啥,课本上说一段程序就是一个算法,你写的任意程序都是算法,甚至你感觉不到,如一个循环读取数据库记录的程序那也是算法,就好比万物皆对象一样,程序皆算法。
我说的只是我的理解,课本上的有些东西我也忘了,不对之处多多包涵,有啥意见只管说,这样是帮助我进步呢,呵呵。
//****************************************************************************
//说明:
// 开发环境:.NET 7.1.3091
// 操作系统:WindowsXP SP2
// S D K:Microsoft DirectX 9.0 SDK
// computer:
// CPU::Inter 2.6C
// 内存:1G DDR400
// 显卡:FX5900 128MB
// 硬盘:120G*2 8MB 7200
// 主板:Inter865PE
//****************************************************************************
#include<windows.h>
//函数申明
BOOL InitWindow(HINSTANCE hInstance,int nCmdShow);
LRESULT CALLBACK WinProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);
//变量说明
HWND hWnd;
//**********************************************************************
//函数:WinMain()
//功能:Windows 程序入口函数。创建主窗口,处理消息循环
//日期:2005.1.3 22:34
//编写人:张小斌
//**********************************************************************
int PASCAL WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
//hInstance:表示该应用程序的句柄
//hPrevInstance:为了保持与16位windows应用程序的兼容性
//lpCmdLine:指向命令行参数字符串的指针
//nCmdShow:指定应用程序窗口显示方式的整数
{
if(!InitWindow(hInstance,nCmdShow))return FALSE;
//创建主窗口,如果创建不成功则返回FALSE并同时退出程序
MSG msg;
//进入消息循环
for(;;)
{
if(PeekMessage(& msg,NULL,0,0,PM_REMOVE))
{
if(msg.message==WM_QUIT)break;
TranslateMessage(& msg);
DispatchMessage(& msg);
}
}
return msg.wParam;
}
//*******************************************************************
//函数:InitWindow()
//功能:创建窗口
//日期:2005.1.3 22:43
//编写人:张小斌
//*******************************************************************
static BOOL InitWindow(HINSTANCE hInstance,int nCmdShow)
{
//定义窗口风格:
WNDCLASS wc;
wc.style=NULL;//窗口的风格
wc.lpfnWndProc=(WNDPROC)WinProc;//窗口消息处理函数的指针
wc.cbClsExtra=0;//分配给窗口类结构之后的额外字节数
wc.cbWndExtra=0;//分配给窗口实例之后的额外的字节数
wc.hInstance=hInstance;//窗口所对应的应用程序的句柄
wc.hIcon=NULL;//窗口图标
wc.hbrBackground=CreateSolidBrush(RGB(100,0,0));//暗红色背景
wc.lpszMenuName=NULL;//窗口的菜单资源名称
wc.lpszClassName="My_Test";//窗口类的名称
RegisterClass(&wc);//注册窗口
//按所给参数创建窗口
hWnd = CreateWindow("My_Test",
"My First program",//窗口标题
WS_POPUP|WS_MAXIMIZE,0,0,
GetSystemMetrics(SM_CXSCREEN),//此函数返回屏幕宽度
GetSystemMetrics(SM_CYSCREEN),//此函数返回屏幕高度
NULL,NULL,hInstance,NULL);
if(!hWnd)return FALSE;
ShowWindow(hWnd,nCmdShow);//显示窗口
UpdateWindow(hWnd);//刷新窗口
return TRUE;
}
//*******************************************************************
//函数:WinProc()
//功能:处理窗口消息
//日期:2005.1.3 22:56
//编写人:张小斌
//*******************************************************************
LRESULT CALLBACK WinProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_KEYDOWN://击键消息
switch(wParam)
{
case VK_ESCAPE:
MessageBox(hWnd,"ESC 键按下了!确定后推出!","KEYboard",MB_OK);
PostMessage(hWnd,WM_CLOSE,0,0);//给窗口发送WM_CLOSE消息break;
}
return 0;//处理完一个消息后返回0
case WM_CLOSE://准备退出
DestroyWindow(hWnd);//释放窗口
return 0;
case WM_RBUTTONDOWN:
MessageBox(hWnd,"鼠标右键按下了!","Mouse",MB_OK);
return 0;
case WM_DESTROY://如果窗口被释放...
PostQuitMessage(0);//给窗口发送WM_QUIT消息
return 0;
}
//调用缺省消息处理过程
return DefWindowProc(hWnd,message,wParam,lParam);
}