📄 main.cpp
字号:
//
// Programed by Johnhans (C)2004 All Rights Reserved!
//
//
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdio.h>
#include "..\..\Include\MD_Surface.h"
#include "..\..\Include\MD_File.h"
//--------------------------------------------------------------------
// 宏定义
//--------------------------------------------------------------------
#define NAME "MDEngine MDFile Test"
#define SAFE_DELETE(A) if( (A) != NULL ) { delete [] (A); (A) = NULL; }
//-----------------------------------------------------------------------------
// 全局变量
//-----------------------------------------------------------------------------
CMD_Engine Engine;
CMD_Surface SurfaceA("JPGExt.igp");
CMD_Surface SurfaceB;
CMD_Surface SurfaceC;
CMD_File Packfile;
BOOL bActive; //程序是否挂起
bool RunGame=true; //程序运行中
char* content=NULL;
bool InitEngine(HWND hWnd); //初始化引擎设备
void LoadSimpleFile();
void WriteSimpleFile();
void LoadPackedFile();
void LoadPackedFileDll();
void UpdateFrame();
void ShowText(char *con,DWORD len);
//-----------------------------------------------------------------------------
// Name: WindowProc()
// Desc: 主窗口消息处理
//-----------------------------------------------------------------------------
LRESULT CALLBACK WinProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
switch( message )
{
case WM_ACTIVATE: //应用程序激活消息
if(LOWORD(wParam)==WA_INACTIVE)
bActive = false;
else if(HIWORD(wParam))
{
bActive = false;
return 0;
}
else
bActive = true;
return 0;
case WM_SYSKEYDOWN:
switch(wParam)
{
case VK_F4:
RunGame=false;
break;
case 18:
return 0;
}
break;
case WM_SETCURSOR:
SetCursor(LoadCursor(NULL, IDC_ARROW));
return TRUE;
case WM_SIZE:
case WM_MOVE:
Engine.CalcWindowPos();
break;
case WM_KEYDOWN:
switch(wParam)
{
case VK_ESCAPE:
case VK_F12:
RunGame=false;
break;
}
break;
case WM_DESTROY: //销毁窗口消息
PostQuitMessage(0);
RunGame=false;
break;
}
//调用缺省的过程处理过程
return DefWindowProc(hWnd, message, wParam, lParam);
}
//-----------------------------------------------------------------------------
// Name: WinMain()
// Desc: 初始化, 消息循环
//-----------------------------------------------------------------------------
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
MSG msg;
HWND hWnd;
WNDCLASSEX wcex={0};
//建立并注册窗口类
wcex.cbSize=sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = WinProc;
wcex.hInstance=hInstance;
wcex.lpszClassName = NAME;
wcex.hbrBackground = (HBRUSH )GetStockObject(BLACK_BRUSH);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
RegisterClassEx(&wcex);
//创建窗口
hWnd = CreateWindowEx(WS_EX_APPWINDOW,NAME,NAME,WS_OVERLAPPEDWINDOW | WS_VISIBLE,0,0,GetSystemMetrics(SM_CXSCREEN)/2,GetSystemMetrics(SM_CYSCREEN)/2,NULL,NULL,hInstance,NULL);
if (!hWnd)
{
UnregisterClass(NAME,hInstance);
MessageBox(hWnd,"程序主框架创建失败!",NAME,MB_OK);
return FALSE;
}
if(!InitEngine(hWnd))
{
MessageBox(hWnd,"游戏引擎初始化失败!",NAME,MB_OK);
return false;
}
// Main message loop:
while(RunGame)
{
//如果有消息则截获它
if(PeekMessage(&msg,hWnd,0,0,PM_REMOVE))
{
if(msg.message == WM_QUIT)
RunGame=false;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else if(bActive)
{
UpdateFrame();
}
}
SAFE_DELETE(content);
return msg.wParam;
}
bool InitEngine(HWND hWnd)
{
Packfile.EnableExt(true);
if(!Engine.Create(hWnd,800,600,16,false)) return false; // 设置显示模式
if(!Packfile.Open("Picture.epk",true,true)) return false; // 打开压缩包
if(!Packfile.Locate("background.jpg")) return false; // 打开压缩包下的background.jpg
if(!Packfile.Read()) return false; // 读取background.jpg内容到MDFile缓冲
if(!SurfaceA.Create(Packfile.GetBuffer(),Packfile.GetBufferLength(),COLORKEY_NO)) return false;
if(!Packfile.Locate("Alpha.bmp")) return false;
if(!Packfile.Read()) return false;
if(!SurfaceB.Create(Packfile.GetBuffer(),Packfile.GetBufferLength(),RGB(0,0,0))) return false;
if(!Packfile.Locate("Sprite.bmp")) return false;
if(!Packfile.Read()) return false;
if(!SurfaceC.Create(Packfile.GetBuffer(),Packfile.GetBufferLength(),RGB(0,255,0))) return false;
return true;
}
void UpdateFrame()
{
static int ialpha=0,istep=2,iframe=0,ix=800;
static DWORD itime=GetTickCount();
SurfaceA.DrawFast(NULL,SUR_BACK,0,0,false); // 绘制背景
SurfaceB.DrawAlphaMMX(NULL,SUR_BACK,200,0,ialpha,true); // 绘制半透明图片
SurfaceC.SetBltRect(47*iframe,0,47*(iframe+1),78); // 设置剪裁区域
SurfaceC.DrawFast(NULL,SUR_BACK,ix,300,true); // 绘制动画帧
// 计算Alpha值
ialpha+=istep;
if(ialpha>255)
{
ialpha = 255;
istep = -istep;
}
else if(ialpha<0)
{
ialpha = 0;
istep = -istep;
}
// 计算Alpha结束
// 计算动画帧
if(GetTickCount()-itime>100)
{
itime = GetTickCount();
if(++iframe>9) iframe = 0;
if((ix-=10)<0) ix=800;
}
// 计算动画帧结束
Engine.FlipScreen();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -