X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fmain-win.c;h=a848e2a0a588e3edf248d090a81234610fff546a;hb=refs%2Fheads%2Fmaster;hp=631a9b313bdd90dd7b23b232d690b52e96ae2992;hpb=4061e9ba672b032a64070fe0852bc0e8cab260fa;p=hengband%2Fhengband.git diff --git a/src/main-win.c b/src/main-win.c index 631a9b313..d50d04f50 100644 --- a/src/main-win.c +++ b/src/main-win.c @@ -103,10 +103,10 @@ #include "floor/floor-events.h" #include "game-option/runtime-arguments.h" #include "game-option/special-options.h" -#include "io/record-play-movie.h" #include "io/files-util.h" #include "io/inet.h" #include "io/input-key-acceptor.h" +#include "io/record-play-movie.h" #include "io/signal-handlers.h" #include "io/write-diary.h" #include "main/angband-initializer.h" @@ -695,21 +695,26 @@ static void term_getsize(term_data *td) TERM_LEN wid = td->cols * td->tile_wid + td->size_ow1 + td->size_ow2; TERM_LEN hgt = td->rows * td->tile_hgt + td->size_oh1 + td->size_oh2; - RECT rc; - rc.left = 0; - rc.right = rc.left + wid; - rc.top = 0; - rc.bottom = rc.top + hgt; - - AdjustWindowRectEx(&rc, td->dwStyle, TRUE, td->dwExStyle); - td->size_wid = rc.right - rc.left; - td->size_hgt = rc.bottom - rc.top; - if (!td->w) - return; + RECT rw, rc; + if (td->w) { + GetWindowRect(td->w, &rw); + GetClientRect(td->w, &rc); - GetWindowRect(td->w, &rc); - td->pos_x = rc.left; - td->pos_y = rc.top; + td->size_wid = (rw.right - rw.left) - (rc.right - rc.left) + wid; + td->size_hgt = (rw.bottom - rw.top) - (rc.bottom - rc.top) + hgt; + + td->pos_x = rw.left; + td->pos_y = rw.top; + } else { + /* Tempolary calculation */ + rc.left = 0; + rc.right = wid; + rc.top = 0; + rc.bottom = hgt; + AdjustWindowRectEx(&rc, td->dwStyle, TRUE, td->dwExStyle); + td->size_wid = rc.right - rc.left; + td->size_hgt = rc.bottom - rc.top; + } } /* @@ -812,6 +817,7 @@ static void save_prefs(void) strcpy(buf, use_bg ? "1" : "0"); WritePrivateProfileString("Angband", "BackGround", buf, ini_file); WritePrivateProfileString("Angband", "BackGroundBitmap", bg_bitmap_file[0] != '\0' ? bg_bitmap_file : "bg.bmp", ini_file); + WritePrivateProfileString("Angband", "SaveFile", savefile, ini_file); for (int i = 0; i < MAX_TERM_DATA; ++i) { save_prefs_aux(i); @@ -887,6 +893,7 @@ static void load_prefs(void) arg_music = (GetPrivateProfileInt("Angband", "Music", 0, ini_file) != 0); use_bg = GetPrivateProfileInt("Angband", "BackGround", 0, ini_file); GetPrivateProfileString("Angband", "BackGroundBitmap", "bg.bmp", bg_bitmap_file, 1023, ini_file); + GetPrivateProfileString("Angband", "SaveFile", "", savefile, 1023, ini_file); for (int i = 0; i < MAX_TERM_DATA; ++i) { load_prefs_aux(i); } @@ -940,15 +947,17 @@ static void load_sound_prefs(void) char wav_path[1024]; char *zz[SAMPLE_SOUND_MAX]; - path_build(ini_path, 1024, ANGBAND_DIR_XTRA_SOUND, "sound.cfg"); + path_build(ini_path, 1024, ANGBAND_DIR_XTRA_SOUND, "sound_debug.cfg"); + if (GetPrivateProfileString("Device", "type", "", mci_device_type, 256, ini_path) == 0) { + path_build(ini_path, 1024, ANGBAND_DIR_XTRA_SOUND, "sound.cfg"); + GetPrivateProfileString("Device", "type", "", mci_device_type, 256, ini_path); + } + for (int i = 0; i < SOUND_MAX; i++) { GetPrivateProfileString("Sound", angband_sound_name[i], "", tmp, 1024, ini_path); int num = tokenize_whitespace(tmp, SAMPLE_SOUND_MAX, zz); for (int j = 0; j < num; j++) { - /* Access the sound */ path_build(wav_path, 1024, ANGBAND_DIR_XTRA_SOUND, zz[j]); - - /* Save the sound filename, if it exists */ if (check_file(wav_path)) sound_file[i][j] = string_make(zz[j]); } @@ -963,8 +972,12 @@ static void load_music_prefs(void) char *zz[SAMPLE_MUSIC_MAX]; char key[80]; - path_build(ini_path, 1024, ANGBAND_DIR_XTRA_MUSIC, "music.cfg"); - GetPrivateProfileString("Device", "type", "", mci_device_type, 256, ini_path); + path_build(ini_path, 1024, ANGBAND_DIR_XTRA_MUSIC, "music_debug.cfg"); + if (GetPrivateProfileString("Device", "type", "", mci_device_type, 256, ini_path) == 0) { + path_build(ini_path, 1024, ANGBAND_DIR_XTRA_MUSIC, "music.cfg"); + GetPrivateProfileString("Device", "type", "", mci_device_type, 256, ini_path); + } + for (int i = 0; i < MUSIC_BASIC_MAX; i++) { GetPrivateProfileString("Basic", angband_music_basic_name[i], "", tmp, 1024, ini_path); int num = tokenize_whitespace(tmp, SAMPLE_MUSIC_MAX, zz); @@ -1967,7 +1980,7 @@ static void windows_map(player_type *player_ptr) static void term_data_link(term_data *td) { term_type *t = &td->t; - term_init(t, td->cols, td->rows, td->keys); + term_init(t, td->cols, td->rows, FILE_READ_BUFF_SIZE); t->soft_cursor = TRUE; t->higher_pict = TRUE; t->attr_blank = TERM_WHITE; @@ -2034,17 +2047,21 @@ static void init_windows(void) } load_prefs(); + + /* Atrributes of main window */ td = &data[0]; td->dwStyle = (WS_OVERLAPPED | WS_THICKFRAME | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_CAPTION | WS_VISIBLE); td->dwExStyle = 0; td->visible = TRUE; + /* Attributes of sub windows */ for (int i = 1; i < MAX_TERM_DATA; i++) { td = &data[i]; td->dwStyle = (WS_OVERLAPPED | WS_THICKFRAME | WS_SYSMENU); td->dwExStyle = (WS_EX_TOOLWINDOW); } + /* Font of each window */ for (int i = 0; i < MAX_TERM_DATA; i++) { td = &data[i]; strncpy(td->lf.lfFaceName, td->font_want, LF_FACESIZE); @@ -2055,11 +2072,11 @@ static void init_windows(void) td->tile_wid = td->font_wid; if (!td->tile_hgt) td->tile_hgt = td->font_hgt; - term_getsize(td); term_window_resize(td); } + /* Create sub windows */ for (int i = MAX_TERM_DATA - 1; i >= 1; --i) { td = &data[i]; @@ -2067,14 +2084,18 @@ static void init_windows(void) td->w = CreateWindowEx(td->dwExStyle, AngList, td->s, td->dwStyle, td->pos_x, td->pos_y, td->size_wid, td->size_hgt, HWND_DESKTOP, NULL, hInstance, NULL); my_td = NULL; + if (!td->w) quit(_("サブウィンドウに作成に失敗しました", "Failed to create sub-window")); + td->size_hack = TRUE; + term_getsize(td); + term_window_resize(td); + if (td->visible) { - td->size_hack = TRUE; ShowWindow(td->w, SW_SHOW); - td->size_hack = FALSE; } + td->size_hack = FALSE; term_data_link(td); angband_term[i] = &td->t; @@ -2084,20 +2105,28 @@ static void init_windows(void) SetActiveWindow(td->w); } - if (data[i].posfix) { - term_window_pos(&data[i], HWND_TOPMOST); + if (td->posfix) { + term_window_pos(td, HWND_TOPMOST); } else { - term_window_pos(&data[i], td->w); + term_window_pos(td, td->w); } } + /* Create main window */ td = &data[0]; my_td = td; td->w = CreateWindowEx(td->dwExStyle, AppName, td->s, td->dwStyle, td->pos_x, td->pos_y, td->size_wid, td->size_hgt, HWND_DESKTOP, NULL, hInstance, NULL); my_td = NULL; + if (!td->w) quit(_("メインウィンドウの作成に失敗しました", "Failed to create Angband window")); + /* Resize */ + td->size_hack = TRUE; + term_getsize(td); + term_window_resize(td); + td->size_hack = FALSE; + term_data_link(td); angband_term[0] = &td->t; normsize.x = td->cols; @@ -2268,6 +2297,7 @@ static void process_menus(player_type *player_ptr, WORD wCmd) } else { game_in_progress = TRUE; term_flush(); + strcpy(savefile, ""); play_game(player_ptr, TRUE, FALSE); quit(NULL); } @@ -3029,7 +3059,7 @@ LRESULT PASCAL AngbandWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam p_ptr->panic_save = 1; signals_ignore_tstp(); (void)strcpy(p_ptr->died_from, _("(緊急セーブ)", "(panic save)")); - (void)save_player(p_ptr); + (void)save_player(p_ptr, SAVE_TYPE_CLOSE_GAME); quit(NULL); return 0; } @@ -3238,10 +3268,8 @@ LRESULT PASCAL AngbandListProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPara return 0; } case WM_NCLBUTTONDOWN: { -#ifdef HTCLOSE if (wParam == HTCLOSE) wParam = HTSYSMENU; -#endif /* HTCLOSE */ if (wParam == HTSYSMENU) { if (td->visible) { @@ -3426,7 +3454,7 @@ static void init_stuff(void) strcpy(path + i + 1, "lib\\"); validate_dir(path, TRUE); - init_file_paths(path); + init_file_paths(path, path); validate_dir(ANGBAND_DIR_APEX, FALSE); validate_dir(ANGBAND_DIR_BONE, FALSE); if (!check_dir(ANGBAND_DIR_EDIT)) { @@ -3440,6 +3468,7 @@ static void init_stuff(void) validate_dir(ANGBAND_DIR_INFO, FALSE); validate_dir(ANGBAND_DIR_PREF, TRUE); validate_dir(ANGBAND_DIR_SAVE, FALSE); + validate_dir(ANGBAND_DIR_DEBUG_SAVE, FALSE); validate_dir(ANGBAND_DIR_USER, TRUE); validate_dir(ANGBAND_DIR_XTRA, TRUE); path_build(path, sizeof(path), ANGBAND_DIR_FILE, _("news_j.txt", "news.txt"));