この記事は2018年08月06日に投稿しました。
目次
Microsoft Visual C++/CLI Step by Step (Step by Step Developer) (English Edition)
- 作者: Julian Templeman
- 出版社/メーカー: Microsoft Press
- 発売日: 2013/08/15
- メディア: Kindle版
- この商品を含むブログを見る
1. はじめに
こんにちは、iOSのエディタアプリPWEditorの開発者の二俣です。
今回は業務で使用しているC++/CLIの話です。
ユーザへの通知用にフォームでダイアログ画面を作成しました。
メッセージを表示するラベルと、ダイアログを閉じるOKボタンだけのシンプルな画面にしました。
ダイアログのサイズ変更を禁止するため、フォームのConrolBoxプロパティをfalseにしました。
これによりタイトルバーの最小化ボタン、最大化ボタン、閉じるボタンが表示されなくなり、ダイアログを最大化できなくなると考えてました。
ところがタイトルバーをダブルクリックすると、ダイアログが最大化してしまうと報告があり、対応を調査しました。
2. 最大化を禁止する方法
調べてみるとConrolBoxプロパティの設定だけでは、タイトルバーのダブルクリックによる最大化は禁止されませんでした。
タイトルバーのダブルクリックによる最大化を禁止する方法としては、次の3つがあるようです。
- MaximizeBoxプロパティをfalseに設定する。
- そのフォームに対するWM_NCLBUTTONDBLCLK メッセージを無視する。
- そのフォームに対するサイズ変更イベントで、最大化された時に元の状態に戻す。
2, 3の方法は実装が必要となるため、今回はプロパティの変更だけでよい1の方法を採用しました。
MaximizeBoxプロパティをfalseに設定すると、最大化に関する動作が禁止になるようで、
- 最大化ボタンは非表示
- ショートカットキー"Win + ↑"による最大化が禁止
- タイトルバーのダブルクリックによる最大化が禁止
となります。
同様にMinimizeBoxプロパティをfalseに設定した場合は、最小化に関する動作が禁止になります。
参考ですが、2のWM_NCLBUTTONDBLCLKメッセージを無視する方法です。
以下のメソッドをダイアログのフォームに実装してください。
#define WM_NCLBUTTONDBLCLK (0xA3) /// ウィンドウプロシージャ virtual void WndProc(Message% m) override { // 非クライアント領域内でマウスの左ボタンがダブルクリックされた場合 if (m.Msg == WM_NCLBUTTONDBLCLK) { m.Result = IntPtr::Zero; return; } Form::WndProc(m); }
3のサイズ変更イベントを利用する方法です。
ダイアログのサイズ変更イベントのイベントハンドラとして呼び出してください。
サンプルでは、最小化された時も元の状態に戻すようにしています。
/// サイズ変更イベントのイベントハンドラ private: System::Void Form_SizeChanged(Object^ sender, EventArgs^ e) { // ウィンドウの状態が最大化、または最小化された場合 if ((this->WindowState == FormWindowState::Maximized) || (this->WindowState == FormWindowState::Minimized)) { // 通常の状態に戻します。 this->WindowState = FormWindowState::Normal; } }
API Reference
ControlBoxプロパティ
MaximizeBoxプロパティ
3. おわりに
ダイアログが表示されたとき、元の画面の内容を確認しようとして、ダイアログのタイトルバーをドラッグした時に誤ってダブルクリックとなり発覚しました。
てっきりConrolBoxプロパティの設定で、最大化禁止になったと思い込んでいました。
転職を本気で考えている方向けのプログラミングスクール!【WebCampPRO】
世界でいちばん簡単なVisualC++のe本 標準C++とC++/CLIの基本と考え方がわかる本
- 作者: 金城俊哉
- 出版社/メーカー: 秀和システム
- 発売日: 2009/10/26
- メディア: 単行本
- 購入: 2人 クリック: 26回
- この商品を含むブログ (2件) を見る
紹介している一部の記事のコードはGitlabで公開しています。
興味のある方は覗いてみてください。
私が勤務しているニューラルでは、主に組み込み系ソフトの開発を行っております。
弊社製品のハイブリッドOS Bi-OSは高い技術力を評価されており、特に制御系や通信系を得意としています。
私自身はiOSモバイルアプリやウィンドウズアプリを得意としております。
ソフトウェア開発に関して相談などございましたら、お気軽にご連絡ください。
また一緒に働きたい技術者の方も随時募集中です。
興味がありましたらご連絡ください。
EMAIL : info-nr@newral.co.jp / m-futamata@newral.co.jp
TEL : 042-523-3663
FAX : 042-540-1688