亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? core_system.cpp

?? 用DirectX編寫RPG游戲-Programming.Role.Playing.Games.with.DirectX
?? CPP
字號:
/**************************************************
WinMain.cpp
GameCore Component

Programming Role-Playing Games with DirectX
by Jim Adams (01 Jan 2002)
**************************************************/

#include "Core_Global.h"

cApplication::cApplication()
{
  // Save instance handle
  g_pApplication = this;

  // Get the instance handle
  m_hInst = GetModuleHandle(NULL);

  // Set a default window class and caption
  strcpy(m_Class, "AppClass");
  strcpy(m_Caption, "Application Caption");

  // Set default window style, position, width, height
  m_Style  = WS_OVERLAPPEDWINDOW;
  m_XPos   = 0;
  m_YPos   = 0;
  m_Width  = 256;
  m_Height = 256;

  // Set default WNDCLASSEX structure
  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 = NULL;
  m_wcex.lpszMenuName  = NULL;
  m_wcex.lpszClassName = m_Class;
  m_wcex.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);
}

HWND cApplication::GethWnd()
{
  return m_hWnd;
}

HINSTANCE cApplication::GethInst()
{
  return m_hInst;
}

BOOL cApplication::Run()
{
  MSG Msg;

  // Register window class
  if(!RegisterClassEx(&m_wcex))
    return FALSE;

  // Create the Main Window
  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;

  // Show and update the window
  ShowWindow(m_hWnd, SW_NORMAL);
  UpdateWindow(m_hWnd);

  // Make sure client area is correct size
  Resize(m_Width, m_Height);

  // Initialize COM
  CoInitialize(NULL);

  if(Init() == TRUE) {
     // Enter the message pump
    ZeroMemory(&Msg, sizeof(MSG));
    while(Msg.message != WM_QUIT) {

      // Handle Windows messages (if any)
      if(PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE)) {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
      } else {
        // Do per-frame processing, break on FALSE return value
        if(Frame() == FALSE)
          break;
      }
    }
  }

  Shutdown();

  // Shutdown COM
  CoUninitialize();

  // Unregister the window class
  UnregisterClass(m_Class, m_hInst);

  return TRUE;
}

BOOL cApplication::Error(BOOL Fatal, char *Text, ...)
{
  char CaptionText[12];
  char ErrorText[2048];
  va_list valist;

  // Build the message box caption based on fatal flag
  if(Fatal == FALSE)
    strcpy(CaptionText, "Error");
  else 
    strcpy(CaptionText, "Fatal Error");

  // Build variable text buffer
  va_start(valist, Text);
  vsprintf(ErrorText, Text, valist);
  va_end(valist);

  // Display the message box
  MessageBox(NULL, ErrorText, CaptionText, MB_OK | MB_ICONEXCLAMATION);

  // Post a quit message if error was fatal
  if(Fatal == TRUE)
    PostQuitMessage(0);

  return TRUE;
}

BOOL cApplication::Move(long XPos, long YPos)
{
  RECT ClientRect;

  GetClientRect(m_hWnd, &ClientRect);
  MoveWindow(m_hWnd, XPos, YPos, ClientRect.right, ClientRect.bottom, TRUE);

  return TRUE;
}

BOOL cApplication::Resize(long Width, long Height)
{
  RECT WndRect, ClientRect;
  long WndWidth, WndHeight;

  GetWindowRect(m_hWnd, &WndRect);
  GetClientRect(m_hWnd, &ClientRect);

  WndWidth  = (WndRect.right  - (ClientRect.right  - Width))  - WndRect.left;
  WndHeight = (WndRect.bottom - (ClientRect.bottom - Height)) - WndRect.top;

  MoveWindow(m_hWnd, WndRect.left, WndRect.top, WndWidth, WndHeight, TRUE);

  return TRUE;
}

BOOL cApplication::ShowMouse(BOOL Show)
{
  ShowCursor(Show);
  return TRUE;
}

