▼ 2014/5/13 (火) 18:26:18 LR4 | |
Mozilla/5.0 (Windows NT 6.1; rv:29.0) Gecko/20100101 Firefox/29.0 |
【代替案パッチ】
Index: sakura_core/util/MessageBoxF.cpp
===================================================================
--- sakura_core/util/MessageBoxF.cpp (リビジョン 3706)
+++ sakura_core/util/MessageBoxF.cpp (作業コピー)
@@ -40,6 +40,25 @@
// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- //
// メッセージボックス:実装 //
// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- //
+int Wrap_MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType)
+{
+ static int (WINAPI *RealMessageBox)(HWND, LPCTSTR, LPCTSTR, UINT);
+ static HMODULE hMod = NULL;
+ if( hMod == NULL ){ // 初期化されていない場合は初期化する
+ hMod = GetModuleHandle(_T("USER32"));
+#ifdef _UNICODE
+ *(FARPROC *)&RealMessageBox = GetProcAddress(hMod, "MessageBoxW");
+#else
+ *(FARPROC *)&RealMessageBox = GetProcAddress(hMod, "MessageBoxA");
+#endif
+ }
+
+ // lpText, lpCaption をローカルバッファにコピーして MessageBox API を呼び出す
+ // ※ 使い回しのバッファが使用されていてそれが裏で書き換えられた場合でも
+ // メッセージボックス上の Ctrl+C が文字化けしないように
+ return RealMessageBox(hWnd, std::tstring(lpText).c_str(), std::tstring(lpCaption).c_str(), uType);
+}
+
HWND GetMessageBoxOwner(HWND hwndOwner)
{
if(hwndOwner==NULL && g_pcEditWnd){
Index: sakura_core/util/MessageBoxF.h
===================================================================
--- sakura_core/util/MessageBoxF.h (リビジョン 3706)
+++ sakura_core/util/MessageBoxF.h (作業コピー)
@@ -37,6 +37,9 @@
// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- //
//2007.10.02 kobake メッセージボックスの使用はデバッグ時に限らないので、「Debug〜」という名前を廃止
+#undef MessageBox
+#define MessageBox Wrap_MessageBox
+int Wrap_MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType);
//テキスト整形機能付きMessageBox
int VMessageBoxF( HWND hwndOwner, UINT uType, LPCTSTR lpCaption, LPCTSTR lpText, va_list& v );
|
|