int main (int argc, char *argv []) { GtkWidget *label; GnomeClient *client; gnome_score_init("same-gnome"); bindtextdomain (PACKAGE, GNOMELOCALEDIR); textdomain (PACKAGE); gnome_init_with_popt_table ("same-gnome", VERSION, argc, argv, options, 0, NULL); gnome_window_icon_set_default_from_file (GNOME_ICONDIR"/gnome-gsame.png"); client= gnome_master_client (); gtk_signal_connect (GTK_OBJECT (client), "save_yourself", GTK_SIGNAL_FUNC (save_state), argv[0]); gtk_signal_connect (GTK_OBJECT (client), "die", GTK_SIGNAL_FUNC (client_die), NULL); if (GNOME_CLIENT_RESTARTED (client)){ gnome_config_push_prefix (gnome_client_get_config_prefix (client)); restart (); restarted = 1; gnome_config_pop_prefix (); } srand (time (NULL)); app = gnome_app_new("same-gnome", _("Same Gnome")); gtk_window_set_policy(GTK_WINDOW(app), FALSE, FALSE, TRUE); gtk_signal_connect (GTK_OBJECT(app), "delete_event", (GtkSignalFunc)game_quit_callback, NULL); appbar = gnome_appbar_new(FALSE, TRUE, GNOME_PREFERENCES_USER); gnome_app_set_statusbar(GNOME_APP (app), GTK_WIDGET(appbar)); gnome_appbar_set_status(GNOME_APPBAR (appbar), _("Welcome to Same Gnome!")); gnome_app_create_menus(GNOME_APP(app), mainmenu); gnome_app_install_menu_hints(GNOME_APP (app), mainmenu); vb = gtk_vbox_new (FALSE, 0); gnome_app_set_contents (GNOME_APP (app), vb); if (!fname) { fname = gnome_config_get_string ("/same-gnome/Preferences/Scenario=stones.png"); } create_same_board (fname); label = gtk_label_new (_("Score: ")); scorew = gtk_label_new (""); set_score (score); gtk_box_pack_start(GTK_BOX(appbar), label, FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(appbar), scorew, FALSE, TRUE, 0); if (!restarted) new_game (); g_free (fname); gtk_widget_show (vb); gtk_widget_show (GTK_WIDGET(label)); gtk_widget_show (GTK_WIDGET(scorew)); gtk_widget_show (app); gtk_main (); return 0; }
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, SM_ST_SCENARIO, WS_CHILD | WS_VISIBLE | SS_RIGHT, 0, 0, rcClient.bottom - GetSysCharHeight () - 4, 100, GetSysCharHeight () + 4, hWnd, 0); hwnd_menu = CreateWindow ("menubutton", SM_ST_MNB, 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, SM_ST_SETSCORE, 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_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, SM_ST_QUIT, SM_ST_SAME, MB_YESNO | MB_ICONQUESTION | MB_BASEDONPARENT) != IDYES) return 0; DestroyAllControls (hWnd); DestroyMainWindow (hWnd); PostQuitMessage (hWnd); return 0; } return DefaultMainWinProc (hWnd, message, wParam, lParam); }