diff --git a/GUI.cpp b/GUI.cpp index 92358316..8083be78 100644 --- a/GUI.cpp +++ b/GUI.cpp @@ -143,6 +143,9 @@ BOOL xg_bShowNumbering = TRUE; // キャレットを表示するか? BOOL xg_bShowCaret = TRUE; +// 二重マス文字。 +std::wstring xg_strDoubleFrameLetters; + ////////////////////////////////////////////////////////////////////////////// // static variables @@ -637,6 +640,8 @@ bool __fastcall XgLoadSettings(void) xg_nViewMode = XG_VIEW_NORMAL; + xg_strDoubleFrameLetters = XgLoadStringDx1(IDS_DBLFRAME_LETTERS_1); + // 会社名キーを開く。 MRegKey company_key(HKEY_CURRENT_USER, s_pszSoftwareCompanyName, FALSE); if (company_key) { @@ -840,6 +845,10 @@ bool __fastcall XgLoadSettings(void) } } + if (!app_key.QuerySz(L"DoubleFrameLetters", sz, ARRAYSIZE(sz))) { + xg_strDoubleFrameLetters = sz; + } + // 保存先のリストを取得する。 if (!app_key.QueryDword(L"SaveToCount", dwValue)) { nDirCount = dwValue; @@ -950,6 +959,7 @@ bool __fastcall XgSaveSettings(void) app_key.SetSz(L"Recent", xg_dict_name.c_str()); app_key.SetSz(L"BlackCellImage", xg_strBlackCellImage.c_str()); + app_key.SetSz(L"DoubleFrameLetters", xg_strDoubleFrameLetters.c_str()); // 保存先のリストを設定する。 nCount = static_cast(s_dirs_save_to.size()); @@ -5365,6 +5375,13 @@ BOOL SettingsDlg_OnInitDialog(HWND hwnd) ComboBox_SetCurSel(hCmb1, ComboBox_FindStringExact(hCmb1, -1, psz)); } + // 二重マス文字。 + HWND hCmb2 = GetDlgItem(hwnd, cmb2); + for (INT i = IDS_DBLFRAME_LETTERS_1; i <= IDS_DBLFRAME_LETTERS_6; ++i) { + ComboBox_AddString(hCmb2, XgLoadStringDx1(i)); + } + ComboBox_SetText(hCmb2, xg_strDoubleFrameLetters.c_str()); + UpdateBlockPreview(hwnd); return TRUE; @@ -5501,6 +5518,11 @@ void SettingsDlg_OnOK(HWND hwnd) ::PostMessageW(xg_hHintsWnd, WM_SIZE, 0, 0); } + // 二重マス文字。 + WCHAR szText[MAX_PATH]; + ComboBox_GetText(GetDlgItem(hwnd, cmb2), szText, _countof(szText)); + xg_strDoubleFrameLetters = szText; + // イメージを更新する。 int x = XgGetHScrollPos(); int y = XgGetVScrollPos(); diff --git a/HISTORY.txt b/HISTORY.txt index b39af568..c2d722d9 100644 --- a/HISTORY.txt +++ b/HISTORY.txt @@ -418,6 +418,7 @@ 蟇セ遘ー縺ョ繝ォ繝シ繝ォ縺ョ縺ィ縺阪↓縲瑚ァ」繧呈アゅa繧(鮟偵槭せ霑ス蜉縺ェ縺)縲阪〒逶、繧貞ッセ遘ー縺ォ縺吶k繧医≧縺ォ縺励◆縲 譛螟ァ蜊倩ェ樣聞蜻ィ繧翫r菫ョ豁」縲 縲茎keleton縲阪ョtypo繧剃ソョ豁」縲 + 縲御コ碁阪槭せ譁蟄励阪ョ謖螳壹′蜿ッ閭ス縺ォ縲 ## History of XWordGiver (English) @@ -471,3 +472,4 @@ - When the policy is symmetrical, "Finding solution (without adding blocks)" forces the board symmetrical. - Fixed around Max Word Length. - Fixed typo of skeleton. + - Enabled the "double-frame letters" settings. diff --git a/lang/en_US.rc b/lang/en_US.rc index b3363c18..a7eebbfb 100644 --- a/lang/en_US.rc +++ b/lang/en_US.rc @@ -562,7 +562,7 @@ FONT 9, "Tahoma" PUSHBUTTON "Cancel", IDCANCEL, 240, 135, 60, 14 } -IDD_CONFIG DIALOG 0, 0, 274, 211 +IDD_CONFIG DIALOG 0, 0, 274, 250 CAPTION "Configuration" STYLE DS_CENTER | DS_MODALFRAME | WS_VISIBLE | WS_CAPTION | WS_SYSMENU FONT 9, "Tahoma" @@ -600,11 +600,13 @@ FONT 9, "Tahoma" PUSHBUTTON "Reset", psh11, 209, 140, 35, 14 LTEXT "Block i&mage:", -1, 5, 166, 52, 11 COMBOBOX cmb1, 60, 165, 102, 300, CBS_HASSTRINGS | CBS_AUTOHSCROLL | CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - DEFPUSHBUTTON "OK", IDOK, 145, 192, 60, 14 - PUSHBUTTON "Cancel", IDCANCEL, 210, 192, 60, 14 LTEXT "Please drop your favorite square image into the BLOCK folder in BMP/EMF format.", -1, 5, 182, 138, 21 CONTROL "", ico1, "STATIC", SS_BITMAP, 165, 165, 20, 20 CONTROL "", ico2, "STATIC", SS_ENHMETAFILE, 165, 165, 20, 20 + RTEXT "&Double-frame letters:", -1, 5, 212, 80, 12 + COMBOBOX cmb2, 90, 210, 180, 300, CBS_HASSTRINGS | CBS_AUTOHSCROLL | CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 145, 230, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 210, 230, 60, 14 } IDD_SEQSOLVE DIALOG 0, 0, 310, 80 @@ -1468,6 +1470,12 @@ STRINGTABLE IDS_SHALLIMIRROR, "Shall I make the block pattern symmetrical according to the specified policy?" IDS_EVENROWLINESYMV, "Forcing symmetrical even rows and banning adjacent blocks is unreasonable. Please reconfirm the policies." IDS_EVENCOLLINESYMH, "Forcing symmetrical even columns and banning adjacent blocks is unreasonable. Please reconfirm the policies." + IDS_DBLFRAME_LETTERS_1, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" + IDS_DBLFRAME_LETTERS_2, "ホアホイホウホエホオホカホキホクホケホコホサホシホスホセホソマママρママママ委火対槻鳶釆偏茂緑佩厥墅嶄慚斟榻湮ホ。ホ」ホ、ホ・ホヲホァホィホゥ" + IDS_DBLFRAME_LETTERS_3, "縺ゅ>縺縺医♀縺九″縺上¢縺薙&縺励☆縺帙◎縺溘■縺、縺ヲ縺ィ縺ェ縺ォ縺ャ縺ュ縺ョ縺ッ縺イ縺オ縺ク縺サ縺セ縺ソ繧繧√b繧繧繧医i繧翫k繧後m繧上r繧" + IDS_DBLFRAME_LETTERS_4, "繧「繧、繧ヲ繧ィ繧ェ繧ォ繧ュ繧ッ繧ア繧ウ繧オ繧キ繧ケ繧サ繧ス繧ソ繝√ヤ繝繝医リ繝九レ繝阪ヮ繝上ヲ繝輔倥帙槭Α繝繝。繝「繝、繝ヲ繝ィ繝ゥ繝ェ繝ォ繝ャ繝ュ繝ッ繝イ繝ウ" + IDS_DBLFRAME_LETTERS_5, "縺繧阪ッ縺ォ縺サ縺ク縺ィ縺。繧翫〓繧九r繧上°繧医◆繧後◎縺、縺ュ縺ェ繧峨縺繧舌ョ縺翫¥繧縺セ縺代オ縺薙∴縺ヲ縺ゅ&縺阪f繧√∩縺励q縺イ繧ゅ○縺吶s" + IDS_DBLFRAME_LETTERS_6, "繧、繝ュ繝上ル繝帙倥ヨ繝√Μ繝後Ν繝イ繝ッ繧ォ繝ィ繧ソ繝ャ繧ス繝繝阪リ繝ゥ繝繧ヲ繝ー繝弱が繧ッ繝、繝槭こ繝輔さ繧ィ繝繧「繧オ繧ュ繝ヲ繝。繝溘す繝ア繝偵Δ繧サ繧ケ繝ウ" IDS_TT_NEW, "New crossword" IDS_TT_GENERATE, "Generate crossword" IDS_TT_OPEN, "Open crossword" diff --git a/lang/ja_JP.rc b/lang/ja_JP.rc index 47bfde7b..d62a4b71 100644 --- a/lang/ja_JP.rc +++ b/lang/ja_JP.rc @@ -565,7 +565,7 @@ FONT 9, "MS UI Gothic" PUSHBUTTON "繧ュ繝」繝ウ繧サ繝ォ", IDCANCEL, 240, 135, 60, 14 } -IDD_CONFIG DIALOG 0, 0, 274, 211 +IDD_CONFIG DIALOG 0, 0, 274, 250 CAPTION "繧ッ繝ュ繧ケ繝ッ繝シ繝 繧ョ繝舌シ縺ョ險ュ螳" STYLE DS_CENTER | DS_MODALFRAME | WS_VISIBLE | WS_CAPTION | WS_SYSMENU FONT 9, "MS UI Gothic" @@ -603,11 +603,13 @@ FONT 9, "MS UI Gothic" PUSHBUTTON "繝ェ繧サ繝繝", psh11, 209, 140, 35, 14 LTEXT "鮟偵槭せ逕サ蜒(&M):", -1, 5, 166, 52, 11 COMBOBOX cmb1, 60, 165, 102, 300, CBS_HASSTRINGS | CBS_AUTOHSCROLL | CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - DEFPUSHBUTTON "OK", IDOK, 145, 192, 60, 14 - PUSHBUTTON "繧ュ繝」繝ウ繧サ繝ォ", IDCANCEL, 210, 192, 60, 14 LTEXT "BLOCK繝輔か繝ォ繝縺ォ螂ス縺阪↑豁」譁ケ蠖「縺ョ逕サ蜒上rBMP/EMF蠖「蠑上〒謾セ繧願セシ繧薙〒荳九&縺縲", -1, 10, 182, 128, 21 CONTROL "", ico1, "STATIC", SS_BITMAP, 165, 165, 20, 20 CONTROL "", ico2, "STATIC", SS_ENHMETAFILE, 165, 165, 20, 20 + RTEXT "莠碁阪槭せ譁蟄(&D):", -1, 5, 212, 80, 12 + COMBOBOX cmb2, 90, 210, 180, 300, CBS_HASSTRINGS | CBS_AUTOHSCROLL | CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 145, 230, 60, 14 + PUSHBUTTON "繧ュ繝」繝ウ繧サ繝ォ", IDCANCEL, 210, 230, 60, 14 } IDD_SEQSOLVE DIALOG 0, 0, 310, 80 @@ -1471,6 +1473,12 @@ STRINGTABLE IDS_SHALLIMIRROR, "謖螳壹&繧後◆繝ォ繝シ繝ォ縺ォ蠕薙▲縺ヲ鮟偵槭せ繝代ち繝シ繝ウ繧貞ッセ遘ー縺ォ縺励∪縺吶°シ" IDS_EVENROWLINESYMV, "蛛カ謨ー陦梧焚縺ァ繧ソ繝邱壼ッセ遘ー縺ァ騾」鮟堤ヲ√ッ荳榊庄縺ァ縺吶ゅΝ繝シ繝ォ繧貞咲「コ隱阪@縺ヲ荳九&縺縲" IDS_EVENCOLLINESYMH, "蛛カ謨ー蛻玲焚縺ァ繝ィ繧ウ邱壼ッセ遘ー縺ァ騾」鮟堤ヲ√ッ荳榊庄縺ァ縺吶ゅΝ繝シ繝ォ繧貞咲「コ隱阪@縺ヲ荳九&縺縲" + IDS_DBLFRAME_LETTERS_1, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" + IDS_DBLFRAME_LETTERS_2, "ホアホイホウホエホオホカホキホクホケホコホサホシホスホセホソマママρママママ委火対槻鳶釆偏茂緑佩厥墅嶄慚斟榻湮ホ。ホ」ホ、ホ・ホヲホァホィホゥ" + IDS_DBLFRAME_LETTERS_3, "縺ゅ>縺縺医♀縺九″縺上¢縺薙&縺励☆縺帙◎縺溘■縺、縺ヲ縺ィ縺ェ縺ォ縺ャ縺ュ縺ョ縺ッ縺イ縺オ縺ク縺サ縺セ縺ソ繧繧√b繧繧繧医i繧翫k繧後m繧上r繧" + IDS_DBLFRAME_LETTERS_4, "繧「繧、繧ヲ繧ィ繧ェ繧ォ繧ュ繧ッ繧ア繧ウ繧オ繧キ繧ケ繧サ繧ス繧ソ繝√ヤ繝繝医リ繝九レ繝阪ヮ繝上ヲ繝輔倥帙槭Α繝繝。繝「繝、繝ヲ繝ィ繝ゥ繝ェ繝ォ繝ャ繝ュ繝ッ繝イ繝ウ" + IDS_DBLFRAME_LETTERS_5, "縺繧阪ッ縺ォ縺サ縺ク縺ィ縺。繧翫〓繧九r繧上°繧医◆繧後◎縺、縺ュ縺ェ繧峨縺繧舌ョ縺翫¥繧縺セ縺代オ縺薙∴縺ヲ縺ゅ&縺阪f繧√∩縺励q縺イ繧ゅ○縺吶s" + IDS_DBLFRAME_LETTERS_6, "繧、繝ュ繝上ル繝帙倥ヨ繝√Μ繝後Ν繝イ繝ッ繧ォ繝ィ繧ソ繝ャ繧ス繝繝阪リ繝ゥ繝繧ヲ繝ー繝弱が繧ッ繝、繝槭こ繝輔さ繧ィ繝繧「繧オ繧ュ繝ヲ繝。繝溘す繝ア繝偵Δ繧サ繧ケ繝ウ" IDS_TT_NEW, "譁ー隕丈ス懈" IDS_TT_GENERATE, "蝠城。後r閾ェ蜍慕函謌舌☆繧" IDS_TT_OPEN, "蝠城。後r髢九¥" diff --git a/resource.h b/resource.h index b928425f..e81424dd 100644 --- a/resource.h +++ b/resource.h @@ -168,6 +168,12 @@ #define IDS_SHALLIMIRROR 260 #define IDS_EVENROWLINESYMV 261 #define IDS_EVENCOLLINESYMH 262 +#define IDS_DBLFRAME_LETTERS_1 263 +#define IDS_DBLFRAME_LETTERS_2 264 +#define IDS_DBLFRAME_LETTERS_3 265 +#define IDS_DBLFRAME_LETTERS_4 266 +#define IDS_DBLFRAME_LETTERS_5 267 +#define IDS_DBLFRAME_LETTERS_6 268 #define IDS_TT_NEW 10100 #define IDS_TT_GENERATE 10101 #define IDS_TT_OPEN 10102 diff --git a/xword.cpp b/xword.cpp index a661459e..8049bc1b 100644 --- a/xword.cpp +++ b/xword.cpp @@ -3631,7 +3631,10 @@ void __fastcall XgDrawMarkWord(HDC hdc, LPSIZE psiz) } ::InflateRect(&rc, 4, 4); - StringCbPrintf(sz, sizeof(sz), L"%c", ZEN_LARGE_A + i); + if (i < (INT)xg_strDoubleFrameLetters.size()) + StringCbPrintf(sz, sizeof(sz), L"%c", xg_strDoubleFrameLetters[i]); + else + StringCbPrintf(sz, sizeof(sz), L"%c", ZEN_BLACK); ::GetTextExtentPoint32W(hdc, sz, int(wcslen(sz)), &siz); RECT rcText = rc; @@ -3892,7 +3895,10 @@ void __fastcall XgDrawXWord_NormalView(XG_Board& xw, HDC hdc, LPSIZE psiz, bool ::InflateRect(&rc, 4, 4); } - StringCbPrintf(sz, sizeof(sz), L"%c", L'A' + nMarked); + if (nMarked < (INT)xg_strDoubleFrameLetters.size()) + StringCbPrintf(sz, sizeof(sz), L"%c", xg_strDoubleFrameLetters[nMarked]); + else + StringCbPrintf(sz, sizeof(sz), L"%c", ZEN_BLACK); // 二重マスの右下端の文字の背景を塗りつぶす。 RECT rcText; diff --git a/xword.hpp b/xword.hpp index 181f51fb..a71f2cbf 100644 --- a/xword.hpp +++ b/xword.hpp @@ -795,6 +795,8 @@ inline BOOL XgIsUserJapanese(VOID) extern BOOL xg_bShowNumbering; // キャレットを表示するか? extern BOOL xg_bShowCaret; +// 二重マス文字。 +extern std::wstring xg_strDoubleFrameLetters; //////////////////////////////////////////////////////////////////////////////