teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

サンプルコードの原理と参考記事へのリンクを追加

2019/08/29 22:39

投稿

nomuken
nomuken

スコア1627

answer CHANGED
@@ -18,4 +18,16 @@
18
18
  return (MessageBox(hWnd, lpText, lpCaption, uType));
19
19
  }
20
20
  ```
21
- IDI_SMALLの部分にお好みのリソースIDを入れてください。
21
+ IDI_SMALLの部分にお好みのリソースIDを入れてください。
22
+
23
+ 原理を解説します。
24
+
25
+ メッセージボックスはダイアログボックスの一種なのでウィンドウハンドルを取得してWM_SETICONでアイコンのハンドルを指定すればよいと予想されます。ただ、メッセージボックスのウィンドウハンドルがMessageBox関数内で隠蔽されており、ダイアログボックス表示処理への介入もできないと思ってしまいます。
26
+
27
+ それを覆すのがSetWindowsHookEx関数によるフック処理です。
28
+ この関数を使うといろいろな処理がフックできます。
29
+ これでメッセージボックスがアクティブになる瞬間を捕まえて、パラメタで渡されたメッセージボックスのウィンドウハンドルに対しWM_SETICONをします。
30
+
31
+ 今回の質問で参考したのは以下の記事です。
32
+
33
+ [MessageBoxのはい/いいえ/キャンセルの文字を変更する](https://blog.systemjp.net/entry/2015/03/31/164637)