|
/*========================================================*/ <<<あゆしゃのC言語プログラミング>>> /*========================================================*/ 第443回 CPanelクラス 発行 2004年4月26日(月曜日) 発行数 約2900 {magclick} /*========================================================*/ はじめに ( 決り文句 ) /*========================================================*/ ・このメールマガジンはまぐまぐさんから発行しています。 ・ジャンルは、マルチメディアのプログラム、C言語です。 ・このメールマガジンは、横60文字で作成しています。 また、インデントはすべて半角スペース4つで構成しています。 ・ここで扱うプログラムは、C言語と半光年以内のものです。 ・登録解除は、まぐまぐさんのホームページでお願いします。 ・まぐまぐさんのバックナンバー(下欄参照)を活用して下さい。 ・ここは私の復習の場です。内容は約1ヶ月内外に私が勉強した 内容になっています。最新の技術があれば、へたれもあります。 ・わかりやすさを優先させる為、たまに嘘があるかもしれません。 ・セキュリティ突破のため、暗号化された単語があります。 /*========================================================*/ ご挨拶 /*========================================================*/ こんにちは。あゆしゃです。 先週は風邪をひいてしまい、一週間、ずっとだらだらでした。 1年355日働くあゆしゃが、先週は4日もお休みしてしまい ました。 貧乏人の風上に置けない人になってしまいました。 まぁ、ひいてしまったものはいたし方ないということで、 ★おとなしく、ドdラrクエをやっていました。 エeスsタークが30ターン以内で倒せず、がんばっていたところ レベル52で、27ターンで倒せました! やった! と思ったのですが、ご褒美はなし。 えー? あーちなみに、検索CGIは暗号化されている単語も拾えるように してあります。えらい? {magclick} /*========================================================*/ 今回のお題 << CPanelクラス >> /*========================================================*/ というわけで、CPanelクラスです。 CPanelクラスは、ウィンドウのリサイズ時にコントロールを 再配置する処理を、自動化するものです。 たとえば、IDC_ITEM1..3 について、 1を上段に配置し、左右最大、 2を中央に配置し、上下左右最大、 3を下段に配置し、左右最大、 という感じでリサイズするとき、 CXXXDlg::OnSize( ... ) { CDialog::OnSize( ... ); CWnd* pWnd1 = GetDlgItem( IDC_ITEM1 ); CWnd* pWnd2 = GetDlgItem( IDC_ITEM2 ); CWnd* pWnd3 = GetDlgItem( IDC_ITEM3 ); if( ! cx || ! cy || ! pWnd1 || ! pWnd2 || ! pWnd3 ) return; CRect rc1, c2, rc3; pWnd1->GetWindowRect( &rc1 ); pWnd2->GetWindowRect( &rc2 ); pWnd3->GetWindowRect( &rc3 ); ScreenToClient( &rc1 ); ScreenToClient( &rc2 ); ScreenToClient( &rc3 ); rc1.right = cx - rc1.left; // 右いっぱいに rc2.right = cx - rc2.left; // 右いっぱいに rc3.right = cx - rc3.left; // 右いっぱいに rc2.top = rc1.bottom + rc2.left; // 上いっぱいに rc2.bottom = rc3.top - rc2.left; // 下いっぱいに pWnd1->MoveWindow( &rc1 ); pWnd2->MoveWindow( &rc2 ); pWnd3->MoveWindow( &rc3 ); } こんな感じでしょうか。嫌になりますよね。 CPanel を使うと、こんな感じになります。 CXXXDlg::OnSize( ... ) { CDialog::OnSize( ... ); panel.Resize( 0, 0, cx, cy, 2 ); // リサイズ実行 } なんと、1行ですよ。 /*========================================================*/ あらかじめ、どのコントロールをどこに配置して、どのように サイズ調整を行うのか、ということを、登録しておく必要があり ます。 CPanel panel; // メンバ変数などとして定義する // OnInitDialogにて、 panel.Init( this ); // 親ウィンドウを設定する panel.SetTopCenter( IDC_ITEM1 ); // 上段中央 panel.SetCenterCenter( IDC_ITEM2 ); // 中段中央 panel.SetBottomCenter( IDC_ITEM3 ); // 下段中央 という感じで、登録を行います。 簡単でいいですね。 /*========================================================*/ 大型計算機では、テキストを3つ、上中下に配置し、それぞれ 3分割する大きさでリサイズさせようと考えています。 これをCPanelを使って行うとすると、3分割するオプションは ないため、パネルを3つ用意して、 panel1.SetCenterCenter( IDC_TEXT1 ); panel2.SetCenterCenter( IDC_TEXT2 ); panel3.SetCenterCenter( IDC_TEXT3 ); という感じで登録しておき、 int h = cy / 3; panel1.Resize( 0, 0, cx, h, 2 ); panel2.Resize( 0, h, cx, h * 2, 2 ); panel3.Resize( 0, h * 2, cx, cy, 2 ); という感じでリサイズを実行すれば、OKなはずです。うむ。 {magclick} /*========================================================*/ さいごに /*========================================================*/ {magclick} /*========================================================*/ 次回予告 /*========================================================*/ 次回は4月28日(水曜日)に、第444回を送ります。 お題は「CPanelクラス2」 中身の処理について。 お楽しみに! /*========================================================*/ 最後の決り文句 /*========================================================*/ このメールマガジンは、まぐまぐさんから発行しています。 このメールマガジンを解除したい場合は、まぐまぐさんをご利用 ください。このメルマガのまぐまぐアイディーは最後にあります。 このメールマガジンには広告が挿入されていますか? このメールマガジンの内容に文面の引用はありませんか? めーらっくすの場合はめーらっくすの利用方に従ってください。 このメールマガジンの内容の、転用、流用、宣伝、リンク、 採血して検査をしました なんて大歓迎です。 {magclick} /*========================================================*/ /*========================================================*/ 発行者 あゆしゃ まぐまぐアイディー 0000020674 まぐまぐバックナンバー http://jazz.tegami.com/backnumber/frame.cgi?id=0000020674 あゆしゃの世界 http://ayusya.hp.infoseek.co.jp/ 登録と解除 http://www.mag2.com/m/0000020674.htm ご意見・ご感想・ご質問メール mailto:ayusya@flamenco.plala.or.jp めーらっくす <<過去ログがタイトル別になっています>> http://www.mailux.com/mm_dsp.php?mm_id=MM3E1AEE285AB4F |