From cfb09bbdf070276577eee92676ba592feb05ec7e Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Tue, 2 Apr 2024 18:22:38 +0900 Subject: [PATCH] synthesize the settings dialogs --- GUI.cpp | 147 +++++++++++++++++++--------- GUI.hpp | 2 + XG_SettingsDialog.cpp | 221 ++++++++++++++++++++++++++++-------------- XG_SettingsDialog.hpp | 24 ++--- XG_Window.hpp | 7 ++ XgFileSettings.cpp | 1 + XgViewSettings.cpp | 26 +++++ lang/en_US.rc | 7 +- lang/ja_JP.rc | 9 +- 9 files changed, 293 insertions(+), 151 deletions(-) diff --git a/GUI.cpp b/GUI.cpp index 154dcae..cba9452 100644 --- a/GUI.cpp +++ b/GUI.cpp @@ -30,7 +30,6 @@ #include "XG_PatternDialog.hpp" #include "XG_SeqPatGenDialog.hpp" #include "XG_SettingsDialog.hpp" -#include "XG_SettingsDialog.cpp" #include "XG_ThemeDialog.hpp" #include "XG_WordListDialog.hpp" #include "XG_RulePresetDialog.hpp" @@ -224,6 +223,50 @@ void XgUpdateRecentlyUsed(LPCWSTR pszFile) xg_recently_used_files.emplace(xg_recently_used_files.begin(), file.c_str()); } +// マスのフォント。 +WCHAR xg_szCellFont[LF_FACESIZE] = L""; +// 小さな文字のフォント。 +WCHAR xg_szSmallFont[LF_FACESIZE] = L""; +// UIフォント。 +WCHAR xg_szUIFont[LF_FACESIZE] = L""; + +// 文字の大きさ(%)。 +int xg_nCellCharPercents = XG_DEF_CELL_CHAR_SIZE; + +// 小さい文字の大きさ(%)。 +int xg_nSmallCharPercents = XG_DEF_SMALL_CHAR_SIZE; + +// 黒マス画像。 +HBITMAP xg_hbmBlackCell = nullptr; +HENHMETAFILE xg_hBlackCellEMF = nullptr; +XGStringW xg_strBlackCellImage; + +// ビューモード。 +XG_VIEW_MODE xg_nViewMode = XG_VIEW_NORMAL; + +// 線の太さ(pt)。 +float xg_nLineWidthInPt = XG_LINE_WIDTH_DEFAULT; + +// 外枠の幅(pt)。 +float xg_nOuterFrameInPt = XG_OUTERFRAME_DEFAULT; + +// ひらがな表示か? +BOOL xg_bHiragana = FALSE; + +// Lowercase表示か? +BOOL xg_bLowercase = FALSE; + +// ツールバーを表示するか? +bool xg_bShowToolBar = true; + +// 色。 +COLORREF xg_rgbWhiteCellColor = RGB(255, 255, 255); +COLORREF xg_rgbBlackCellColor = RGB(0x22, 0x22, 0x22); +COLORREF xg_rgbMarkedCellColor = RGB(255, 255, 255); + +// 二重マス文字。 +XGStringW xg_strDoubleFrameLetters; + ////////////////////////////////////////////////////////////////////////////// // static variables @@ -4478,14 +4521,64 @@ LOGFONTW *XgGetUIFont(void) return &s_lf; } -// 見た目の設定。 +HWND xg_ahSettingsWnds[3] = { 0 }; + +#include "XgFileSettings.cpp" +#include "XgViewSettings.cpp" +#include "XG_SettingsDialog.cpp" + +// 全般設定。 +void XgGeneralSettings(HWND hwnd, INT nStartPage = 0) +{ + PROPSHEETPAGEW psp = { sizeof(psp) }; + HPROPSHEETPAGE hpsp[3]; + INT iPage = 0; + + // 「ファイル」設定。 + psp.pszTemplate = MAKEINTRESOURCEW(IDD_FILESETTINGS); + psp.pfnDlgProc = XgFileSettingsDlgProc; + psp.dwFlags = PSP_DEFAULT; + psp.hInstance = xg_hInstance; + psp.lParam = 0; + hpsp[iPage++] = ::CreatePropertySheetPageW(&psp); + + // 「表示」設定。 + psp.pszTemplate = MAKEINTRESOURCEW(IDD_VIEWSETTINGS); + psp.pfnDlgProc = XgViewSettingsDlgProc; + psp.dwFlags = PSP_DEFAULT; + psp.hInstance = xg_hInstance; + psp.lParam = 0; + hpsp[iPage++] = ::CreatePropertySheetPageW(&psp); + + // 「表示」設定。 + XG_SettingsDialog dialog; + psp.pszTemplate = MAKEINTRESOURCEW(IDD_CONFIG); + psp.pfnDlgProc = XG_SettingsDialog::DialogProc; + psp.dwFlags = PSP_DEFAULT; + psp.hInstance = xg_hInstance; + psp.lParam = (LPARAM)&dialog; + hpsp[iPage++] = ::CreatePropertySheetPageW(&psp); + + assert(iPage <= _countof(hpsp)); + assert(nStartPage < _countof(hpsp)); + + PROPSHEETHEADERW psh = { sizeof(psh) }; + psh.dwFlags = PSH_USEICONID; + psh.hInstance = xg_hInstance; + psh.hwndParent = hwnd; + psh.pszIcon = MAKEINTRESOURCEW(1); + psh.nPages = iPage; + psh.phpage = hpsp; + psh.pszCaption = XgLoadStringDx1(IDS_GENERALSETTINGS); + psh.nStartPage = nStartPage; + + ::PropertySheetW(&psh); +} + void MainWnd_OnSettings(HWND hwnd) { XgDestroyCandsWnd(); - XG_SettingsDialog dialog; - if (dialog.DoModal(hwnd) == IDOK) { - XG_FILE_MODIFIED(TRUE); - } + XgGeneralSettings(hwnd, 2); } // テーマが変更された。 @@ -4995,7 +5088,7 @@ void __fastcall XgResetTheme(HWND hwnd, BOOL bQuery) } // ズーム倍率を設定する。 -static void XgSetZoomRate(HWND hwnd, int nZoomRate) +void XgSetZoomRate(HWND hwnd, INT nZoomRate) { if (nZoomRate < 9) nZoomRate = 9; @@ -5563,46 +5656,6 @@ void __fastcall XgJumpNumber(HWND hwnd, INT nNumber, BOOL bVert) SetFocus(hwnd); } -#include "XgFileSettings.cpp" -#include "XgViewSettings.cpp" - -// 全般設定。 -void XgGeneralSettings(HWND hwnd, INT nStartPage = 0) -{ - PROPSHEETPAGEW psp = { sizeof(psp) }; - HPROPSHEETPAGE hpsp[2]; - INT iPage = 0; - - // 「ファイル」設定。 - psp.pszTemplate = MAKEINTRESOURCEW(IDD_FILESETTINGS); - psp.pfnDlgProc = XgFileSettingsDlgProc; - psp.dwFlags = PSP_DEFAULT; - psp.hInstance = xg_hInstance; - hpsp[iPage++] = ::CreatePropertySheetPageW(&psp); - - // 「表示」設定。 - psp.pszTemplate = MAKEINTRESOURCEW(IDD_VIEWSETTINGS); - psp.pfnDlgProc = XgViewSettingsDlgProc; - psp.dwFlags = PSP_DEFAULT; - psp.hInstance = xg_hInstance; - hpsp[iPage++] = ::CreatePropertySheetPageW(&psp); - - assert(iPage == _countof(hpsp)); - assert(nStartPage < _countof(hpsp)); - - PROPSHEETHEADERW psh = { sizeof(psh) }; - psh.dwFlags = PSH_USEICONID; - psh.hInstance = xg_hInstance; - psh.hwndParent = hwnd; - psh.pszIcon = MAKEINTRESOURCEW(1); - psh.nPages = _countof(hpsp); - psh.phpage = hpsp; - psh.pszCaption = XgLoadStringDx1(IDS_GENERALSETTINGS); - psh.nStartPage = nStartPage; - - ::PropertySheetW(&psh); -} - // コマンドを実行する。 void __fastcall MainWnd_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT /*codeNotify*/) { diff --git a/GUI.hpp b/GUI.hpp index d494f9f..c85fc98 100644 --- a/GUI.hpp +++ b/GUI.hpp @@ -86,6 +86,8 @@ extern POINT xg_ptMButtonDragging; void __fastcall XgGetRealClientRect(HWND hwnd, LPRECT prcClient) noexcept; // ズームを実際のウィンドウに合わせる。 void __fastcall XgFitZoom(HWND hwnd); +// ズーム倍率を設定する。 +void XgSetZoomRate(HWND hwnd, INT nZoomRate); // テーマが変更された。 void XgUpdateTheme(HWND hwnd); // ルールが変更された。 diff --git a/XG_SettingsDialog.cpp b/XG_SettingsDialog.cpp index 0720cfd..88f2987 100644 --- a/XG_SettingsDialog.cpp +++ b/XG_SettingsDialog.cpp @@ -1,55 +1,18 @@ -#include "XWordGiver.hpp" -#include "XG_SettingsDialog.hpp" +static XG_ColorBox m_hwndWhite; +static XG_ColorBox m_hwndBlack; +static XG_ColorBox m_hwndMarked; -// マスのフォント。 -WCHAR xg_szCellFont[LF_FACESIZE] = L""; -// 小さな文字のフォント。 -WCHAR xg_szSmallFont[LF_FACESIZE] = L""; -// UIフォント。 -WCHAR xg_szUIFont[LF_FACESIZE] = L""; - -// 文字の大きさ(%)。 -int xg_nCellCharPercents = XG_DEF_CELL_CHAR_SIZE; - -// 小さい文字の大きさ(%)。 -int xg_nSmallCharPercents = XG_DEF_SMALL_CHAR_SIZE; - -// 黒マス画像。 -HBITMAP xg_hbmBlackCell = nullptr; -HENHMETAFILE xg_hBlackCellEMF = nullptr; -XGStringW xg_strBlackCellImage; - -// ビューモード。 -XG_VIEW_MODE xg_nViewMode = XG_VIEW_NORMAL; - -// 線の太さ(pt)。 -float xg_nLineWidthInPt = XG_LINE_WIDTH_DEFAULT; - -// 外枠の幅(pt)。 -float xg_nOuterFrameInPt = XG_OUTERFRAME_DEFAULT; - -// ひらがな表示か? -BOOL xg_bHiragana = FALSE; - -// Lowercase表示か? -BOOL xg_bLowercase = FALSE; - -// ツールバーを表示するか? -bool xg_bShowToolBar = true; - -// 色。 -COLORREF xg_rgbWhiteCellColor = RGB(255, 255, 255); -COLORREF xg_rgbBlackCellColor = RGB(0x22, 0x22, 0x22); -COLORREF xg_rgbMarkedCellColor = RGB(255, 255, 255); - -// 二重マス文字。 -XGStringW xg_strDoubleFrameLetters; +static XGStringW m_strAutoFile; +static BOOL m_bImport = FALSE; +static BOOL m_bUpdating = FALSE; ////////////////////////////////////////////////////////////////////////////// // [設定]ダイアログの初期化。 BOOL XG_SettingsDialog::OnInitDialog(HWND hwnd) { + xg_ahSettingsWnds[2] = hwnd; + // ドロップを受け付ける。 ::DragAcceptFiles(hwnd, TRUE); @@ -57,9 +20,14 @@ BOOL XG_SettingsDialog::OnInitDialog(HWND hwnd) XgCenterDialog(hwnd); // ハンドルをセットする。 - m_hwndWhite.m_hWnd = GetDlgItem(hwnd, psh7); - m_hwndBlack.m_hWnd = GetDlgItem(hwnd, psh8); - m_hwndMarked.m_hWnd = GetDlgItem(hwnd, psh9); + m_hwndWhite.SubclassDx(GetDlgItem(hwnd, psh7)); + m_hwndBlack.SubclassDx(GetDlgItem(hwnd, psh8)); + m_hwndMarked.SubclassDx(GetDlgItem(hwnd, psh9)); + + // 色をセットする。 + m_hwndWhite.SetColor(xg_rgbWhiteCellColor); + m_hwndBlack.SetColor(xg_rgbBlackCellColor); + m_hwndMarked.SetColor(xg_rgbMarkedCellColor); // フォント名を格納する。 ::SetDlgItemTextW(hwnd, edt1, xg_szCellFont); @@ -131,7 +99,6 @@ BOOL XG_SettingsDialog::OnInitDialog(HWND hwnd) } else { DoExportLooks(hwnd, m_strAutoFile.c_str()); } - SendMessageW(hwnd, WM_COMMAND, IDOK, 0); } WCHAR szText[MAX_PATH]; @@ -148,7 +115,7 @@ BOOL XG_SettingsDialog::OnInitDialog(HWND hwnd) } // [設定]ダイアログで[OK]ボタンを押された。 -void XG_SettingsDialog::OnOK(HWND hwnd) +BOOL XG_SettingsDialog::OnOK(HWND hwnd) { // セルの文字の大きさ。 BOOL bTranslated = FALSE; @@ -164,7 +131,7 @@ void XG_SettingsDialog::OnOK(HWND hwnd) Edit_SetSel(hEdt4, 0, -1); SetFocus(hEdt4); XgCenterMessageBoxW(hwnd, XgLoadStringDx1(IDS_INVALIDVALUE), nullptr, MB_ICONERROR); - return; + return FALSE; } // 小さい文字の大きさ。 @@ -181,7 +148,7 @@ void XG_SettingsDialog::OnOK(HWND hwnd) Edit_SetSel(hEdt5, 0, -1); SetFocus(hEdt5); XgCenterMessageBoxW(hwnd, XgLoadStringDx1(IDS_INVALIDVALUE), nullptr, MB_ICONERROR); - return; + return FALSE; } // 文字の大きさの設定。 @@ -277,6 +244,7 @@ void XG_SettingsDialog::OnOK(HWND hwnd) XgUpdateImage(xg_hMainWnd); XG_FILE_MODIFIED(TRUE); + return TRUE; } // LOOKSファイルのインポート。 @@ -752,10 +720,17 @@ XG_SettingsDialog::DialogProcDx(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPar case WM_NOTIFY: { - auto pUpDown = reinterpret_cast(lParam); WCHAR szText[MAX_PATH]; - if (pUpDown->hdr.code == UDN_DELTAPOS) - { + auto pnmhdr = (NMHDR *)lParam; + auto pUpDown = reinterpret_cast(lParam); + switch (pnmhdr->code) { + case PSN_APPLY: // 適用。 + if (!OnOK(hwnd)) + { + return SetDlgMsgResult(hwnd, WM_NOTIFY, PSNRET_INVALID_NOCHANGEPAGE); + } + break; + case UDN_DELTAPOS: if (pUpDown->hdr.idFrom == scr3) { GetDlgItemTextW(hwnd, edt6, szText, _countof(szText)); @@ -792,21 +767,62 @@ XG_SettingsDialog::DialogProcDx(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPar SetDlgItemTextW(hwnd, edt7, szText); return TRUE; } + break; } } break; case WM_COMMAND: + // 必要ならば「更新」ボタンを有効にする。 switch (LOWORD(wParam)) { - case IDOK: - OnOK(hwnd); - ::EndDialog(hwnd, IDOK); + case edt1: + case edt2: + case edt3: + case edt4: + case edt5: + case edt6: + case edt7: + if (HIWORD(wParam) == EN_CHANGE) { + PropSheet_Changed(GetParent(hwnd), hwnd); + } break; - - case IDCANCEL: - ::EndDialog(hwnd, IDCANCEL); + case psh1: + case psh2: + case psh3: + case psh4: + case psh5: + case psh6: + case psh7: + case psh8: + case psh9: + case psh10: + case psh11: + case psh12: + case psh13: + case psh14: + case psh15: + case chx1: + case chx2: + case chx3: + case chx4: + case chx5: + if (HIWORD(wParam) == BN_CLICKED) { + PropSheet_Changed(GetParent(hwnd), hwnd); + } break; + case cmb1: + case cmb2: + if (HIWORD(wParam) == CBN_EDITCHANGE || + HIWORD(wParam) == CBN_SELCHANGE || + HIWORD(wParam) == CBN_SELENDOK) + { + PropSheet_Changed(GetParent(hwnd), hwnd); + } + break; + } + // 実際に処理をする。 + switch (LOWORD(wParam)) { case psh1: OnChange(hwnd, 0); break; @@ -891,26 +907,55 @@ XG_SettingsDialog::DialogProcDx(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPar } break; - case chx1: - if (IsDlgButtonChecked(hwnd, chx1) == BST_CHECKED) { - if (!m_bUpdating) { - m_bUpdating = TRUE; - { - // 黒マス画像なし。 - HWND hCmb1 = GetDlgItem(hwnd, cmb1); - ComboBox_RealSetText(hCmb1, XgLoadStringDx1(IDS_NONE)); - UpdateBlockPreview(hwnd); + case chx1: // スケルトンビュー。 + if (HIWORD(wParam) == BN_CLICKED) + { + // 他のダイアログと同期する。 + BOOL bChecked = IsDlgButtonChecked(hwnd, chx1) == BST_CHECKED; + ::CheckDlgButton(xg_ahSettingsWnds[1], chx10, bChecked ? BST_CHECKED : BST_UNCHECKED); + + if (bChecked) { + if (!m_bUpdating) { + m_bUpdating = TRUE; + { + // 黒マス画像なし。 + HWND hCmb1 = GetDlgItem(hwnd, cmb1); + ComboBox_RealSetText(hCmb1, XgLoadStringDx1(IDS_NONE)); + UpdateBlockPreview(hwnd); + } + m_bUpdating = FALSE; } - m_bUpdating = FALSE; } } break; case chx2: - if (IsDlgButtonChecked(hwnd, chx2) == BST_CHECKED) { - ::EnableWindow(::GetDlgItem(hwnd, edt7), TRUE); - } else { - ::EnableWindow(::GetDlgItem(hwnd, edt7), FALSE); + if (HIWORD(wParam) == BN_CLICKED) + { + BOOL bChecked = IsDlgButtonChecked(hwnd, chx2) == BST_CHECKED; + if (bChecked) { + ::EnableWindow(::GetDlgItem(hwnd, edt7), TRUE); + } else { + ::EnableWindow(::GetDlgItem(hwnd, edt7), FALSE); + } + } + break; + + case chx4: // 英小文字。 + if (HIWORD(wParam) == BN_CLICKED) + { + // 他のダイアログと同期する。 + BOOL bChecked = IsDlgButtonChecked(hwnd, chx4) == BST_CHECKED; + ::CheckDlgButton(xg_ahSettingsWnds[1], chx12, bChecked ? BST_CHECKED : BST_UNCHECKED); + } + break; + + case chx5: // ひらがな。 + if (HIWORD(wParam) == BN_CLICKED) + { + // 他のダイアログと同期する。 + BOOL bChecked = IsDlgButtonChecked(hwnd, chx5) == BST_CHECKED; + ::CheckDlgButton(xg_ahSettingsWnds[1], chx13, bChecked ? BST_CHECKED : BST_UNCHECKED); } break; @@ -979,3 +1024,29 @@ void XG_SettingsDialog::UpdateBlockPreview(HWND hwnd) DeleteObject(hbmOld); ::DeleteEnhMetaFile(hOldEMF); } + +INT_PTR CALLBACK +XG_SettingsDialog::DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + static XG_SettingsDialog* s_pThis = NULL; + if (uMsg == WM_INITDIALOG) + { + s_pThis = (XG_SettingsDialog*)lParam; + SetWindowLongPtrW(hwnd, DWLP_USER, (LONG_PTR)lParam); + } + else + { + s_pThis = (XG_SettingsDialog*)GetWindowLongPtrW(hwnd, DWLP_USER); + } + + if (!s_pThis) + return 0; + + return s_pThis->DialogProcDx(hwnd, uMsg, wParam, lParam); +} + +INT_PTR XG_SettingsDialog::DoModal(HWND hwnd) +{ + m_hwndWhite.RegisterClassDx(xg_hInstance); + return DialogBoxParamW(xg_hInstance, MAKEINTRESOURCEW(IDD_CONFIG), hwnd, DialogProc, (LPARAM)this); +} diff --git a/XG_SettingsDialog.hpp b/XG_SettingsDialog.hpp index bf0a81d..d59449d 100644 --- a/XG_SettingsDialog.hpp +++ b/XG_SettingsDialog.hpp @@ -5,29 +5,18 @@ #include "XG_Settings.hpp" // 「見た目の設定」ダイアログ。 -class XG_SettingsDialog : public XG_Dialog +class XG_SettingsDialog { public: - XG_ColorBox m_hwndWhite; - XG_ColorBox m_hwndBlack; - XG_ColorBox m_hwndMarked; - - XGStringW m_strAutoFile; - BOOL m_bImport = FALSE; - BOOL m_bUpdating = FALSE; - XG_SettingsDialog() noexcept { - m_hwndWhite.SetColor(xg_rgbWhiteCellColor); - m_hwndBlack.SetColor(xg_rgbBlackCellColor); - m_hwndMarked.SetColor(xg_rgbMarkedCellColor); } // [設定]ダイアログの初期化。 BOOL OnInitDialog(HWND hwnd); // [設定]ダイアログで[OK]ボタンを押された。 - void OnOK(HWND hwnd); + BOOL OnOK(HWND hwnd); // LOOKSファイルのインポート。 BOOL DoImportLooks(HWND hwnd, LPCWSTR pszFileName); @@ -58,13 +47,12 @@ class XG_SettingsDialog : public XG_Dialog // [設定]ダイアログのダイアログ プロシージャー。 INT_PTR CALLBACK - DialogProcDx(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) override; + DialogProcDx(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); // BLOCKのプレビュー。 void UpdateBlockPreview(HWND hwnd); - INT_PTR DoModal(HWND hwnd) - { - return DialogBoxDx(hwnd, IDD_CONFIG); - } + static INT_PTR CALLBACK DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); + + INT_PTR DoModal(HWND hwnd); }; diff --git a/XG_Window.hpp b/XG_Window.hpp index de44a40..2a1cfea 100644 --- a/XG_Window.hpp +++ b/XG_Window.hpp @@ -33,6 +33,12 @@ class XG_Window BOOL SubclassDx(HWND hwnd) noexcept { + m_hWnd = hwnd; + + BOOL bNoUserData = !::GetWindowLongPtrW(hwnd, GWLP_USERDATA); + if (bNoUserData) + ::SetWindowLongPtrW(hwnd, GWLP_USERDATA, (LONG_PTR)this); + m_fnOldWndProc = reinterpret_cast(SetWindowLongPtrW(hwnd, GWLP_WNDPROC, reinterpret_cast(WindowProc))); @@ -46,6 +52,7 @@ class XG_Window ::SetWindowLongPtrW(hwnd, GWLP_WNDPROC, reinterpret_cast(m_fnOldWndProc)); m_fnOldWndProc = nullptr; } + m_hWnd = NULL; } virtual LRESULT CALLBACK diff --git a/XgFileSettings.cpp b/XgFileSettings.cpp index dd2ff74..8ae3706 100644 --- a/XgFileSettings.cpp +++ b/XgFileSettings.cpp @@ -5,6 +5,7 @@ XgFileSettingsDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) switch (uMsg) { case WM_INITDIALOG: + xg_ahSettingsWnds[0] = hwnd; // チェックボックスを初期化。 if (xg_bShowAnswerOnOpen) CheckDlgButton(hwnd, chx1, BST_CHECKED); diff --git a/XgViewSettings.cpp b/XgViewSettings.cpp index 99455ac..5692d48 100644 --- a/XgViewSettings.cpp +++ b/XgViewSettings.cpp @@ -7,6 +7,7 @@ XgViewSettingsDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) switch (uMsg) { case WM_INITDIALOG: + xg_ahSettingsWnds[1] = hwnd; // チェックボックスを初期化。 if (xg_bShowToolBar) ::CheckDlgButton(hwnd, chx1, BST_CHECKED); @@ -84,6 +85,31 @@ XgViewSettingsDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) PropSheet_Changed(GetParent(hwnd), hwnd); } } + // 他のダイアログと同期する。 + switch (LOWORD(wParam)) + { + case chx10: // スケルトンビュー。 + if (HIWORD(wParam) == BN_CLICKED) + { + BOOL bChecked = IsDlgButtonChecked(hwnd, chx10) == BST_CHECKED; + ::CheckDlgButton(xg_ahSettingsWnds[2], chx1, bChecked ? BST_CHECKED : BST_UNCHECKED); + } + break; + case chx12: // 英小文字。 + if (HIWORD(wParam) == BN_CLICKED) + { + BOOL bChecked = IsDlgButtonChecked(hwnd, chx12) == BST_CHECKED; + ::CheckDlgButton(xg_ahSettingsWnds[2], chx4, bChecked ? BST_CHECKED : BST_UNCHECKED); + } + break; + case chx13: // ひらがな。 + if (HIWORD(wParam) == BN_CLICKED) + { + BOOL bChecked = IsDlgButtonChecked(hwnd, chx13) == BST_CHECKED; + ::CheckDlgButton(xg_ahSettingsWnds[2], chx5, bChecked ? BST_CHECKED : BST_UNCHECKED); + } + break; + } break; case WM_NOTIFY: diff --git a/lang/en_US.rc b/lang/en_US.rc index 42e0551..f647883 100644 --- a/lang/en_US.rc +++ b/lang/en_US.rc @@ -42,7 +42,7 @@ IDB_DELETEPAT BITMAP "res/1033_Bitmap_102.bmp" } MENUITEM SEPARATOR MENUITEM "&Header and remarks...\tCtrl+Enter", ID_HEADERANDNOTES - MENUITEM "Appearan&ce...\tAlt+Enter", ID_SETTINGS + MENUITEM "S&ettings...\tAlt+Enter", ID_SETTINGS MENUITEM SEPARATOR MENUITEM "Initialize application", ID_ERASESETTINGS MENUITEM "E&xit\tAlt+F4", ID_EXIT @@ -81,7 +81,6 @@ IDB_DELETEPAT BITMAP "res/1033_Bitmap_102.bmp" MENUITEM "Search ACROSS word on Web\tAlt+Right", ID_ONLINEDICTH MENUITEM SEPARATOR MENUITEM "UI Language Select...", ID_UILANGID - MENUITEM "Settin&gs...", ID_GENERALSETTINGS } POPUP "&Input" { @@ -641,7 +640,7 @@ FONT 9, "Tahoma" } IDD_CONFIG DIALOG 0, 0, 274, 250 -CAPTION "Appearance (Alt+Enter)" +CAPTION "Appearance" STYLE DS_CENTER | DS_MODALFRAME | WS_VISIBLE | WS_CAPTION | WS_SYSMENU FONT 9, "Tahoma" { @@ -692,8 +691,6 @@ FONT 9, "Tahoma" AUTOCHECKBOX "Hiraga&na", chx5, 200, 185, 55, 15 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 PUSHBUTTON "Import/E&xport...", psh12, 5, 230, 100, 15 } diff --git a/lang/ja_JP.rc b/lang/ja_JP.rc index 71f9fa4..ef280f6 100644 --- a/lang/ja_JP.rc +++ b/lang/ja_JP.rc @@ -42,7 +42,7 @@ IDB_DELETEPAT BITMAP "res/1041_Bitmap_102.bmp" } MENUITEM SEPARATOR MENUITEM "ヘッダーと備考欄(&H)...\tCtrl+Enter", ID_HEADERANDNOTES - MENUITEM "見た目の設定(&C)...\tAlt+Enter", ID_SETTINGS + MENUITEM "設定(&E)...\tAlt+Enter", ID_SETTINGS MENUITEM SEPARATOR MENUITEM "アプリの初期化", ID_ERASESETTINGS MENUITEM "終了(&X)\tAlt+F4", ID_EXIT @@ -81,7 +81,6 @@ IDB_DELETEPAT BITMAP "res/1041_Bitmap_102.bmp" MENUITEM "単語をウェブ検索(&H) (ヨコ)\tAlt+→", ID_ONLINEDICTH MENUITEM SEPARATOR MENUITEM "UI Language Select...", ID_UILANGID - MENUITEM "設定(&G)...", ID_GENERALSETTINGS } POPUP "入力(&I)" { @@ -525,7 +524,7 @@ IDB_DELETEPAT BITMAP "res/1041_Bitmap_102.bmp" MENUITEM SEPARATOR MENUITEM "二重マス切り替え(&T)\tCtrl+.", ID_TOGGLEMARK MENUITEM SEPARATOR - MENUITEM "見た目の設定(&C)...\tAlt+Enter", ID_SETTINGS + MENUITEM "設定(&C)...\tAlt+Enter", ID_SETTINGS MENUITEM SEPARATOR MENUITEM "ヒントを削除して盤面のロックを解除(&U)", ID_ERASESOLUTIONANDUNLOCKEDIT MENUITEM "文字をすべてクリア(&C)", ID_CLEARNONBLOCKS @@ -644,7 +643,7 @@ FONT 9, "MS UI Gothic" } IDD_CONFIG DIALOG 0, 0, 274, 250 -CAPTION "見た目の設定 (Alt+Enter)" +CAPTION "見た目" STYLE DS_CENTER | DS_MODALFRAME | WS_VISIBLE | WS_CAPTION | WS_SYSMENU FONT 9, "MS UI Gothic" { @@ -695,8 +694,6 @@ FONT 9, "MS UI Gothic" AUTOCHECKBOX "ひらがな(&N)", chx5, 200, 185, 55, 15 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 PUSHBUTTON "インポート/エクスポート(&X)...", psh12, 5, 230, 100, 15 }