Skip to content

Commit

Permalink
fixing
Browse files Browse the repository at this point in the history
  • Loading branch information
katahiromz committed Apr 1, 2024
1 parent 10d2818 commit 5741f4d
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 95 deletions.
6 changes: 3 additions & 3 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ endif()

if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
# using Clang
if (NOT CMAKE_BUILD_TYPE MATCHES "^Debug$")
if (CMAKE_BUILD_TYPE MATCHES "^Release$")
set(CMAKE_C_FLAGS "-static -O3 -Wall -pedantic")
set(CMAKE_CXX_FLAGS "-static -O3 -Wall -pedantic")
else()
Expand All @@ -50,14 +50,14 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
endif()
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
# using GCC
if (NOT CMAKE_BUILD_TYPE MATCHES "^Debug$")
if (CMAKE_BUILD_TYPE MATCHES "^Release$")
set(CMAKE_C_FLAGS "-s -static -O3 -Wall -pedantic")
set(CMAKE_CXX_FLAGS "-s -static -O3 -Wall -pedantic")
else()
set(CMAKE_C_FLAGS "-static -g -Wall -pedantic")
set(CMAKE_CXX_FLAGS "-static -g -Wall -pedantic")
endif()
elseif (MSVC AND NOT CMAKE_BUILD_TYPE MATCHES "^Debug$")
elseif (MSVC AND (CMAKE_BUILD_TYPE MATCHES "^Release$"))
# replace "/MD" with "/MT" (building without runtime DLLs)
set(CompilerFlags
CMAKE_C_FLAGS
Expand Down
160 changes: 69 additions & 91 deletions GUI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2841,7 +2841,8 @@ TRIVALUE XgGenerateFromPat(HWND hwnd)
xg_bShowAnswer = xg_bShowAnswerOnGenerate;
XgUpdateImage(hwnd);

return TV_POSITIVE; // 成功。
// 成功か失敗。
return xg_bSolved ? TV_POSITIVE : TV_NEGATIVE;
}

// 問題の作成。
Expand Down Expand Up @@ -3087,6 +3088,40 @@ bool __fastcall XgOnGenerateBlacks(HWND hwnd, bool sym)
return true;
}

// 結果を表示する。
void __fastcall XgShowResults(HWND hwnd)
{
WCHAR sz[MAX_PATH];
if (xg_bSolved) {
// 成功メッセージを表示する。
if (xg_bAutoSave && PathFileExistsW(xg_strFileName.c_str())) {
StringCchPrintf(sz, _countof(sz), XgLoadStringDx1(IDS_MADEPROBLEM2),
PathFindFileNameW(xg_strFileName.c_str()),
DWORD(xg_dwlTick2 - xg_dwlTick0) / 1000,
DWORD(xg_dwlTick2 - xg_dwlTick0) / 100 % 10);
} else {
StringCchPrintf(sz, _countof(sz), XgLoadStringDx1(IDS_MADEPROBLEM),
DWORD(xg_dwlTick2 - xg_dwlTick0) / 1000,
DWORD(xg_dwlTick2 - xg_dwlTick0) / 100 % 10);
}
XgCenterMessageBoxW(hwnd, sz, XgLoadStringDx2(IDS_RESULTS), MB_ICONINFORMATION);
// ヒントを表示する。
XgShowHints(hwnd);
} else if (xg_bCancelled) {
// キャンセルされた。
StringCchPrintf(sz, _countof(sz), XgLoadStringDx1(IDS_CANCELLED),
DWORD(xg_dwlTick2 - xg_dwlTick0) / 1000,
DWORD(xg_dwlTick2 - xg_dwlTick0) / 100 % 10);
XgCenterMessageBoxW(hwnd, sz, XgLoadStringDx2(IDS_RESULTS), MB_ICONINFORMATION);
} else {
// 失敗メッセージを表示する。
StringCchPrintf(sz, _countof(sz), XgLoadStringDx1(IDS_CANTMAKEPROBLEM),
DWORD(xg_dwlTick2 - xg_dwlTick0) / 1000,
DWORD(xg_dwlTick2 - xg_dwlTick0) / 100 % 10);
XgCenterMessageBoxW(hwnd, sz, XgLoadStringDx2(IDS_RESULTS), MB_ICONERROR);
}
}

// 連番保存。
BOOL __fastcall XgNumberingSave(HWND hwnd)
{
Expand Down Expand Up @@ -3186,33 +3221,19 @@ bool __fastcall XgOnSolve_AddBlack(HWND hwnd)
}
}

// 自動保存なら保存する。
if (xg_bAutoSave) {
XgNumberingSave(hwnd);
}

// 解あり。表示を更新する。
xg_bShowAnswer = true;
XgSetCaretPos();
XgMarkUpdate();
XgUpdateImage(hwnd, 0, 0);

// 成功メッセージを表示する。
if (xg_bAutoSave && PathFileExistsW(xg_strFileName.c_str())) {
StringCchPrintf(sz, _countof(sz), XgLoadStringDx1(IDS_MADEPROBLEM2),
PathFindFileNameW(xg_strFileName.c_str()),
DWORD(xg_dwlTick2 - xg_dwlTick0) / 1000,
DWORD(xg_dwlTick2 - xg_dwlTick0) / 100 % 10);
} else {
StringCchPrintf(sz, _countof(sz), XgLoadStringDx1(IDS_MADEPROBLEM),
DWORD(xg_dwlTick2 - xg_dwlTick0) / 1000,
DWORD(xg_dwlTick2 - xg_dwlTick0) / 100 % 10);
// 自動保存なら保存する。
if (xg_bAutoSave) {
XgNumberingSave(hwnd);
}
XgCenterMessageBoxW(hwnd, sz, XgLoadStringDx2(IDS_RESULTS), MB_ICONINFORMATION);

// ヒントを更新して開く。
XgUpdateHints();
XgShowHints(hwnd);
// 結果を表示する。
XgShowResults(hwnd);
} else {
// 解なし。表示を更新する。
xg_bShowAnswer = false;
Expand Down Expand Up @@ -3305,33 +3326,23 @@ bool __fastcall XgOnSolve_NoAddBlack(HWND hwnd)
}
}

// 自動保存なら保存する。
if (xg_bAutoSave) {
XgNumberingSave(hwnd);
}

// 解あり。表示を更新する。
xg_bShowAnswer = xg_bShowAnswerOnGenerate;
XgSetCaretPos();
XgMarkUpdate();
XgUpdateImage(hwnd, 0, 0);

// 成功メッセージを表示する。
if (xg_bAutoSave && PathFileExistsW(xg_strFileName.c_str())) {
StringCchPrintf(sz, _countof(sz), XgLoadStringDx1(IDS_MADEPROBLEM2),
PathFindFileNameW(xg_strFileName.c_str()),
DWORD(xg_dwlTick2 - xg_dwlTick0) / 1000,
DWORD(xg_dwlTick2 - xg_dwlTick0) / 100 % 10);
} else {
StringCchPrintf(sz, _countof(sz), XgLoadStringDx1(IDS_MADEPROBLEM),
DWORD(xg_dwlTick2 - xg_dwlTick0) / 1000,
DWORD(xg_dwlTick2 - xg_dwlTick0) / 100 % 10);
// 番号とヒントを付ける。
xg_solution.DoNumberingNoCheck();
XgUpdateHints();

// 自動保存なら保存する。
if (xg_bAutoSave) {
XgNumberingSave(hwnd);
}
XgCenterMessageBoxW(hwnd, sz, XgLoadStringDx2(IDS_RESULTS), MB_ICONINFORMATION);

// ヒントを更新して開く。
XgUpdateHints();
XgShowHints(hwnd);
// メッセージを表示する。
XgShowResults(hwnd);
} else {
// 解なし。表示を更新する。
xg_bShowAnswer = false;
Expand Down Expand Up @@ -5095,41 +5106,6 @@ void __fastcall XgResetTheme(HWND hwnd, BOOL bQuery)
XgUpdateTheme(hwnd);
}

void __fastcall XgShowResults(HWND hwnd)
{
WCHAR sz[MAX_PATH];
if (xg_bSolved) {
// 成功メッセージを表示する。
if (xg_bAutoSave && PathFileExistsW(xg_strFileName.c_str())) {
StringCchPrintf(sz, _countof(sz), XgLoadStringDx1(IDS_MADEPROBLEM2),
PathFindFileNameW(xg_strFileName.c_str()),
DWORD(xg_dwlTick2 - xg_dwlTick0) / 1000,
DWORD(xg_dwlTick2 - xg_dwlTick0) / 100 % 10);
} else {
StringCchPrintf(sz, _countof(sz), XgLoadStringDx1(IDS_MADEPROBLEM),
DWORD(xg_dwlTick2 - xg_dwlTick0) / 1000,
DWORD(xg_dwlTick2 - xg_dwlTick0) / 100 % 10);
}
XgCenterMessageBoxW(hwnd, sz, XgLoadStringDx2(IDS_RESULTS), MB_ICONINFORMATION);

// ヒントを更新して開く。
XgUpdateHints();
XgShowHints(hwnd);
} else if (xg_bCancelled) {
// キャンセルされた。
StringCchPrintf(sz, _countof(sz), XgLoadStringDx1(IDS_CANCELLED),
DWORD(xg_dwlTick2 - xg_dwlTick0) / 1000,
DWORD(xg_dwlTick2 - xg_dwlTick0) / 100 % 10);
XgCenterMessageBoxW(hwnd, sz, XgLoadStringDx2(IDS_RESULTS), MB_ICONINFORMATION);
} else {
// 失敗メッセージを表示する。
StringCchPrintf(sz, _countof(sz), XgLoadStringDx1(IDS_CANTMAKEPROBLEM),
DWORD(xg_dwlTick2 - xg_dwlTick0) / 1000,
DWORD(xg_dwlTick2 - xg_dwlTick0) / 100 % 10);
XgCenterMessageBoxW(hwnd, sz, XgLoadStringDx2(IDS_RESULTS), MB_ICONERROR);
}
}

