テキストエディタや、なんらかの入力項目を持つアプリで、入力内容に変更があったら、アプリ終了時に内容の保存を促すダイアログが表示されることがあるだろう。
入力内容に変更があったのかどうかを取得するには、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"を選択しても何も起きない。
閉じるボタンを押しても、何も起きず、ウィンドウは閉じてしまう。
"ABCDE"を入力して、内容を変更してから、
"Check Modify"すると、
"Modify!"と表示される。
閉じるボタンでも、
"Modify!"と表示される。
Sample/winapi/EM_GETMODIFY/EM_GETMODIFY/src/EM_GETMODIFY at master · bg1bgst333/Sample · GitHub