網絡遊戲客戶端從WinMain開始

    網絡遊戲客戶端從WinMain開始

     各位看官,您是否看得懂以下的源碼嗎?如果是,恭喜您,您已經具有WINDOW網絡遊戲開發的一個基本基礎條件,也就是您已經Window應用程序運行最基本最原始的原理。如果沒有看懂,請繼續聽我的解釋。

    記得哦,所有的window應用程序都是從WinMain開始哦(當然,遊戲也不例外,它也是一種應用程序哦)。WinMain函數以及WinProc函數是window應用最基礎也是最重要函數。WinProc是消息回調函數,其功能類似java swing的WindowListener監聽器接口,用來處理窗口等消息。
 
 /*
while(GetMessage(&msg,NULL,0,0))//獲取消息最終將轉發給WinProc函數。
 {
  TranslateMessage(&msg);
  DispatchMessage(&msg);
 }
*/

建立工程以及運行工程如下:



 
 

 


 
#include <windows.h>
#include <stdio.h>
 
 //消息回調函數
LRESULT CALLBACK WinProc(
  HWND hwnd,     
  UINT message,    
  WPARAM wParam, 
  LPARAM lParam 
);
 
//主函數
int WINAPI WinMain(
  HINSTANCE hInstance,      // 應用程序當前實例句柄
  HINSTANCE hPrevInstance,  // 應用程序其他實例句柄
  LPSTR lpCmdLine,          // 指向程序命令行參數的指針
  int nCmdShow              // 應用程序開始執行時窗口顯示方式的整數值標識
)
{
 WNDCLASS wd;
 wd.cbClsExtra=0;//窗口類無擴展
 wd.cbWndExtra=0;//窗口實例無擴展
 wd.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);//窗口背景爲黑色
 wd.hCursor=LoadCursor(NULL,IDC_ARROW);//窗口採用箭頭光標
 wd.hIcon=LoadIcon(NULL,IDI_APPLICATION);//窗口的最小化圖標爲默認圖標
 wd.hInstance=hInstance;//當前實例句柄
 wd.lpfnWndProc=WinProc;//定義窗口處理函數
 wd.lpszClassName="遊戲窗口";//定義窗口類名稱
 wd.lpszMenuName=NULL;//窗口中無菜單
 wd.style=CS_HREDRAW | CS_VREDRAW;//定義窗口類型爲當窗口大小變化時窗口重畫

 RegisterClass(&wd);//註冊窗口類

    //創建窗口
 HWND hwnd;
 hwnd=CreateWindow("遊戲窗口","我的遊戲窗口",WS_OVERLAPPEDWINDOW,
  0,0,800,500,NULL,NULL,hInstance,NULL);
    //顯示窗口
 ShowWindow(hwnd,SW_SHOWNORMAL);
 //更新窗口
 UpdateWindow(hwnd);
      ///消息循環
 MSG msg;
 while(GetMessage(&msg,NULL,0,0))
 {
  TranslateMessage(&msg);
  DispatchMessage(&msg);
 }
 return 0;
}

//窗口函數
LRESULT CALLBACK WinProc(
  HWND hwnd,      // handle to window
  UINT message,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
)
{
 switch(message)
 {
 case WM_LBUTTONDOWN:
  MessageBox(hwnd,"你好!","C++遊戲窗口",0);
  break;
 
 case WM_CLOSE:
  if(MessageBox(hwnd,"關閉遊戲窗口嗎?","C++",MB_YESNO)==IDYES)
  {
       DestroyWindow(hwnd);
  }
  break;
 
 case WM_DESTROY:
    PostQuitMessage(0);
  break;
 default:
  return DefWindowProc(hwnd,message,wParam,lParam);
 }
 return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章