⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 new sdk.cpp

📁 俄罗斯方块,适于sdk初学者参考学习
💻 CPP
字号:

#include "StdAfx.h"
#include "map.h"
#include "screen.h"
#include "diamond.h"
#include "game.h"
#include "draw.h"
//-----------------------------全局变量---------------------------------

HINSTANCE   _hinst;     //程序实例
HWND        _hwnd;      //窗口句柄
HMENU       _hmenu;     //菜单句柄
TCHAR       _szAppName[] = TEXT ("gamewindow") ;
HDC         _memdc;     //兼容设备句柄
HBITMAP     _hbit;      //兼容位图
int         max_x,max_y;
game        *thegame;

//------------------------------MY_START--------------------------------
BOOL MY_START()
{
    HDC hdc;
    
	max_x=GetSystemMetrics(SM_CXSCREEN);
    max_y=GetSystemMetrics(SM_CYSCREEN);

    hdc=GetDC(_hwnd);//初始化后台虚拟窗口,当然虚拟窗口处理也可放到screen类中,可省点内存下次再加强吧^v^呵呵
        _memdc=CreateCompatibleDC(hdc);
        _hbit=CreateCompatibleBitmap(hdc,max_x,max_y);
   	    SelectObject(_memdc,_hbit);
   	    SelectObject(_memdc,(HBRUSH)GetStockObject(BLACK_BRUSH));
   	    PatBlt(_memdc,0,0,max_x,max_y,PATCOPY);
    ReleaseDC(_hwnd,hdc);
   
   thegame=new game(_hwnd,_memdc,_hmenu);//生成游戏实例
   return TRUE;
}
//-----------------------------MY_END-----------------------------------
BOOL MY_END()
{
  
  delete thegame;//删除游戏实例
 
  DeleteDC(_memdc);
  DeleteObject(_hbit);
  DestroyMenu(_hmenu);
  
 
  return TRUE;
}
//-------------------------程序入口----主函数----------------------------

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
     MSG          msg ;
     HACCEL       haccel;
     _hinst=hInstance;//记录程序实例句柄
	 _hmenu=LoadMenu(hInstance,"MYMNU"); //创建菜单类
//     haccel=LoadAccelerators(_hinst,"MYACC");

     if(!hPrevInstance)
	 {	  
	
		 if(!InitApplication(hInstance))
		  {
             MessageBox (NULL, TEXT ("系统内存不足!"), _szAppName, MB_ICONERROR) ;
             return(FALSE);
		  }
	 }
	 if(!InitInstance(hInstance,iCmdShow))
		 return(FALSE);
     
     MY_START();  //******处理程序开始的工作******//
     //
	 
     while (GetMessage (&msg, NULL, 0, 0))
     {
		 if(!TranslateAccelerator(_hwnd, haccel, &msg))
		 {
          TranslateMessage (&msg) ;
          DispatchMessage (&msg) ;
		 } 
	 }
     
	 MY_END();   //******处理程序结束的工作******//
     
	 return msg.wParam ;
}
//---------------------------消息处理函数-------------------------------

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
     HDC         hdc ;
     PAINTSTRUCT ps ;
  
     int wmId, wmEvent;
     switch (message)
     {
     case WM_PAINT://处理窗口重画
         hdc = BeginPaint (hwnd, &ps) ;
             BitBlt(hdc,
			         ps.rcPaint.left,
				     ps.rcPaint.top,
				     ps.rcPaint.right-ps.rcPaint.left,
				     ps.rcPaint.bottom-ps.rcPaint.top,
				     _memdc,
				     ps.rcPaint.left,
				     ps.rcPaint.top,
				     SRCCOPY);
          EndPaint (hwnd, &ps) ;
          break;
     case WM_COMMAND:
         wmId    = LOWORD(wParam);
         wmEvent = HIWORD(wParam);

         switch (wmId) { //菜单命令
           case IDM_NEWGAME:
			    thegame->game_newgame();
				break;
		   case IDM_START:
                thegame->game_start(); 
			 	break;
		   case IDM_PAUSE:
			    thegame->game_pause();
				break;
		   case IDM_STOP:
			    thegame->game_stop();
		        break;
		   case IDM_HELP:
			    DialogBox(_hinst,"IDD_DIALOG1",hwnd,(DLGPROC)DialogFunc);
				break;
		   case IDM_EXIT:
				PostQuitMessage(0);
				break;
		 }
		  break;
     case WM_KEYDOWN://按键控制
		 switch((char)wParam)
		 {
		 case VK_DOWN:
			 thegame->game_pressdown();
		     break;
		 case VK_UP:
			 thegame->game_pressrotate();
			 break;
		 case VK_LEFT:
			 thegame->game_pressleft();
			 break;
         case VK_RIGHT:
			 thegame->game_pressright();
			 break;
		 case VK_SPACE:
			 thegame->game_pressfall();
			 break;
		 case VK_ESCAPE:
			 thegame->game_pause();
			 break;
		 }
		 break;
	 case WM_DESTROY:
          PostQuitMessage (0) ;
          break;
     }
     return DefWindowProc (hwnd, message, wParam, lParam) ;
}
//---------------------------对话框函数------------------------------//
BOOL CALLBACK DialogFunc(HWND hdwnd,UINT message,WPARAM wParam,LPARAM lParam)
{

 switch(message)
 {
 case WM_COMMAND:
	 switch(LOWORD(wParam))
	 {
	 case IDOK:
		 EndDialog(hdwnd,0);
		 return 1;
	 }
 
 case WM_DESTROY:
	 
	 EndDialog(hdwnd,0);
	 return 1;
 }
 return 0;
}
//---------------------------定时器函数---------------------------------

void CALLBACK gametimer(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime)
{
	thegame->game_timer_run();
}

//---------------------------------------------------------------------


/////////////////////////////注册窗口类函数/////////////////////////////
BOOL InitApplication(HINSTANCE hInstance)
{
     WNDCLASS     wndclass ;
 
	 wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
     wndclass.lpfnWndProc   = WndProc ;
     wndclass.cbClsExtra    = 0 ;
     wndclass.cbWndExtra    = 0 ;
     wndclass.hInstance     = hInstance ;
     wndclass.hIcon         = LoadIcon (hInstance,"IDI_DDICON");
     wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
     wndclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
     wndclass.lpszMenuName  = NULL;
     wndclass.lpszClassName = _szAppName ;

     return(RegisterClass(&wndclass));
	
}
////////////////////////////////////////////////////////////////////////

/////////////////////////////生成窗口函数////////////////////////////////
BOOL InitInstance(HINSTANCE hInstance,int iCmdShow)
{
    _hwnd = CreateWindow (_szAppName,                 // 窗口类名称
                          TEXT ("积木游戏"),          // 窗口标题
                          WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_THICKFRAME|WS_MINIMIZEBOX,// 窗口样式
                          CW_USEDEFAULT,              // 窗口水平 X 坐标
                          CW_USEDEFAULT,              // 窗口垂直 y 坐标
                          300,                        // 窗口宽度
                          450,                        // 窗口高度
                          NULL,                       // 父窗口句柄
                          _hmenu,                     // 窗口菜单句柄
                          hInstance,                  // 程序实例句柄
                          NULL) ;                     // 创建参数
    
     if(!_hwnd)
	 {
		 MessageBox(NULL, TEXT ("系统内存不足!"), _szAppName, MB_ICONERROR) ;
         return(FALSE);         
	 }
	 ShowWindow (_hwnd,iCmdShow) ;
     UpdateWindow (_hwnd) ;
     return TRUE;
}
/////////////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -