このような編集はアプリケーション自ら行うこともできます。これは、メモ帳などのエディタがメニューから切り取りやコピーをサポートしている点からも明らかです。今回はこのような編集と、入力されたテキストを保存するプログラムを作成します。TEXT("テキストが変更されています。WM_SIZEでMoveWindowを呼び出しています。メニューから編集操作が行えるように、InitializeMenuItemという自作関数でメニューの作成を行っています。メニューの項目が選択された場合は、WM_COMMANDが送られます。0;WM_CUTが切り取りで、WM_COPYがコピー、WM_PASTEが貼り付けになります。WPARAMとLPARAMはそれぞれ0で問題ありません。親ウインドウに送信してはいけません。行えない場合は指定のメニュー項目を無効にするべきです。ここで項目の調整を行っています。0;}EM_GETSELを送信しているのは、現在テキストが選択されているかを確認するためです。このような場合は切り取りとコピーの項目をEnableMenuItemで有効します。逆に、テキストが選択されていない場合は、EnableMenuItemで項目を無効にします。IsClipboardFormatAvailableにCF_TEXTを指定することでこれを確認しています。今回は、入力されたテキストを保存するかどうかの確認をWM_CLOSEで行っています。ここで保存するように選択した場合は、ウインドウを閉じずに保存処理を行います。TEXT("テキストが変更されています。0;}}break;最初にEM_GETMODIFYでテキストが変更されているかを確認する点が重要です。変更されていない場合は、保存処理を実行する必要はありません。これにsizeof(TCHAR)を掛けることでテキストのサイズを算出します。GetWindowTextにどれだけのサイズを持ったバッファを指定すればよいか分からないためです。よって、HeapAllocで動的にバッファを確保し、その後にGetWindowTextでバッファを初期化します。後は、このバッファをWriteFileに指定すれば、バッファの中身はファイルに書き込まれることになります。書き込みが終了した場合は、変更が終了したことを示すためにEM_SETMODIFYを送信します。このとき、WPARAMにはFALSEを指定します。