// ズーム倍率を設定する。
static void XgSetZoomRate(HWND hwnd, int nZoomRate)
{
Expand Down Expand Up @@ -5282,6 +5258,10 @@ void XgGenerateFromWordList(HWND hwnd)
// ズームを実際のウィンドウに合わせる。
XgFitZoom(hwnd);

// 番号とヒントを付ける。
xg_solution.DoNumberingNoCheck();
XgUpdateHints();

// 自動保存なら保存する。
if (xg_bAutoSave) {
XgNumberingSave(hwnd);
Expand All @@ -5290,9 +5270,6 @@ void XgGenerateFromWordList(HWND hwnd)
// 成功メッセージ。
XgShowResults(hwnd);

// ヒントを表示する。
XgShowHints(hwnd);

// クリア。
XG_WordListDialog::s_words.clear();
XG_WordListDialog::s_wordset.clear();
Expand Down Expand Up @@ -5506,11 +5483,11 @@ void __fastcall XgDrawCaret(HDC hdc)
}

// 問題を生成する。
void __fastcall XgGenerate(HWND hwnd, bool show_answer)
void __fastcall XgGenerate(HWND hwnd)
{
bool flag = false;
// 元に戻す情報を取得する。
auto sa1 = std::make_shared<XG_UndoData_SetAll>();
auto sa2 = std::make_shared<XG_UndoData_SetAll>();
sa1->Get();
// 候補ウィンドウを破棄する。
XgDestroyCandsWnd();
Expand All @@ -5521,25 +5498,30 @@ void __fastcall XgGenerate(HWND hwnd, bool show_answer)
// 問題の作成。
if (XgOnGenerate(hwnd)) {
flag = true;
// イメージを更新する。
XgSetCaretPos();
XgMarkUpdate();
XgUpdateImage(hwnd);
// 番号とヒントを付ける。
xg_solution.DoNumberingNoCheck();
XgUpdateHints();
// 元に戻す情報を確定。
auto sa2 = std::make_shared<XG_UndoData_SetAll>();
sa2->Get();
xg_ubUndoBuffer.Commit(UC_SETALL, sa1, sa2);
// 自動で保存なら保存する。
if (xg_bAutoSave) {
XgNumberingSave(hwnd);
}
// イメージを更新する。
XgSetCaretPos();
XgMarkUpdate();
XgUpdateImage(hwnd);
// メッセージボックスを表示する。
XgShowResults(hwnd);
}
if (!flag) {
sa1->Apply();
}
// イメージを更新する。
XgSetCaretPos();
XgMarkUpdate();
// 結果を表示する。
XgShowResults(hwnd);
}

// 次のペインまたは前のペインに移動する。
Expand Down Expand Up @@ -5921,7 +5903,7 @@ void __fastcall MainWnd_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT /*codeNo
bUpdateImage = TRUE;
break;
case ID_GENERATE: // 問題を自動生成する。
XgGenerate(hwnd, xg_bShowAnswerOnGenerate);
XgGenerate(hwnd);
bUpdateImage = TRUE;
break;
case ID_OPEN: // ファイルを開く。
Expand Down Expand Up @@ -7620,11 +7602,7 @@ bool XgOpenHintsByWindow(HWND hwnd)
// ヒントを表示する。
void XgShowHints(HWND hwnd)
{
#if 1
XgOpenHintsByWindow(hwnd);
#else
XgOpenHintsByNotepad(hwnd, xg_bShowAnswer);
#endif
XgOpenHintsByWindow(hwnd);
}

//////////////////////////////////////////////////////////////////////////////
Expand Down
10 changes: 9 additions & 1 deletion WonSetThreadUILanguage/WonSetThreadUILanguage.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,19 @@
#ifndef _INC_WINDOWS
#include <windows.h>
#endif
#include <versionhelpers.h>

typedef LANGID (WINAPI *FN_GetThreadUILanguage)(VOID);
typedef LANGID (WINAPI *FN_SetThreadUILanguage)(LANGID);

//#include <versionhelpers.h>
static inline BOOL IsWindowsVistaOrGreater(void)
{
OSVERSIONINFOW info = { sizeof(info) };
if (!GetVersionExW(&info))
return FALSE;
return info.dwMajorVersion >= 6;
}

static inline LANGID WonGetThreadUILanguage()
{
static FN_GetThreadUILanguage s_fn = NULL;
Expand Down

0 comments on commit 5741f4d

Please sign in to comment.