EM_GETMODIFY

テキストエディタや、なんらかの入力項目を持つアプリで、入力内容に変更があったら、アプリ終了時に内容の保存を促すダイアログが表示されることがあるだろう。
入力内容に変更があったのかどうかを取得するには、EM_GETMODIFYメッセージを使う。

EM_GETMODIFY message - Windows applications | Microsoft Docs

resource.hでは、

今回は、ボタンじゃなくてエディットコントロールなので、ID_EDIT1。

EM_GETMODIFY.rcでは、

リソースIDはID_ITEM_CHECK_MODIFYで、"Check Modify"という表示名のアイテムを用意。

EM_GETMODIFY.cppでは、

WM_CREATEで、リソースIDがID_EDIT1のエディットコントロール作成。

"Check Modify"のアイテムが選択されたら、GetDlgItemでhEditを取得。
SendMessageでhEditにEM_GETMODIFYを送ると、戻り値としてエディットコントロールの内容に変更があったかどうかが返ってくる。
変更されたら"Modify!"と表示する。

WM_CLOSEの時も、同じ処理をする。

実行時は、

実行時
実行時

この状態。

Check Modify
Check Modify

"Check Modify"を選択しても何も起きない。

閉じるボタン
閉じるボタン

閉じるボタンを押しても、何も起きず、ウィンドウは閉じてしまう。

内容変更
内容変更

"ABCDE"を入力して、内容を変更してから、

Check Modify
Check Modify

"Check Modify"すると、

Modify!
Modify!

"Modify!"と表示される。

閉じるボタン
閉じるボタン

閉じるボタンでも、

"Modify!"
"Modify!"

"Modify!"と表示される。

Sample/winapi/EM_GETMODIFY/EM_GETMODIFY/src/EM_GETMODIFY at master · bg1bgst333/Sample · GitHub