ボタンを表示するには?

解決


鈴木  2003-01-31 10:00:08  No: 50976

WM_CREATEメッセージを受けて
hChdWnd = CreateControlWindow(hwnd,20,10,100,100,0,BS_PUSHBUTTON,"終了","BUTTON",(HMENU)ID_STOP,(HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE));
のようにボタンを作成しようとしたのですが、ボタンの表示されるべき場所のウィンドウが透明になって下にあるウィンドウ(デスクトップ含む)が透けて見えている状態でボタンが表示されません。
ボタンを押したり、ウィンドウの位置を変えたりすると表示されるようになります。
どうすればはじめからボタンが表示されるようにできますでしょうか?
環境は  Windows2000、VC++6.0(SP5)、SDKです。

この関数を呼び出してボタンを作成しています。
HWND CreateControlWindow(HWND hwndParent, int Left, int Top,int Width, int Height,int dwExStyle ,int dwFlag ,LPCTSTR Caption, LPCTSTR ClassName,HMENU ChildID,HINSTANCE hInstance)
{
  return CreateWindowEx(dwExStyle,ClassName,Caption,WS_CHILD | WS_VISIBLE | dwFlag ,
                         Left, Top, Width, Height, hwndParent, ChildID, hInstance, NULL);
}


dson  2003-02-01 10:19:47  No: 50977

WM_CREATEではなくWM_INITDIALOGメッセージですれば問題ないと思います。
WM_CREATEメッセージを受けた時点では、まだウィンドウが作成されていないため
そのような結果になったんだと思います。


鈴木  2003-02-01 12:28:33  No: 50978

返信ありがとうございます。
扱っているのがダイアログでないので、「WM_INITDIALOG」を受けるのは無理みたいです。
起動時に設定をファイルから読み込んでそれにしたがって背景の表示とボタンの作成をしたいのですが、背景の表示はなんとかなりました。
後はとりあえずボタンが表示できるようになればいいのですが、Cを使い始めたばかりということもあって、検討がつきません。
引き続き助言お願いします。


いぷ  2003-02-01 17:55:12  No: 50979

ボタンの親にWS_CLIPCHILDRENスタイルを設定してますか?


silver fox  2003-02-01 20:36:59  No: 50980

http://www.kumei.jp/c_lang/sdk/sdk_28.htm

この辺がそのままの例かな?


鈴木  2003-02-02 08:53:27  No: 50981

返信ありがとうございます。
早速試してみました。
いぶさん>WS_CLIPCHILDRENスタイルはついています。実は初めはつけていなかったのですが、背景表示について質問させていただいた時に付けるようにと回答していただいたのでMSDNで意味を調べて付けました。
silver foxさん>紹介していただいたページととことん比較してみました。
ボタン作成のあたりではやはり問題はないようなので、まさかとは思いつつも他のところ(親ウィンドウ作成)も比較していくと
UpdateWindow(hWnd);
が抜けていました。これを入れるとこれまでうまくいかなかったのが嘘のようにボタンもウィンドウもちゃんと表示されました。
なぜ消してしまっていたのかわかりませんが、とりあえず解決しました。

ありがとうございました。
また質問させていただくことがあると思いますが、そのときはよろしくお願いします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加