📄 new 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 + -