プロが教える店舗&オフィスのセキュリティ対策術

VC++初心者です。
たびたび、お世話になっております。

現在、VC++2005 Express Edition、CLRのプロジェクトで
コーディングしています。

基本的な質問だと思いますが、ダイアログ右上に配置される
最小化、最大化、閉じるボタンの制御の仕方を
教えていただけませんでしょうか。

具体的にはやりたいことは、以下のようなものです。
・閉じるボタンを押されたら、MessageBoxを表示させる。
・他のダイアログのボタンから別のダイアログの最大化ボタンが
 押されたことと同じ動作をする。

A 回答 (3件)

No.1さんMFCではないですよ。



最大化、最小化は
FormのResizeイベントでWindowStateプロパティを見ればわかります。

System::Void Form1_Resize(System::Object^ sender, System::EventArgs^ e)
{
  if (this->WindowState == FormWindowState::Maximized) {
    MessageBox::Show(L"最大化");
  }
  else if (this->WindowState == FormWindowState::Minimized) {
    MessageBox::Show(L"最小化");
  }
}

×ボタンで閉じるはFormClosingやFormClosedあたりのイベントで。

>・他のダイアログのボタンから別のダイアログの最大化ボタンが
> 押されたことと同じ動作をする。
とは?
この前の子フォームのと関連しているということでしょうか?
最小化時にに子フォームのVisibleプロパティをfalseに、最小化が解除されたとき(=最大化だけとは限らない)にtrueにするだけですが。
(そもそも、親フォームに最大化ボタンは必要あるか。)

この回答への補足

ご指摘、ありがとうございます。
私の質問内容が不明確ですみませんでした。

>>・閉じるボタンを押されたら、MessageBoxを表示させる。
とは、
あくまで動作イメージなのですが
×ボタンが押されたら、「アプリを終了しますか?YES/NO」と書かれた
メッセージダイアログを出現させてアプリを終了させるかどうかの
操作を加えたいと考えています。
(この場合は、FormClosingのタイミングで動作させれば宜しいでしょうか。)

また、
>>・他のダイアログのボタンから別のダイアログの最大化ボタンが
>> 押されたことと同じ動作をする。
とは、
http://okwave.jp/qa4877962.html
の延長なのですが、現在親フォームから子フォームを呼び出して
親フォームに設置したボタンから子フォームを最大化、最小化、
元のサイズ戻すということをしたいと考えています。
(親フォームから子フォームをコントロールしたいです。)

補足日時:2009/04/19 17:14
    • good
    • 0

キーワードが出ているので少しは検索してみましょう。



>子フォームを最大化、最小化、元のサイズ戻す

>WindowStateプロパティ
http://msdn.microsoft.com/ja-jp/library/system.w …
>ウィンドウが元のサイズに戻されているか、最小化されているか、最大化されているかを示す値を取得または『設定します』。これは、依存関係プロパティです。

// 最小化
this->childform_->WindowState = FormWindowState::Minimized;
// 最大化 Maximized
// 元に戻す : Normal
    • good
    • 0
この回答へのお礼

ありがとうございます。
できました!

MSDNのページには他の件でも何度もアクセスしています。
まだまだ私には難しくて、他のページを参照することが多々ありますが、
MSDNのページは一番有益なページだと思うので、
使いこなせるようにがんばります。

お礼日時:2009/04/20 11:15

とりあえず、


×は、以下でダイアログ表示するようになります。

WM_DESTROY をオーバーロードします。

void CSysDlg::OnDestroy()
{
CDialog::OnDestroy();

// TODO: ここにメッセージ ハンドラ コードを追加します。
CAboutDlg dlgAbout;
dlgAbout.DoModal();

}
なお、上記は、面倒だったので、Aboutダイアログを表示しています。
他は、意味がよくわからないのですが・・・。

この回答への補足

ご回答、ありがとうございます。
No2さんからもご指摘がありましたように、
教えていただいたのはMFCの書き方のようですね。
(今回教えて頂着たかったのは、作成するVC++のCLRで
プロジェクトでした。)

しかしながら、VC++6.0も使用しているので、
紹介していただいたソースを参考にさせて頂きます。

補足日時:2009/04/19 10:12
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!