📄 housekeeper.c
字号:
/* * $Id: housekeeper.c,v 1.12 2003/08/15 08:45:46 weiym Exp $ * *little game housekeeper, also named sokoban. *written by Song Lixin(zjujoe@263.net) 2001.3.6 */#include "map.h"#define ID_GOTO 7980#define ID_NEXT 7990#define ID_PREVIOUS 8000 #define ID_RESTART 8010#define ID_UNDO 8020#define ID_EXIT 8040#define ID_MAP_A 8050#define ID_MAP_B 8060#define ID_MAP_C 8070#define ID_MAP_D 8080#define ID_MAP_E 8090#define ID_MAP_F 8100#define ID_MAP_G 8110#define ID_MAP_H 8120#define ID_ABOUT 8130 #define WIDTH_LARGEWIN 600#define HEIGHT_LARGEWIN 400int TestMyWinProc(HWND hWnd,int message,WPARAM wParam,LPARAM lParam);void InitMyWinCreateInfo(PMAINWINCREATE pCreateInfo);HMENU createmenu1(void);HMENU createpmenugame(void);HMENU createpmenucollection(void);HMENU createpmenuabout(void);BOOL InitializeApp(void);void OnClose(HWND hWnd);void OnDraw(HWND hWnd,HDC hDC);static BITMAP bitmapAll[6];#define IDC_LEVELINPUT 9000DLGTEMPLATE DlgInputLevel = { WS_BORDER | WS_CAPTION, WS_EX_IMECOMPOSE, 70, 80, 400, 158, "Choose level", 0, 0, 4, NULL, 0};CTRLDATA CtrlInputLevel [] = { { "static", WS_VISIBLE | SS_RIGHT, 14, 30, 150, 18, IDC_STATIC, "Game Level:", 0 }, { "edit", WS_VISIBLE | WS_BORDER | WS_TABSTOP, 180, 30, 100, 22, IDC_LEVELINPUT, NULL, 0 }, { "button", WS_VISIBLE | BS_PUSHBUTTON | WS_TABSTOP, 80, 94, 100, 28, IDOK, "Ok", 0 }, { "button", WS_VISIBLE | BS_PUSHBUTTON | WS_TABSTOP, 256, 94, 100, 28, IDCANCEL, "Cancel", 0 }}; static int DialogInputLevelProc(HWND hDlg, int message, WPARAM wParam, LPARAM lParam){ char strText[4]; int i; switch (message) { case MSG_INITDIALOG: return 1; case MSG_COMMAND: switch (wParam) { case IDOK: GetDlgItemText(hDlg,IDC_LEVELINPUT,strText,3); i = atoi(strText); EndDialog(hDlg,i); break; case IDCANCEL: EndDialog (hDlg, 0); break; } break; } return DefaultDialogProc (hDlg, message, wParam, lParam);}HMENU createmenu1(void){ HMENU hmnu; MENUITEMINFO mii; hmnu = CreateMenu(); memset (&mii, 0, sizeof(MENUITEMINFO)); mii.type = MFT_STRING; mii.id = 100; mii.typedata = (DWORD)"Game"; mii.hsubmenu = createpmenugame(); InsertMenuItem(hmnu, 0, TRUE, &mii); mii.type = MFT_STRING; mii.id = 110; mii.typedata = (DWORD)"Collection"; mii.hsubmenu = createpmenucollection(); InsertMenuItem(hmnu, 1, TRUE, &mii); mii.type = MFT_STRING; mii.id = 120; mii.typedata = (DWORD)"About"; mii.hsubmenu = createpmenuabout(); InsertMenuItem(hmnu, 2, TRUE, &mii); return hmnu;}HMENU createpmenuabout(void){ HMENU hmnu; MENUITEMINFO mii; memset (&mii, 0, sizeof(MENUITEMINFO)); mii.type = MFT_STRING; mii.id = 0; mii.typedata = (DWORD)"About"; hmnu = CreatePopupMenu (&mii); memset (&mii, 0, sizeof(MENUITEMINFO)); mii.type = MFT_STRING ; mii.state = 0; mii.id = ID_ABOUT; mii.typedata = (DWORD)"About House Keeper"; InsertMenuItem(hmnu, 0, TRUE, &mii); return hmnu;}HMENU createpmenugame(void){ HMENU hmnu; MENUITEMINFO mii; memset (&mii, 0, sizeof(MENUITEMINFO)); mii.type = MFT_STRING; mii.id = 0; mii.typedata = (DWORD)"Game"; hmnu = CreatePopupMenu (&mii); memset (&mii, 0, sizeof(MENUITEMINFO)); mii.type = MFT_STRING ; mii.state = 0; mii.id = ID_GOTO; mii.typedata = (DWORD)"Goto Level"; InsertMenuItem(hmnu, 0, TRUE, &mii); memset (&mii, 0, sizeof(MENUITEMINFO)); mii.type = MFT_STRING ; mii.state = 0; mii.id = ID_NEXT; mii.typedata = (DWORD)"Next Level"; InsertMenuItem(hmnu, 1, TRUE, &mii); memset (&mii, 0, sizeof(MENUITEMINFO)); mii.type = MFT_STRING ; mii.state = 0; mii.id = ID_PREVIOUS; mii.typedata = (DWORD)"Previous Level"; InsertMenuItem(hmnu, 2, TRUE, &mii); mii.type = MFT_STRING ; mii.state = 0; mii.id = ID_RESTART; mii.typedata = (DWORD)"Restart Level"; InsertMenuItem(hmnu, 3, TRUE, &mii); mii.type = MFT_STRING ; mii.state = 0; mii.id = ID_UNDO; mii.typedata = (DWORD)"Undo"; InsertMenuItem(hmnu, 4, TRUE, &mii); mii.type = MFT_STRING ; mii.state = 0; mii.id = ID_EXIT; mii.typedata = (DWORD)"Exit"; InsertMenuItem(hmnu, 5, TRUE, &mii); return hmnu;}HMENU createpmenucollection(void){ HMENU hmnu; MENUITEMINFO mii; memset (&mii, 0, sizeof(MENUITEMINFO)); mii.type = MFT_STRING; mii.id = 0; mii.typedata = (DWORD)"Collection"; hmnu = CreatePopupMenu (&mii); memset (&mii, 0, sizeof(MENUITEMINFO)); mii.type = MFT_STRING ; mii.state = 0; mii.id = ID_MAP_A; mii.typedata = (DWORD)"Collection A"; InsertMenuItem(hmnu, 0, TRUE, &mii); memset (&mii, 0, sizeof(MENUITEMINFO)); mii.type = MFT_STRING ; mii.state = 0; mii.id = ID_MAP_B; mii.typedata = (DWORD)"Collection B"; InsertMenuItem(hmnu, 1, TRUE, &mii); memset (&mii, 0, sizeof(MENUITEMINFO)); mii.type = MFT_STRING ; mii.state = 0; mii.id = ID_MAP_C; mii.typedata = (DWORD)"Collection C"; InsertMenuItem(hmnu, 2, TRUE, &mii); memset (&mii, 0, sizeof(MENUITEMINFO)); mii.type = MFT_STRING ; mii.state = 0; mii.id = ID_MAP_D; mii.typedata = (DWORD)"Collection D"; InsertMenuItem(hmnu, 3, TRUE, &mii); memset (&mii, 0, sizeof(MENUITEMINFO)); mii.type = MFT_STRING ; mii.state = 0; mii.id = ID_MAP_E; mii.typedata = (DWORD)"Collection E"; InsertMenuItem(hmnu, 4, TRUE, &mii); memset (&mii, 0, sizeof(MENUITEMINFO)); mii.type = MFT_STRING ; mii.state = 0; mii.id = ID_MAP_F; mii.typedata = (DWORD)"Collection F"; InsertMenuItem(hmnu, 5, TRUE, &mii); memset (&mii, 0, sizeof(MENUITEMINFO)); mii.type = MFT_STRING ; mii.state = 0; mii.id = ID_MAP_G; mii.typedata = (DWORD)"Collection G"; InsertMenuItem(hmnu, 6, TRUE, &mii); memset (&mii, 0, sizeof(MENUITEMINFO)); mii.type = MFT_STRING ; mii.state = 0; mii.id = ID_MAP_H; mii.typedata = (DWORD)"Collection H"; InsertMenuItem(hmnu, 7, TRUE, &mii); return hmnu;}int TestMyWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam){ HDC hdc; int iRet; int x,y; ptagLevelCollection pTempColl; ptagLevel pTempLev; int iDir = 0; //char strTemp[50]; switch(message){ case MSG_CREATE: if(!InitializeApp()){ return 1; } DlgInputLevel.controls = CtrlInputLevel; break; case MSG_COMMAND: switch(LOWORD(wParam)){ case ID_GOTO: iRet = DialogBoxIndirectParam(&DlgInputLevel, hWnd, DialogInputLevelProc, 0L); if ((iRet > 0) && (iRet <= theMap->current->iNoOfLevels)) { pTempLev = theMap->current->head; if (pTempLev->iNo != iRet) { pTempLev = pTempLev->next; while(pTempLev != theMap->current->head) { if(pTempLev->iNo == iRet) break; pTempLev = pTempLev->next; } } if ((pTempLev->iNo == iRet) && (pTempLev != theMap->currentLevel)) { theMap->current->current = pTempLev; PlayRestart(); InvalidateRect(hWnd, NULL, TRUE); } } break; case ID_NEXT: theMap->current->current = theMap->current->current->next; PlayRestart(); InvalidateRect(hWnd, NULL, TRUE); break; case ID_PREVIOUS: theMap->current->current = theMap->current->current->prev; PlayRestart(); InvalidateRect(hWnd, NULL, TRUE); break; case ID_RESTART: PlayRestart(); InvalidateRect(hWnd, NULL, TRUE); break; case ID_UNDO: PlayUndo(hWnd); break; case ID_EXIT: OnClose(hWnd);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -