Win32Api游戏编程记录
1.播放声音
PlaySound(L"FirstBlood.wav", NULL, SND_FILENAME | SND_ASYNC |SND_LOOP);//循环播放背景音乐
2.获取设备环境句柄HDC
1.一般在WM_PAINT消息循环中使用。
HDC BeginPaint(HWND,LPPAINTSTRUCT)
bool EndPaint(HWND,LPPAINTSTRUCT)
2.常用
HDC GetDC(HWND) //获取设置环境句柄
int ReleaseDC(HWND,HDC) //释放环境句柄
3.GDI基本几何绘图
1.画笔
HPEN = CreatePen(int penStyle,int width,COLORREF color);
COLORREF RGB(byte red,byte green,byte blue);
2.画刷
HBRUSH = CreateSolibBrush(COLORREF color) //创建实心画刷
HBRUSH = CreateHatchBrush(int style,COLORREF color) //创建阴影画刷
3.选择图形对象
图形对象包括画刷/画笔之类的
HGDIOBJ SelectObject(HDC,HGDIOBJ) //返回之前的图形对象,并设置现在的图形对象
bool DeleteObject(HGDIOBJ) //删除画刷对象
4.绘制线条
bool LineTo(HDC,x,y) //从当前坐标画线到终点坐标(x,y)
bool MoveToEx(HDC,x,y,LPPOINT) //从当前坐标移动到(x,y),保存之前坐标
5.随机数
srand((unsigned)time(NULL)) //初始化随机数种子
srand(timeGetTime())
x = random(100) 0-99的随机数
6.文字输出函数TextOut
bool TextOut(HDC,int xStart,int yStart,char*,int len)
int DrawText(HDC,char*,len,LPRECT,UINT format)//以矩形区域输出文字
format常用标识
7.设置文字颜色
COLORREF SetTextColor(HDC,COLORREF) //设置以后,再输出文字就是这个颜色了
8.设置文字背景透明
int SetBkMode(HDC,int mode)
mode:OPAQUE 用背景画刷的颜色输出到文字的背景
mode:TRANSPARENT 透明背景
9.创建字体
10.文字显示功能API
4.位图绘制
1.加载位图
HANDLE LoadImage(HINSTANCE,char* picName,UINT type,int xWidth,int yHeight,UINT loadtype)
loadType:LR_LOADFROMFILE 从文件加载图像
2.建立兼容DC
HDC CreateCompatibleDC(HDC) //参数为与之兼容目的DC的句柄
bool DeleteDC(HDC) //撤销指定的设备环境
3.选用位图对象
HGDIOBJ SelectObject(HDC,HGDIOBJ)
4.贴图
6.透明贴图
1.透明遮罩法
SelectObject(g_mdc,g_hBackGround);
BitBlt(g_hdc,0,0,WINDOW_WIDTH,WINDOW_HEIGHT,g_mdc,0,0,SRCCOPY); //采用BitBlt函数在g_hdc中先贴上背景图
//用透明遮罩法绘制出第一个人物
SelectObject(g_mdc,g_hCharacter1);
BitBlt(g_hdc,50,WINDOW_HEIGHT-579,320,640,g_mdc,320,0,SRCAND);//透明遮罩法第一步,即将屏蔽图与背景图做"AND"运算
BitBlt(g_hdc,50,WINDOW_HEIGHT-579,320,640,g_mdc,0,0,SRCPAINT);//透明遮罩法第二步,即将前景图与背景图做"OR"运算
2.透明色彩法
//先贴上背景图
SelectObject(g_mdc,g_hBackGround);
BitBlt(g_hdc,0,0,WINDOW_WIDTH,WINDOW_HEIGHT,g_mdc,0,0,SRCCOPY); //采用BitBlt函数在g_hdc中先贴上背景图
//贴第一张人物图
SelectObject(g_mdc,g_hCharacter1);
TransparentBlt(g_hdc,0,WINDOW_HEIGHT-650,535,650,g_mdc,0,0,535,650,RGB(0,0,0));//透明色为RGB(0,0,0)
7.定时器
1.创建定时器
2.响应。
指定回调函数,或者在窗口的消息处理函数中处理WM_TIMER消息
3.删除定时器
bool WINAPI KillTimer(HWND,int timerID) //删除指定ID的定时器
4.获取程序运行时间
DWORD WINAPI GetTickcount(void) //返回运行了多少毫秒
5.游戏循环
MSG msg = { 0 }; //定义并初始化msg
while( msg.message != WM_QUIT ) //使用while循环,如果消息不是WM_QUIT消息,就继续循环
{
if( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) ) //查看应用程序消息队列,有消息时将队列中的消息派发出去。
{
TranslateMessage( &msg ); //将虚拟键消息转换为字符消息
DispatchMessage( &msg ); //分发一个消息给窗口程序。
}
else
{
g_tNow = GetTickCount(); //获取当前系统时间
if(g_tNow-g_tPre >= 100) //当此次循环运行与上次绘图时间相差0.1秒时再进行重绘操作
Game_Paint(hwnd);
}
}
本来是想总结一下,有时间也写个小游戏的,不过也没时间一直弄这个,只能说是未完待续吧。