メルマガ:あゆしゃのC言語プログラミング
タイトル:あゆしゃのC言語プログラミング(Vol.443) CPanelクラス  2004/04/26


/*========================================================*/
    <<<あゆしゃの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

ブラウザの閉じるボタンで閉じてください。