#pragma once
#include "engine_system.h"
class cApp :
public cApplication
{
public:
cApp(void);
~cApp(void);
HDC mhDC;
HDC mhMemDC;
BOOL mbIsRun;
BOOL Init();
BOOL Shutdown();
BOOL FRAME();
protected:
LARGE_INTEGER mFrequency;
LARGE_INTEGER mStartCount;
double mFPS;
double mTime;
};
#include "cApp.h"
cApp::cApp(void)
{
mbIsRun=TRUE;
QueryPerformanceFrequency(&mFrequency);
QueryPerformanceCounter(&mStartCount);
mTime=0;
}
cApp::~cApp(void)
{
}
BOOL cApp::Init(void)
{
m_Width=600;m_Height=750;
Resize(m_Width,m_Height);
mhDC=GetDC(m_hWnd);
mhMemDC=CreateCompatibleDC(mhDC);
HBITMAP hbm=CreateCompatibleBitmap(mhDC,m_Width,m_Height);
SelectObject(mhMemDC,hbm);
DeleteObject(hbm);
SetTextColor(mhMemDC,RGB(255,0,0));
SetBkMode(mhMemDC,TRANSPARENT);
return TRUE;
}
BOOL cApp::Shutdown(void)
{
DeleteDC(mhMemDC);
ReleaseDC(m_hWnd,mhDC);
return TRUE;
}
BOOL cApp::FRAME()
{
HWND hForegroundWindow=GetForegroundWindow();
BOOL bIsForeground=(m_hWnd==hForegroundWindow);
static LARGE_INTEGER lastCounter=mStartCount;
static UINT nCounter=0;
static BOOL bLastSpaceDown=FALSE;
BOOL bCurSpaceDown=GetAsyncKeyState(VK_SPACE)&0x8000;
if(bCurSpaceDown&&(!bLastSpaceDown))
{
mbIsRun=!mbIsRun;
}
bLastSpaceDown=bCurSpaceDown;
LARGE_INTEGER currentCounter;
QueryPerformanceCounter(¤tCounter);
double deltaTime=(double)(currentCounter.LowPart-lastCounter.LowPart)/mFrequency.LowPart;
mFPS=1.0/deltaTime;
lastCounter=currentCounter;
if((!mbIsRun)||(!bIsForeground))return TRUE;
mTime+=deltaTime;
static TCHAR temp[100];
_stprintf(temp,L"Current FPS:%d,Average FPS:%d,TIME:%d",(UINT)mFPS,(UINT)((double)++nCounter/mTime),(UINT)mTime);
PatBlt(mhMemDC,0,0,m_Width,m_Height,WHITENESS);
TextOut(mhMemDC,0,0,temp,_tcslen(temp));
BitBlt(mhDC,0,0,m_Width,m_Height,mhMemDC,0,0,SRCCOPY);
if(GetAsyncKeyState(VK_ESCAPE)&0x8000)
{
return FALSE;
}
return TRUE;
}
#include
#include
class cApplication
{
protected:
HINSTANCE m_hInst;
HWND m_hWnd;
TCHAR m_Class[MAX_PATH];
TCHAR m_Caption[MAX_PATH];
WNDCLASSEX m_wcex;
DWORD m_Style;
DWORD m_XPos,m_YPos;
DWORD m_Width,m_Height;
public:
cApplication();
HWND GethWnd();
HINSTANCE GethInst();
BOOL Run();
BOOL Resize(long Width,long Height);
virtual BOOL Init(){return TRUE;}
virtual BOOL Shutdown(){return TRUE;}
virtual BOOL FRAME(){return TRUE;}
};
static cApplication *g_pApplication=NULL;
static long _stdcall AppWindowProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
#include"Engine_System.h"
#include<Windows.h>
cApplication::cApplication()
{
g_pApplication=this;
m_hInst=GetModuleHandle(NULL);
_tcscpy(m_Class,L"AppClass");
_tcscpy(m_Caption,L"Application Caption");
m_Style=WS_OVERLAPPEDWINDOW;
m_XPos=0;
m_YPos=0;
m_Width=640;
m_Height=480;
m_wcex.cbSize=sizeof(WNDCLASSEX);
m_wcex.style=CS_CLASSDC;
m_wcex.lpfnWndProc=AppWindowProc;
m_wcex.cbClsExtra=0;
m_wcex.cbWndExtra=0;
m_wcex.hInstance=m_hInst;
m_wcex.hIcon=LoadIcon(NULL,IDI_APPLICATION);
m_wcex.hCursor=LoadCursor(NULL,IDC_ARROW);
m_wcex.hbrBackground=HBRUSH(COLOR_WINDOW);
m_wcex.lpszMenuName=NULL;
m_wcex.lpszClassName=m_Class;
}
HWND cApplication::GethWnd()
{
return m_hWnd;
}
HINSTANCE cApplication::GethInst()
{
return m_hInst;
}
BOOL cApplication::Run()
{
MSG msg;
if(!RegisterClassEx(&m_wcex))return FALSE;
m_hWnd=CreateWindow(m_Class,m_Caption,m_Style,m_XPos,m_YPos,m_Width,m_Height,NULL,NULL,m_hInst,NULL);
if(!m_hWnd)return FALSE;
Resize(m_Width,m_Height);
ShowWindow(m_hWnd,SW_NORMAL);
UpdateWindow(m_hWnd);
Init();
ZeroMemory(&msg,sizeof(MSG));
while(msg.message!=WM_QUIT)
{
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
if(FRAME()==FALSE)break;
}
}
Shutdown();
UnregisterClass(m_Class,m_hInst);
return TRUE;
}
BOOL cApplication::Resize(long Width,long Height)
{
int xFrame=GetSystemMetrics(SM_CXSIZEFRAME);
int yFrame=GetSystemMetrics(SM_CYSIZEFRAME);
int yCaption=GetSystemMetrics(SM_CYCAPTION);
int xScreen=GetSystemMetrics(SM_CXSCREEN);
int yScreen=GetSystemMetrics(SM_CYSCREEN);
int cx=xFrame*2+xFrame+Width;
int cy=yFrame*2+yCaption+Height+yFrame;
SetWindowPos(m_hWnd,HWND_TOP,(xScreen-cx)/2,(yScreen-cy)/2,cx,cy,SWP_SHOWWINDOW);
return TRUE;
}
long _stdcall AppWindowProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch(msg)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(hWnd,msg,wParam,lParam);
}
}
#include"cApp.h"
#include
int APIENTRY _tWinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPTSTR lpCmdLine,int nCmdShow)
{
cApp app;
app.Run();
}