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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? 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一区二区三区免费野_久草精品视频
久久成人18免费观看| 亚洲一卡二卡三卡四卡无卡久久| 在线国产电影不卡| aaa欧美日韩| 91蝌蚪porny九色| 91美女在线观看| 欧美性色黄大片| 在线电影院国产精品| 91精品国产综合久久小美女| 欧美成人三级在线| 久久久久国产精品麻豆| 欧美高清在线一区| 一区二区三区久久久| 午夜av一区二区三区| 蜜臀a∨国产成人精品| 国产呦萝稀缺另类资源| gogogo免费视频观看亚洲一| 91福利视频网站| 欧美一区二区免费视频| 久久久久久久久久美女| 成人免费在线视频| 天天综合天天综合色| 国产综合一区二区| 91欧美一区二区| 69堂亚洲精品首页| 国产丝袜美腿一区二区三区| 亚洲精选视频免费看| 开心九九激情九九欧美日韩精美视频电影 | 2022国产精品视频| 国产精品女同一区二区三区| 一区二区三区视频在线看| 五月天视频一区| 国产高清精品在线| 欧美天堂一区二区三区| 国产亚洲短视频| 亚洲成av人片在线观看无码| 国产在线国偷精品免费看| 在线观看成人小视频| 337p粉嫩大胆色噜噜噜噜亚洲| 成人免费小视频| 日本亚洲免费观看| 91丝袜呻吟高潮美腿白嫩在线观看| 91精品国产乱码| 亚洲精品水蜜桃| 国产精品一区久久久久| 91麻豆精品国产自产在线观看一区| 国产精品不卡一区| 国产在线观看一区二区| 91精品国产综合久久精品图片| 国产欧美一区二区三区网站| 青娱乐精品视频| 欧美在线观看18| 中文字幕欧美一| 国产传媒日韩欧美成人| 日韩三区在线观看| 天天综合网天天综合色| 日本大香伊一区二区三区| 国产欧美精品一区二区色综合| 免费日韩伦理电影| 欧美日韩国产影片| 亚洲免费观看高清完整版在线观看| 国产一区二区三区四| 91精品国产黑色紧身裤美女| 亚洲国产中文字幕在线视频综合| av电影天堂一区二区在线观看| 久久久综合激的五月天| 男女男精品视频| 91精品国产一区二区三区| 亚洲国产精品久久艾草纯爱| 色吊一区二区三区| 中文字幕亚洲区| 成人av电影在线观看| 中文字幕巨乱亚洲| 成人美女在线观看| 亚洲欧洲一区二区三区| caoporen国产精品视频| 亚洲欧美一区二区在线观看| 成人激情午夜影院| ...中文天堂在线一区| 91小视频在线免费看| 亚洲欧美经典视频| 欧美色欧美亚洲另类二区| 天天综合天天综合色| 91麻豆精品国产91久久久使用方法| 日韩av在线免费观看不卡| 欧美大黄免费观看| 久久99久国产精品黄毛片色诱| 日韩欧美亚洲国产精品字幕久久久| 日本在线不卡视频| 日韩欧美一二三| 国产成a人亚洲| 亚洲精品国产成人久久av盗摄| 欧美视频你懂的| 视频在线观看国产精品| 精品对白一区国产伦| 成人午夜av在线| 亚洲免费观看高清| 欧美日韩在线观看一区二区 | 国产一区二区三区精品欧美日韩一区二区三区 | 久久美女高清视频| 国产成人精品www牛牛影视| ...av二区三区久久精品| 欧美视频一区二区三区四区| 久久国产婷婷国产香蕉| 国产精品乱码一区二区三区软件 | 91黄色激情网站| 奇米精品一区二区三区在线观看| 久久九九久精品国产免费直播| 99re8在线精品视频免费播放| 天天色 色综合| 国产欧美一区二区在线观看| 日本高清不卡aⅴ免费网站| 日韩精品欧美精品| 国产精品视频免费| 91精品国产欧美一区二区成人| 国产一区二区三区不卡在线观看| 亚洲丝袜美腿综合| 精品99999| 欧美图区在线视频| 国产二区国产一区在线观看| 亚洲一区欧美一区| 国产日韩三级在线| 欧美一级精品大片| 一本色道久久综合亚洲精品按摩| 免费av成人在线| 尤物视频一区二区| 亚洲国产精品v| 日韩亚洲电影在线| 欧美体内she精高潮| 成人福利在线看| 国产老妇另类xxxxx| 午夜精品久久久久| 亚洲午夜av在线| 1000精品久久久久久久久| xnxx国产精品| 精品捆绑美女sm三区| 欧美精品 国产精品| 91在线视频在线| bt7086福利一区国产| 国产99久久久精品| 国内精品视频666| 久久69国产一区二区蜜臀| 婷婷夜色潮精品综合在线| 亚洲三级在线播放| 亚洲欧美另类小说| 中文字幕中文字幕中文字幕亚洲无线| 精品国产网站在线观看| 日韩欧美一区在线| 欧美一区二区三区在线观看| 日韩一卡二卡三卡国产欧美| 欧美亚洲一区三区| 91福利社在线观看| 欧美日韩国产在线观看| 日韩av在线免费观看不卡| 日韩电影在线一区二区三区| 丁香另类激情小说| 6080日韩午夜伦伦午夜伦| 久久久久九九视频| 亚洲午夜久久久| 懂色av一区二区三区免费观看| 在线观看亚洲精品视频| 国产亚洲欧洲一区高清在线观看| 亚洲免费在线视频| 国产伦精品一区二区三区免费迷| 色美美综合视频| www国产精品av| 午夜av区久久| 色哟哟一区二区| 久久久不卡网国产精品二区| 亚洲午夜电影网| 91看片淫黄大片一级在线观看| 日韩西西人体444www| 亚洲成人免费影院| 99re成人精品视频| 欧美国产成人在线| 国产又粗又猛又爽又黄91精品| 欧美精品久久久久久久久老牛影院 | 亚洲欧美偷拍卡通变态| 久久国产精品色| 欧美性受xxxx| 国产精品传媒在线| 狠狠色丁香婷婷综合| 欧美精品乱码久久久久久| 一区二区视频在线| 99这里只有久久精品视频| 精品美女一区二区三区| 日本欧美肥老太交大片| 欧美美女一区二区| 亚洲成人免费视| 欧美三区在线观看| 亚洲自拍偷拍麻豆| 色噜噜夜夜夜综合网| 亚洲欧美视频一区| 中文字幕一区二区在线播放| 亚洲另类在线一区| 国产一区不卡视频| 欧美男同性恋视频网站| 中文字幕av在线一区二区三区| 日本欧美一区二区| 在线亚洲一区二区|