プロパティシート/ページのサイズを変更したい

[戻る]
てんてく 2008/02/25(月) 14:58:53
環境WinXP VC++6.0
お世話になっております。

子プロプシートを貼り付け、親のサイズと合わせたいのですがうまく行きません。

m_sh.AddPage(&p1);//sheet
m_sh.Create(this, WS_CHILD);

CRect r;
GetClientRect(r);

m_sh.SetWindowPos(NULL, 0, 0, r.Width(), r.Height(), SWP_NOZORDER);
m_sh.ShowWindow(SW_SHOW);

プロパティページ作成時にDLGTEMPLATEを指定して親のサイズと合わせたりすれば
うまく行きそうな気もしますがページにPSP_DLGINDIRECTフラグを指定すると
ページ自体が作成できなくて困っています。
ご存知の方居られたらアドバイスお願いします。

ひろ 2008/02/27(水) 10:34:03
プロパティシートをタブではなくツリーにしているサンプルがあります。

http://www.codeguru.com/cpp/controls/treeview/misc-advanced/article.php/c727/

このサンプルではCTreePropertySheet::OnInitDialog()で、CTreeCtrlの分をMoveWindow
()で拡張していますが、私はSetWindowPos()でやっていました。

参考にしてみては。

てんてく 2008/02/28(木) 09:24:16
デモを拝見しましたが、どこら辺が”プロパティページ”になっているのか
理解が出来ませんでした。。
タブのデザインとかそういう問題ではなくて、ツリーをクリックしたりしても
CGeneralPrefsDlg以外のページを表示出来なかったです。

ただ、シートのサブクラスでOnInitDialog内にてサイズ変更ができそう・・・と思い

BOOL CSheetEx::OnInitDialog() 
{
    CPropertySheet::OnInitDialog();

    CRect rcWindow;

    GetWindowRect(&rcWindow);
    rcWindow.bottom = 100;//-=GetSystemMetrics(SM_CYCAPTION);
    MoveWindow(&rcWindow,FALSE);


//表示されないので追加してみたがダメ。
//    this->CenterWindow();
//    this->ShowWindow(SW_SHOW);

    return true;
}

自分でシートのサブクラスを作ってみたのですがシートごと表示されなくなって
しまいました・・・。

ひろ 2008/02/28(木) 13:45:19
>    rcWindow.bottom = 100;//-=GetSystemMetrics(SM_CYCAPTION);

高さを100にしたいのであれば、
rcWindow.bottom = rcWindow.top + 100;
にしなければいけません

表示されないのは、高さがマイナスになっているからだと思います。

てんてく 2008/02/28(木) 18:43:21
[[解決]]
>表示されないのは、高さがマイナス
基本的なところを見逃していました。
PageのInitDialogよりも後にSheetのInitDialogが走るようなので
位置調整は大変ですが何とかサイズ変更を実装できそうです。

いろいろとありがとうございました。

古いスレッドには追加発言できません。