📄 same.c
字号:
}static void create_same_board (const char *fname){ load_scenario (fname); fill_board ();}static void sel_scenario (HWND hwnd, int sel){ MENUBUTTONITEM mbi; mbi.which = MB_WHICH_TEXT; if (sel != cur_sel_scen) { SendMessage (hwnd_menu, MBM_GETITEMDATA, sel, (LPARAM)&mbi); load_scenario (mbi.text); new_game (hwnd); cur_sel_scen = sel; }}static int fill_menu (HWND hwnd_menu){ int i = 0; MENUBUTTONITEM mbi; struct dirent *e; char *dname = "res/"; DIR *dir; char buff [30]; dir = opendir (dname); if (!dir) return -1; while ((e = readdir (dir)) != NULL){ if (!strstr (e->d_name, ".gif")) { continue; } strcpy (buff, "res/"); strcat (buff, e->d_name); mbi.text = buff; mbi.bmp = NULL; mbi.data = 0; SendMessage (hwnd_menu, MBM_ADDITEM, -1, (LPARAM) &mbi); i ++; } closedir (dir); return i;}static 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 = IDM_NEW; mii.typedata = (DWORD)"New Game"; InsertMenuItem(hmnu, 0, TRUE, &mii); mii.type = MFT_STRING; mii.state = 0; mii.id = IDM_SCORES; mii.typedata = (DWORD)"Scores..."; InsertMenuItem(hmnu, 1, TRUE, &mii); mii.type = MFT_STRING; mii.state = 0; mii.id = IDM_EXIT; mii.typedata = (DWORD)"Exit"; InsertMenuItem(hmnu, 2, TRUE, &mii); return hmnu;}static HMENU createpmenusettings (void){ HMENU hmnu; MENUITEMINFO mii; memset (&mii, 0, sizeof(MENUITEMINFO)); mii.type = MFT_STRING; mii.id = 0; mii.typedata = (DWORD)"Settings"; hmnu = CreatePopupMenu (&mii); mii.type = MFT_STRING ; mii.state = 0; mii.id = IDM_PREF; mii.typedata = (DWORD)"Preferences..."; InsertMenuItem(hmnu, 0, TRUE, &mii); return hmnu;}static 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 = IDM_ABOUT; mii.typedata = (DWORD)"About Same Game..."; InsertMenuItem(hmnu, 0, TRUE, &mii); return hmnu;}static HMENU createmenu (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)"Settings"; mii.hsubmenu = createpmenusettings (); 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;}int SameGameProc (HWND hWnd, int message, WPARAM wParam, LPARAM lParam){ switch (message) { case MSG_CREATE: { RECT rcClient; MENUBUTTONITEM mbi; GetClientRect (hWnd, &rcClient); CreateWindow (CTRL_STATIC, "Scenario: ", WS_CHILD | WS_VISIBLE | SS_RIGHT, 0, 0, rcClient.bottom - GetSysCharHeight () - 4, 100, GetSysCharHeight () + 4, hWnd, 0); hwnd_menu = CreateWindow ("menubutton", "<scenario>", WS_CHILD | WS_VISIBLE, 100, 100, rcClient.bottom - GetSysCharHeight () - 4, 100, GetSysCharHeight () + 4, hWnd, 0); if (fill_menu (hwnd_menu) <= 0) { fprintf (stderr, "Can not find scenario.\n"); return -1; } SendMessage (hwnd_menu, MBM_SETCURITEM, 0, 0); hwnd_score = CreateWindow (CTRL_STATIC, "Score:", WS_CHILD | WS_VISIBLE | SS_RIGHT, 0, 200, rcClient.bottom - GetSysCharHeight () - 4, rcClient.right - 200, GetSysCharHeight () + 4, hWnd, 0); mbi.which = MB_WHICH_TEXT; SendMessage (hwnd_menu, MBM_GETITEMDATA, 0, (LPARAM)&mbi); create_same_board (mbi.text); new_game (hWnd); } break; case MSG_COMMAND: if (LOWORD(wParam) == 100 && HIWORD (wParam) == MBN_CHANGED) { int sel = SendMessage (hwnd_menu, MBM_GETCURITEM, 0, 0); if (sel >= 0) sel_scenario (hWnd, sel); break; } switch (wParam) { case IDM_NEW: new_game (hWnd); break; case IDM_SCORES: break; case IDM_EXIT: SendMessage (hWnd, MSG_CLOSE, 0, 0L); break; case IDM_PREF: break; case IDM_ABOUT: break; } break; case MSG_ERASEBKGND: return 0; case MSG_PAINT: { HDC hdc; hdc = BeginPaint (hWnd); paint (hWnd, hdc); EndPaint (hWnd, hdc); return 0; } case MSG_LBUTTONDOWN: { int x = LOWORD (lParam); int y = HIWORD (lParam); kill_balls (hWnd, x / STONE_SIZE, y / STONE_SIZE); old_x = -1; old_y = -1; } break; case MSG_MOUSEMOVE: { int x = LOWORD (lParam); int y = HIWORD (lParam); if (PtInRect (&rcBoard, x, y)) mark_balls (hWnd, x / STONE_SIZE, y / STONE_SIZE); else unmark_balls (hWnd); } break; case MSG_NCMOUSEMOVE: if (wParam != HT_CLIENT) unmark_balls (hWnd); break; case MSG_MOUSEMOVEIN: if (!wParam) unmark_balls (hWnd); break; case MSG_TIMER: if (wParam == ID_TIMER) { HDC hdc = GetClientDC (hWnd); move_tagged_balls (hdc); ReleaseDC (hdc); } break; case MSG_CLOSE: if (MessageBox (hWnd, "Are you sure to quit?", "Same", MB_YESNO | MB_ICONQUESTION | MB_BASEDONPARENT) != IDYES) return 0; DestroyAllControls (hWnd); DestroyMainWindow (hWnd); PostQuitMessage (hWnd); return 0; } return DefaultMainWinProc (hWnd, message, wParam, lParam);}static void InitCreateInfo (PMAINWINCREATE pCreateInfo){ rcBoard.left = 0; rcBoard.top = 0; rcBoard.right = STONE_COLS * STONE_SIZE; rcBoard.bottom = STONE_LINES * STONE_SIZE; pCreateInfo->dwStyle = WS_CAPTION | WS_BORDER; pCreateInfo->dwExStyle = WS_EX_NONE; pCreateInfo->spCaption = "Same"; pCreateInfo->hMenu = createmenu (); pCreateInfo->hCursor = GetSystemCursor (IDC_ARROW); pCreateInfo->hIcon = 0; pCreateInfo->MainWindowProc = SameGameProc; pCreateInfo->lx = 0; pCreateInfo->ty = 0; pCreateInfo->rx = pCreateInfo->lx + ClientWidthToWindowWidth (WS_CAPTION | WS_BORDER, STONE_COLS * STONE_SIZE); pCreateInfo->by = pCreateInfo->ty + ClientHeightToWindowHeight (WS_CAPTION | WS_BORDER, STONE_LINES * STONE_SIZE, TRUE); pCreateInfo->by += GetSysCharHeight () + 4; pCreateInfo->iBkColor = PIXEL_black; pCreateInfo->dwAddData = 0; pCreateInfo->hHosting = HWND_DESKTOP;}int MiniGUIMain (int argc, const char *argv []){ HWND hMainWnd; MSG Msg; MAINWINCREATE CreateInfo;#if defined(_LITE_VERSION) && !(_STAND_ALONE) int i; const char* layer = NULL; RECT max_rect = {0, 0, 0, 0}; for (i = 1; i < argc; i++) { if (strcmp (argv[i], "-layer") == 0) { layer = argv[i + 1]; break; } } GetLayerInfo (layer, &max_rect, NULL, NULL, NULL); if (JoinLayer (layer, argv[0], max_rect.left, max_rect.top, max_rect.left + 1024, max_rect.top + 768) == INV_LAYER_HANDLE) { printf ("JoinLayer: invalid layer handle.\n"); exit (1); }#endif InitCreateInfo (&CreateInfo); hMainWnd = CreateMainWindow (&CreateInfo); if (hMainWnd == HWND_INVALID) return -1; srand (time (NULL)); ShowWindow (hMainWnd, SW_SHOWNORMAL); while( GetMessage (&Msg, hMainWnd) ) { TranslateMessage (&Msg); DispatchMessage (&Msg); } MainWindowThreadCleanup (hMainWnd); return 0;}#ifndef _LITE_VERSION#include <minigui/dti.c>#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -