📄 demo.cpp
字号:
//******************************************************
//HugeSoft WorkHome
//******************************************************
#include <windows.h>
#include <windowsx.h>
#include <stdio.h>
#include <win32bk.h>
#include <vfw.h>
#include <winuser.h>
#include <winuser.h>
#include <string.h>
#include <ddraw.h>
#include <winbase.h>
#include "C:\My Documents\Stay\sdk\samples\misc\ddutil.h"
#include "midi.h"
#define MIDI "012.mid"
#define STEP 5
#define TIMER 100
#define WIDTH 640
#define HEIGHT 480
#define TITLE "HugeSoft工作室" //窗口标题
#define CLASSNAME "RPG" //窗口类名
HINSTANCE hInst; //应用程序实例句柄
HWND hWndMain; //主窗口句柄
LPDIRECTDRAW lpDD; // DirectDraw对象
LPDIRECTDRAWSURFACE lpDDSPrimary; // 主页面
LPDIRECTDRAWSURFACE lpDDSBack; // 后台缓冲区
LPDIRECTDRAWSURFACE lpDDSPic1; // 离屏页面1
LPDIRECTDRAWSURFACE lpDDSPic2; // 离屏页面2
LPDIRECTDRAWPALETTE lpDDPal; // 调色板
BOOL bActive; // 应用程序是否活跃?
static int SpriteCountX=0;
static int SpriteCountY=0;
static int X=0,Y=0;
static int StepX=0,StepY=0;
int StaticX=300,StaticY=200;
static int SpriteX[]={129,178,227,276,325,374,423,472};
static int SpriteY[]={1,50,99,148,197};
//函数声明
BOOL InitSurfaces( void );
void UpdateFrame( void );
void MakeRect(RECT *rect, long left, long top, long right, long bottom);
//*******************************************************************
//函数:FreeObject
//功能:释放我们用过的所有DirectDraw对象
//*******************************************************************
void FreeObjects( void )
{
if( lpDD != NULL )//释放DirectDraw对象
{
if( lpDDSPrimary != NULL )//释放主页面
{
lpDDSPrimary->Release();
lpDDSPrimary = NULL;
}
if( lpDDSPic1 != NULL )//释放离屏页面1
{
lpDDSPic1->Release();
lpDDSPic1 = NULL;
}
if( lpDDSPic2 != NULL )//释放离屏页面2
{
lpDDSPic2->Release();
lpDDSPic2 = NULL;
}
if( lpDDPal != NULL )//释放调色板
{
lpDDPal->Release();
lpDDPal = NULL;
}
lpDD->Release();
lpDD = NULL;
}
}
//*******************************************************************
//函数:RestoreAll
//功能:页面丢失后,恢复页面内存
//*******************************************************************
HRESULT RestoreAll( void )
{
HRESULT ddrval;
//恢复主页面,这也将恢复换页链中的所有页面
ddrval = lpDDSPrimary->Restore();
//恢复离屏页面
ddrval = lpDDSPic1->Restore();
ddrval = lpDDSPic2->Restore();
//重新绘制页面图象
InitSurfaces();
return ddrval;
}
//*******************************************************************
//函数:WindowProc
//功能:主窗口的消息处理过程
//*******************************************************************
LRESULT CALLBACK WinProc( HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam )
{
static HINSTANCE hInstance ;
static int KeyFlag=0;
static int MouseFlag=0;
static int MoveFlag=0;
POINT pt;
static BOOL bPaused;
switch( message )
{
case WM_ACTIVATEAPP://应用程序激活消息
bActive = wParam;
break;
case WM_CREATE:
hInstance = ((LPCREATESTRUCT)lParam) ->hInstance ;
SetTimer(hWnd,0,TIMER,NULL);
StepX=X=StepY=Y;
m_bOpened = m_bPaused = m_bPlaying = FALSE;
m_wDeviceID = 0;
MID_Open(MIDI);
break;
case WM_TIMER:
if(!MID_IsPlaying(&bPaused))
{
MID_SeekTo(0,0);
MID_Play();
}
switch(KeyFlag)
{
case 1:
if(Y+200>30)
Y-=STEP;
if(SpriteCountX!=0)
SpriteCountX=0;
if(SpriteCountY>=3)
SpriteCountY=0;
else
SpriteCountY++;
break;
case 2:
if(X+300<580)
X+=STEP;
if(SpriteCountX!=2)
SpriteCountX=2;
if(SpriteCountY>=3)
SpriteCountY=0;
else
SpriteCountY++;
break;
case 3:
if(X+300<580||Y+200>30)
{
X+=STEP-1;
Y-=STEP-1;
}
if(SpriteCountX!=1)
SpriteCountX=1;
if(SpriteCountY>=3)
SpriteCountY=0;
else
SpriteCountY++;
break;
case 4:
if(Y+200<430)
Y+=STEP;
if(SpriteCountX!=4)
SpriteCountX=4;
if(SpriteCountY>=3)
SpriteCountY=0;
else
SpriteCountY++;
break;
case 6:
if(X+300<580||Y+200<430)
{
X+=STEP-1;
Y+=STEP-1;
}
if(SpriteCountX!=3)
SpriteCountX=3;
if(SpriteCountY>=3)
SpriteCountY=0;
else
SpriteCountY++;
break;
case 7:
if(X+300>30)
X-=STEP;
if(SpriteCountX!=6)
SpriteCountX=6;
if(SpriteCountY>=3)
SpriteCountY=0;
else
SpriteCountY++;
break;
case 11:
if(X+300>30||Y+200<430)
{
X-=STEP-1;
Y+=STEP-1;
}
if(SpriteCountX!=5)
SpriteCountX=5;
if(SpriteCountY>=3)
SpriteCountY=0;
else
SpriteCountY++;
break;
case 8:
if(X+300>30||Y+200>30)
{
X-=STEP-1;
Y-=STEP-1;
}
if(SpriteCountX!=7)
SpriteCountX=7;
if(SpriteCountY>=3)
SpriteCountY=0;
else
SpriteCountY++;
break;
}
break;
case WM_MOUSEMOVE:
{
pt.x=MAKEPOINTS(lParam).x;
pt.y=MAKEPOINTS(lParam).y;
StepX=pt.x-StaticX-25;
StepY=pt.y-StaticY-25;
MouseFlag=2;
if(pt.x>StaticX+X&&pt.x<StaticX+X+49&&pt.y>StaticY+Y&&pt.y<StaticY+Y+49)
{
SpriteCountY=4;
MoveFlag=1;
}
else
{
SpriteCountY=3;
MoveFlag=0;
}
}
break;
case WM_LBUTTONDOWN:
if(MoveFlag==1)
MouseFlag=1;
break;
case WM_LBUTTONUP:
if(MoveFlag!=1)
MouseFlag=0;
break;
case WM_RBUTTONDOWN:
if(MouseFlag==1)
{
// GetCursorPos(&pt);
// ScreenToClient(hWnd,&pt);
}
break;
case WM_KEYDOWN://击键消息
switch( wParam )
{
case VK_UP:
if(KeyFlag==2)
KeyFlag=3;
else if(KeyFlag==7)
KeyFlag=8;
else if(KeyFlag==3)
KeyFlag=3;
else if(KeyFlag==8)
KeyFlag=8;
else
KeyFlag=1;
break;
case VK_RIGHT:
if(KeyFlag==1)
KeyFlag=3;
else if(KeyFlag==4)
KeyFlag=6;
else if(KeyFlag==3)
KeyFlag=3;
else if(KeyFlag==6)
KeyFlag=6;
else
KeyFlag=2;
break;
case VK_DOWN:
if(KeyFlag==2)
KeyFlag=6;
else if(KeyFlag==7)
KeyFlag=11;
else if(KeyFlag==6)
KeyFlag=6;
else if(KeyFlag==11)
KeyFlag=11;
else
KeyFlag=4;
break;
case VK_LEFT:
if(KeyFlag==1)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -