プロパティシートのサイズの変更方法

[戻る]
Raimuraito 2001/11/25(日) 18:35:51
Vc++6.0を使用しています。

プロパティシートの各シートに表示されるダイアログの大きさを
小さくしました。
プロパティシートのサイズは自動的に以前よりも小さくはなったのですが、
ダイアログのサイズからするとかなり大きめです。
ダイアログサイズにあうように、シートの大きさを変更するには
どのようにすればよいでしょうか?

どなたか、よろしく御教授の程お願いいたします。

CdS 2001/11/25(日) 21:20:28
「かなり大きめ」と言われてもこちらには伝わらないのですが、CPropertySheet::OnInitDialogでMoveWindowすれば
いいのでは。
ページ(タブコントロール)やボタンのサイズを変えたいということなら、それらのウィンドウハンドルを取得しなければ
なりませんが。

Raimuraito 2001/11/28(水) 08:35:33
CdSさん、こんにちは。
アドバイスをしていただき、どうもありがとうございました。

「かなり大きめ」について補足させていただきます。
もとのダイアログはエディットボックスが縦に3列並んでいます。
ダイアログエディタではエディットボックス同士が密に接しており、余白もほとんど無い状態で、かつシートに表示されるダイアログは全て同じサイズとコントロール配置になっている状態なのですが、プロパティシートで表示すると
エディットボックスの間隔が画面上で1cm程度の広がり、シートの右側の余白が3cm位となってしまいます。
コンパクトなシートを作成したいと思っていますので、この余白が気になります。
(私のCRTは17インチで1024×768表示に設定しています)

アドバイスにしたがって、CPropertySheet::OnInitDialogでMoveWindowでウィンドウのサイズを変更してみました。
確かにウィンドウのサイズは小さくなるのですが、下記の2点の問題が残りました。

<1>
最下段に表示される「OK」、「キャンセル」、「適用」のボタンの位置とサイズが変わらないので、プロパティシートの右側の余白を小さくするべくMoveWindowでウィンドウの幅を狭くすると、「キャンセル」ボタンの右半分と「適用」ボタンの全てがウィンドウ外となってしまい、画面表示されなくなる。

<2>
ダイアログエディタではエディットボックス同士が密に接しているのですが、プロパティシートで表示するとエディットボックスの間隔が画面上で1cm程度の広がる現象はそのまま残る。

この前のアドバイスでは、
>ページ(タブコントロール)やボタンのサイズを変えたいということなら、それらのウィンドウハンドルを取得しなけれ>ばなりませんが
ということでしたが、どうもそのようにする必要がありそうです。

すみませんが、どのようにすればできるのか教えていただけないでしょうか。
ウィンドウ(コントロール)のハンドルの取り方もわからない初心者ですので、お手数をおかけしますが、よろしくお願いいたします。

CdS 2001/11/28(水) 12:24:33
<1>
EnumChildWindowsを調べてみてください。

<2>
分かりません。

Raimuraito 2001/12/01(土) 13:22:11
CdSさん、こんにちは。

EnumChildWindowsを調べて下記のようにしてみたのですが、
EnumSheetControlの中を実行していないようです。
(「icheck = 6;」のステートメントにブレークポイントを
  設定してチェックしました。 )
どこが悪いのかよくわかりません。
ご教示していただきたくよろしくお願いいたします。

*** ColorSheet.h ***

bool CALLBACK EnumSheetControl(HWND hwnd, LPARAM lparam);

class CColorSheet : public CPropertySheet
{
.............
}
-------------------------------------------------------------
*** ColorSheet.cpp ***

BOOL CColorSheet::OnInitDialog() 
{
    BOOL bResult = CPropertySheet::OnInitDialog();
    MoveWindow(0, 0, 300, 400, true);
    EnumChildWindows((HWND)GetParent(), (WNDENUMPROC)EnumSheetControl, (LPARAM)(LPCSTR)"a");
    return bResult;
}

BOOL CALLBACK EnumSheetControl(HWND hwnd, LPARAM lparam)
{
    int icheck;
    icheck = 6;   //ここにブレークポイントを設定
    return true;
}

CdS 2001/12/01(土) 15:03:31
>CdSさん、こんにちは。
こういう書き方は控えてほしいですね。
私だけが回答するわけではありません。

なぜGetParent()をHWNDにキャストしているんでしょう?
GetParent()->GetSafeHwnd()かGetParent()->m_hWndだと思いますけど。
というかGetParentじゃあ駄目なのでは。

    EnumChildWindows(m_hWnd, (WNDENUMPROC)EnumSheetControl, (LPARAM)(LPCSTR)"a");

なのでは。

Raimuraito 2001/12/01(土) 23:11:53
[[解決]]
>>CdSさん、こんにちは。
>こういう書き方は控えてほしいですね。
>私だけが回答するわけではありません。

→ どうも失礼しました。
  以後、気をつけるようにします。

>GetParent()->GetSafeHwnd()かGetParent()->m_hWndだと思いますけど。

→ GetParent()->GetSafeHwnd()とすることで、うまくいきました。
  どうもありがとうございました。

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