// The message procedure - empty except for destroy message
long FAR PASCAL AppWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
  switch(uMsg) {
    case WM_DESTROY:
      PostQuitMessage(0);
      return 0;

    default: return g_pApplication->MsgProc(hWnd, uMsg, wParam, lParam);
  }
}

cStateManager::cStateManager() 
{ 
  m_StateParent = NULL; 
}

cStateManager::~cStateManager() 
{
  PopAll();
}

// Push a function on to the stack
void cStateManager::Push(void (*Function)(void *Ptr, long Purpose), void *DataPtr)
{
  sState *StatePtr;

  // Don't push a NULL value
  if(Function != NULL) {
    // Allocate a new state and push it on stack
    StatePtr = new sState();

    StatePtr->Function = Function;
    StatePtr->Next = m_StateParent;

    m_StateParent = StatePtr;

    // Call state with init purpose
    StatePtr->Function(DataPtr, INITPURPOSE);
  }
}

BOOL cStateManager::Pop(void *DataPtr)
{
  sState *StatePtr;

  // Remove the head of stack (if any)
  if((StatePtr = m_StateParent) != NULL) {
    // First call with shutdown purpose
    m_StateParent->Function(DataPtr, SHUTDOWNPURPOSE);

    m_StateParent = StatePtr->Next;
    StatePtr->Next = NULL;
    delete StatePtr;
  }

  // return TRUE if more states exist, FALSE otherwise
  if(m_StateParent == NULL)
    return FALSE;
  return TRUE;
}

void cStateManager::PopAll(void *DataPtr)
{
  while(Pop(DataPtr) == TRUE);
}

BOOL cStateManager::Process(void *DataPtr)
{ 
  // return an error if no more states
  if(m_StateParent == NULL)
    return FALSE;

  // Process the top-most state
  m_StateParent->Function(DataPtr, FRAMEPURPOSE); 

  return TRUE;
}

cProcessManager::cProcessManager() 
{ 
  m_ProcessParent = NULL; 
}

cProcessManager::~cProcessManager() 
{
  // Pop each process
  while(Pop()==TRUE);
}

// Push a function on to the stack
void cProcessManager::Push(void (*Process)(void *Ptr, long Purpose), void *DataPtr)
{
  // Don't push a NULL value
  if(Process != NULL) {
    // Allocate a new process and push it on stack
    sProcess *ProcessPtr = new sProcess();
    ProcessPtr->Function = Process;
    ProcessPtr->Next = m_ProcessParent;
    m_ProcessParent = ProcessPtr;

    // Call process with init purpose
    ProcessPtr->Function(DataPtr, INITPURPOSE);
  }
}

// Pop top process from stack
BOOL cProcessManager::Pop(void *DataPtr)
{
  sProcess *ProcessPtr;

  // Remove the head of stack (if any)
  if((ProcessPtr = m_ProcessParent) != NULL) {
    // First call with shutdown purpose
    m_ProcessParent->Function(DataPtr, SHUTDOWNPURPOSE);

    m_ProcessParent = ProcessPtr->Next;
    ProcessPtr->Next = NULL;
    delete ProcessPtr;
  }

  // return TRUE if more processes exist, FALSE otherwise
  if(m_ProcessParent == NULL)
    return FALSE;
  return TRUE;
}

void cProcessManager::PopAll(void *DataPtr)
{
  while(Pop(DataPtr) == TRUE);
}

// Process all functions
void cProcessManager::Process(void *DataPtr)
{ 
  sProcess *ProcessPtr = m_ProcessParent;

  while(ProcessPtr != NULL) {
    ProcessPtr->Function(DataPtr, FRAMEPURPOSE);
    ProcessPtr = ProcessPtr->Next;
  }
}

cDataPackage::cDataPackage()  
{  
  m_Buf = NULL; 
  m_Size = 0; 
}

cDataPackage::~cDataPackage() 
{ 
  Free(); 
}

void *cDataPackage::Create(unsigned long Size)
{
  // Free a previously created buffer
  Free();

  // Allocate some memory and return a pointer
  return (m_Buf = (void*)new char[(m_Size = Size)]);
}

