Windows编程 DirectInput 鼠标和键盘的输入

版本:VS2015 语言:C++

 

书的第八章是一些数学的知识,以及一个图形库的创建。数学知识是有必要看一看的,我这里就不做多的介绍了,图形库的话反正你现在的win7+系统上也运行不了,看看就好。因为虽然这本书(《Windows游戏编程大师技巧》)非常的经典,但是代码都是比较老的,很多都已经过时了不能运行,所以我们要明确我们的目的,学好基础知识,编写一下程序练练手,熟悉熟悉Direct的流程以及原理,至于正真的想要运用的话,凭着这些知识学习最新的dx,或者直接上引擎,研究引擎中的代码。

 

好了,说了这么多,其实这本书就是为了入门。

 

今天讲的是第九章的内容,主要实现使用键盘和鼠标控制。

 

首先是基础的代码:

#define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)	//判断当前的按键是否被按下
#define DDRAW_INIT_STRUCT(ddsd) { memset(&ddsd, 0, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); }
#define _RGB32BIT(a, r, g, b) ((b) + (g << 8) + (r << 16) + (a << 24))

HWND main_window_handle = NULL;	//当前窗口
LPDIRECTDRAW7 lpdd = NULL;	//Direct7对象,下称d7

LPDIRECTDRAWSURFACE7 lpddsprimary = NULL;	//主显示表面指针
LPDIRECTDRAWSURFACE7 lpddsback = NULL;	//后备显示表面
DDSURFACEDESC2 ddsd;	//主显示表面的描述

int SCREEN_WIDTH = 640;	//显示宽度
int SCREEN_HEIGHT = 480;	//显示高度
int SCREEN_BPP = 32;	//色深,现在的机子只能设置为32位,书上可能还是8位的

int CharPosX = 200;	//当前显示人物的x坐标
int CharPosY = 200;	//当前任务显示的y坐标

// 弹出消息
void popMessage(LPWSTR str)
{
	MessageBox(main_window_handle, str, TEXT("提示"), MB_OK);
}

// 32位像素上色
void Plot_Pixel_Fast32_2(int x, int y, int red, int green, int blue, int alpha, UINT* video_buffer, int lpitch)
{
	video_buffer[x + y * (lpitch >> 2)] = (UINT)(_RGB32BIT(alpha, red, green, blue));	//使用宏直接写,有点区别的是lpitch需要除以4,因为lpitch算的是横向的字节数,而我们把主界面的内存弄成UINT型,是32位、4个字节的,上一节中是我理解的不够深刻
}


// 游戏初始化
int Game_Init(void* params = NULL)
{
	// 基础设置
	if (FAILED(DirectDrawCreateEx(NULL, (void**)&lpdd, IID_IDirectDraw7, NULL)))	//获取d7对象
		return 0;
	if (FAILED(lpdd->SetCooperativeLevel(main_window_handle,
		DDSCL_FULLSCREEN | DDSCL_ALLOWMODEX | DDSCL_EXCLUSIVE | DDSCL_ALLOWREBOOT
		)))	//跟windows协
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值