version2
主要内容:贴图
所属部分:客户端
代码地址 https://github.com/changjixiong/MMO-RPGGame, 如何获得代码,请参考如何用SVN从github上检出代码的不同版本
邮件地址:changjixiong@gmail.com
由于VC自动生成的代码,有点罗嗦,而且,我也不需要用到RC文件,希望能看到精简的代码,所以windows 的窗口生成代码,我使用了《windows游戏编程大师技巧》里面的代码(见p66~p68)。
在CreateWindowEx 调用了一个自定义的函数AdjustWindow(HWND hwnd)用于调整窗口的大小和位置,需要注意的是,最初创建的窗口大小是640X480的,并且已经居中了,但是,这个尺寸是包含标题栏的,所以需要用函数AdjustWindow(HWND hwnd)调整一下,调整后窗口的尺寸比640X480略大的,而客户区的尺寸是640X480。
下面的代码初始化HDC 和 HBITMAP 用于贴图, 用BitBlt向屏幕贴图,最后释放资源。
HDC hdcScreen = GetDC(hwnd);
HDC hdcGround = CreateCompatibleDC(hdcScreen);
HBITMAP bitmap = (HBITMAP)LoadImage(NULL,"./pic/map/ground.BMP",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
HBITMAP bitOld = (HBITMAP)SelectObject(hdcGround,bitmap);
// enter main event loop, but this time we use PeekMessage()
// instead of GetMessage() to retrieve messages
while(TRUE)
{
// test if there is a message in queue, if so get it
if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
// test if this is a quit
if (msg.message == WM_QUIT)
break;
// translate any accelerator keys
TranslateMessage(&msg);
// send the message to the window proc
DispatchMessage(&msg);
} // end if
// main game processing goes here
// Game_Main(); // or whatever your loop is called
BitBlt(hdcScreen, 0, 0, 640, 480, hdcGround, 0, 0, SRCCOPY);
//
} // end while
//Game_Shutdown();
SelectObject(hdcGround, bitOld);
DeleteObject(bitmap);
DeleteDC(hdcGround);