// Free the allocated memory
void cDataPackage::Free() 
{ 
  delete m_Buf; 
  m_Buf = NULL; 
  m_Size = 0; 
}

BOOL cDataPackage::Save(char *Filename)
{
  FILE *fp;

  // Make sure there's something to write
  if(m_Buf != NULL && m_Size) {
    // Open file, write size and data
    if((fp=fopen(Filename, "wb")) != NULL) {
      fwrite(&m_Size, 1, 4, fp);
      fwrite(m_Buf, 1, m_Size, fp);
      fclose(fp);
      return TRUE;
    }
  }

  return FALSE;
}

void *cDataPackage::Load(char *Filename, unsigned long *Size)
{
  FILE *fp;

  // Free a prior buffer
  Free();

  if((fp=fopen(Filename, "rb"))!=NULL) {
    // Read in size and data
    fread(&m_Size, 1, 4, fp);
    if((m_Buf = (void*)new char[m_Size]) != NULL)
      fread(m_Buf, 1, m_Size, fp);
    fclose(fp);

    // Store size to return
    if(Size != NULL)
      *Size = m_Size;

    // return pointer
    return m_Buf;
  }

  return NULL;
}

void *cDataPackage::GetPtr()
{
  return m_Buf;
}

unsigned long cDataPackage::GetSize()
{
  return m_Size;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩三级免费观看| 亚洲天堂久久久久久久| 国产精品自在欧美一区| 亚洲一区自拍偷拍| 中文字幕一区在线| 久久免费电影网| 欧美欧美午夜aⅴ在线观看| 色综合久久精品| 成人v精品蜜桃久久一区| 国产一区二区三区av电影| 三级一区在线视频先锋 | 91视频一区二区| 国产91精品精华液一区二区三区| 免费看欧美美女黄的网站| 免费在线看成人av| www.激情成人| 久久99久国产精品黄毛片色诱| 亚洲国产精品久久久久婷婷884 | 色悠悠久久综合| 北条麻妃一区二区三区| 不卡在线视频中文字幕| www.欧美色图| 在线精品视频一区二区| 欧美男同性恋视频网站| 欧美疯狂性受xxxxx喷水图片| 欧美色大人视频| 欧美一区二区成人6969| 日韩一区二区影院| 2024国产精品| 国产精品无圣光一区二区| 国产精品第13页| 夜夜嗨av一区二区三区四季av| 亚洲成人激情社区| 美腿丝袜在线亚洲一区 | 一区二区视频在线看| 亚洲私人影院在线观看| 亚洲午夜三级在线| 另类小说综合欧美亚洲| 粉嫩在线一区二区三区视频| 99精品一区二区| 欧美精品色综合| 久久久久久久免费视频了| 中文字幕在线一区免费| 亚洲自拍另类综合| 国产真实乱子伦精品视频| 国产999精品久久久久久绿帽| a4yy欧美一区二区三区| 欧美视频一区二区三区四区| 欧美精品一区视频| 亚洲精品老司机| 国产资源精品在线观看| 欧美在线免费观看亚洲| 久久―日本道色综合久久| 亚洲色图在线播放| 极品少妇一区二区| 欧美主播一区二区三区| 国产精品色哟哟| 无吗不卡中文字幕| 成人av免费在线观看| 在线不卡欧美精品一区二区三区| 国产精品丝袜久久久久久app| 日韩成人一级片| av日韩在线网站| 欧洲精品视频在线观看| 国产精品麻豆一区二区| 久久99国产精品麻豆| 色综合久久久久综合| 国产欧美精品区一区二区三区| 亚洲影院理伦片| 色综合天天综合给合国产| 2020国产精品久久精品美国| 亚洲成人免费影院| 色香色香欲天天天影视综合网| 精品国产乱码久久久久久久久| 一区二区三区日韩精品| 不卡电影一区二区三区| 2020国产精品自拍| 亚洲一线二线三线久久久| 成人一区二区视频| 欧美一级生活片| 亚洲国产日韩在线一区模特| 91免费版在线| 亚洲少妇最新在线视频| 99re亚洲国产精品| 国产精品看片你懂得| 大陆成人av片| 国产亚洲欧美一级| 国模一区二区三区白浆| 欧美成人乱码一区二区三区| 亚洲成av人片| 555www色欧美视频| 天天影视网天天综合色在线播放| 在线观看一区二区视频| 亚洲国产欧美一区二区三区丁香婷| 91原创在线视频| 亚洲欧洲精品一区二区三区| 91在线免费视频观看| 一区二区不卡在线视频 午夜欧美不卡在| 丁香婷婷深情五月亚洲| 国产精品久久久久久久蜜臀| 97久久精品人人做人人爽50路| 亚洲视频狠狠干| 欧美三级中文字幕| 免费观看在线综合色| 欧美精品一区二区久久久| 国产乱理伦片在线观看夜一区| 欧美激情一区在线观看| 91香蕉视频黄| 亚洲电影第三页| 日韩视频在线一区二区| 精品午夜一区二区三区在线观看| 久久久精品国产99久久精品芒果| 成人中文字幕电影| 亚洲成人综合网站| 日韩视频一区二区在线观看| 国产精品一区二区久久精品爱涩| 国产精品白丝在线| 欧美久久一区二区| 国产成人午夜99999| 亚洲欧美色图小说| 日韩欧美国产精品一区| 成人一二三区视频| 国产精品久久久久久久久快鸭| 91视频免费观看| 久久av中文字幕片| 亚洲欧美韩国综合色| 欧美一卡二卡在线观看| 成人午夜私人影院| 日本三级亚洲精品| 中文字幕一区二区三区精华液| 6080亚洲精品一区二区| 成人福利在线看| 日本欧美在线看| 亚洲欧洲日韩在线| 久久综合九色综合久久久精品综合| 91丨九色丨蝌蚪富婆spa| 日韩成人精品视频| 亚洲欧美怡红院| 337p日本欧洲亚洲大胆色噜噜| 色妹子一区二区| 国产成人三级在线观看| 亚洲电影在线播放| 欧美国产激情一区二区三区蜜月| 6080yy午夜一二三区久久| 不卡区在线中文字幕| 久久99热这里只有精品| 综合亚洲深深色噜噜狠狠网站| 欧美福利视频导航| 99精品视频中文字幕| 成人午夜电影久久影院| 国产精品1区2区3区在线观看| 青青草91视频| 三级精品在线观看| 亚洲国产一区视频| 亚洲美女视频在线观看| 中文字幕免费不卡在线| 国产亚洲欧美色| 国产日本欧洲亚洲| 久久女同精品一区二区| 日韩欧美在线一区二区三区| 99久久久精品| 高清不卡在线观看| 狠狠色丁香婷综合久久| 日本成人中文字幕在线视频| 亚瑟在线精品视频| 午夜伦理一区二区| 图片区小说区国产精品视频| 亚洲香蕉伊在人在线观| 一区二区三区毛片| 天天射综合影视| 国产一区 二区 三区一级| 丁香激情综合国产| 欧美日韩一区三区| 精品国产99国产精品| 欧美韩国一区二区| 亚洲国产乱码最新视频| 九九**精品视频免费播放| 国产.欧美.日韩| 欧美中文字幕一区二区三区| 制服丝袜av成人在线看| 国产亚洲一本大道中文在线| 亚洲欧美日韩在线不卡| 久久精品国内一区二区三区| 成人自拍视频在线| 91精品国产乱码久久蜜臀| 国产精品热久久久久夜色精品三区 | 日韩一区二区精品葵司在线| 欧美激情一区二区三区全黄| 亚洲在线视频免费观看| 国模少妇一区二区三区| 波多野结衣中文字幕一区二区三区| 欧美在线视频你懂得| 久久精品无码一区二区三区| 亚洲第一狼人社区| 成人激情黄色小说| 精品国产乱码久久久久久老虎| 亚洲一区免费在线观看| 国产精品夜夜嗨| 91精品国产丝袜白色高跟鞋| 亚洲精品视频在线观看免费|