• 締切済み

自分の書いたプログラムに疑問があります

よろしくお願いします。 メモ帳を作っています、作成したウィンドウに 『メニュバー』  『ツールバー』 『ポップアップメニュー』 を作り、そこにエディタを貼り付けました。 『右クリック』をすると、windows既成のポップアップメニューが表示されるため、新しいプロシージャで自分用のポップアップメニューを作ったのですが、 メモ帳に何も書かずに終了した時、終了できなかったのでこのプログラムを先頭に加えました。 if(SendMessage(hWnd, EM_GETMODIFY, 0, 0) == FALSE){ id = MessageBox(hWnd, TEXT("終了してもいいですか"), TEXT("確認"), MB_YESNO | MB_ICONQUESTION); if(id == IDYES){ DestroyWindow(hWnd); PostQuitMessage(0); } } 疑問点  この記述は、『文書保存の確認』の所でも使っていますが、 これをつけないと終了できません。 重複しているため、すっきりしないのですが、 今は、これしか思い浮かばないのですが、もっとすっきりしたプログラムにしたいのです。 間違っている所、直したほうがいい所がありましたらアドバイスをお願いします。 //マイプロシージャの終了メッセージ処理 case WM_COMMAND: switch (LOWORD(wp)){ case IDM_END:   if(SendMessage(hWnd, EM_GETMODIFY, 0, 0) == FALSE){ id = MessageBox(hWnd, TEXT("終了してもいいですか"), TEXT("確認"), MB_YESNO | MB_ICONQUESTION); if(id == IDYES){ DestroyWindow(hWnd); PostQuitMessage(0); } //重複するが、ここを付けないと、何も書いていないメモ帳が閉じない } //ここから文書保存のプログラム if(SendMessage(hWnd, EM_GETMODIFY, 0, 0) == TRUE){ id = MessageBox(hWnd, TEXT("文書が更新されています、\n変更を保存しますか?"), TEXT("メモ帳"), MB_YESNOCANCEL | MB_ICONEXCLAMATION); if(id == IDYES){ MySaveAs(hWnd); }else if (id == IDCANCEL){ return IDCANCEL; } /*else if (id ==IDNO){ ここを記述すると  文書保存でキャンセルした時に、『終了しない』     また、何も書いてないと 『終了しない』  id = MessageBox(hWnd, TEXT("終了してもいいですか"), TEXT("確認"), MB_YESNO | MB_ICONQUESTION); if(id == IDYES){ DestroyWindow(hWnd); PostQuitMessage(0); //}//ここもコメントアウト } } } break;   default: return CallWindowProc(OldProc, hWnd, msg, wp, lp); } }  

みんなの回答

  • phoenix343
  • ベストアンサー率15% (296/1946)
回答No.2

IDM_ENDと同じ動作をさせたいなら、PostMessageで飛ばせばいい。 PostMessage(WM_COMMAND, MAKELONG(IDM_END, 0), 0, 0); ってな感じでね。 私なら関数化して、両方とも同じ関数を呼ぶようにするけど。

noname#220054
質問者

お礼

御礼が遅れてすみません。 アドバイスを参考に、新しい関数を作ってテストしている所です。 まだ、思ったように行きませんが、何とかなりそうです。

すると、全ての回答が全文表示されます。
  • narusuji
  • ベストアンサー率40% (4/10)
回答No.1

こんにちは。 どんな環境をお使いですか?(visual c++などでしょうか?) プログラムについては全くわかりませんが、参考までに教えて下さい。

noname#220054
質問者

お礼

>どんな環境をお使いですか? 今使っている環境は、borlandのコンパイラ、BCCデベロッパー、です。 コンパイルの結果によって(コンパイルエラーの内容によって)は、 VC++2005も使っています。

すると、全ての回答が全文表示されます。

関連するQ&A