ページ 11

ウィンドウ(ボタン)を配置するがFlipで上書きされる

Posted: 2010年9月14日(火) 19:54
by dic
自作のDirectXライブラリを使用してます

CreateWindow() 関数でボタンクラスを指定してボタンを作成
表示までできたのですが、DirectX の Flip処理をすると
ボタンが描画された状態のところを上書きしてしまうので
ボタンが見えない状態になってしまいます

どこに配置しているか文字で表してます
ここをクリックすると一瞬ボタンウィンドウが見えるのでうまくいっているようですが
DirectDraw の Flip関数を使うと画面全体を描画するので
どうしてもボタンが消えてしまいます

どのようにしたらボタンが描画されているように見えるのでしょうか?
どのようなものか下に実行ファイルを置いておきます
http://www1.axfc.net/uploader/Sc/so/153278
(送付ファイルと同じものです)
m_hwnd = CreateWindow( "BUTTON", "ゴシック", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
        m_x, m_y, 100, 30, hwndApp, (HMENU)100, hInstApp, NULL );
としてボタンを作成してますが その後に呼び出される画面再描画関数
DEF_DXDRAW->Flip( hwndApp );
で上書きしてしまうのです


どうしてもできない場合は独自のボタンクラスを作り
これに文字を描画しようと考えています 画像

Re:ウィンドウ(ボタン)を配置するがFlipで上書きされる

Posted: 2010年9月14日(火) 20:09
by シエル
エラーが出て動きません。
吐き出されるログもファイルは作成されますが、空っぽです。

Re:ウィンドウ(ボタン)を配置するがFlipで上書きされる

Posted: 2010年9月14日(火) 20:15
by dic
>シエルさん

すいません、送付容量の制限上wavファイルを削ったものを送付してました

下の方はwavファイルが一緒なので動くと思います
http://www1.axfc.net/uploader/Sc/so/153278

Re:ウィンドウ(ボタン)を配置するがFlipで上書きされる

Posted: 2010年9月14日(火) 20:21
by シエル
実行しましたが、どこにボタンがあるのかわかりませんでしたw

DirectDrawだとちょっと対応方法が分かりませんね。

ちなみに親ウィンドウのウィンドウスタイルにWS_CLIPCHILDRENを追加してみても駄目でしょうか?

Re:ウィンドウ(ボタン)を配置するがFlipで上書きされる

Posted: 2010年9月14日(火) 20:30
by 御津凪
DirectX系の描画は作成時に指定したウインドウハンドルの描画範囲を占有して描画します。
そのため、そのウインドウにコントロールなど(子ウインドウ)があっても、全て丸ごと上書きされます。

これを回避する方法は原則としてありません。
(Flip後に強制的に描画させることはできますが、チラつきますし、CPUの負担が大きくなります)

素直に自作UIを作るなりした方が早いですよ。

Re:ウィンドウ(ボタン)を配置するがFlipで上書きされる

Posted: 2010年9月14日(火) 22:15
by dic
>シエルさん
WS_CLIPCHILDRENをウィンドウ作成時のフラグに追加してもダメみたいでした
クリックするのは左下の文字「戦略」「基地」というところです

>御津凪さん
>これを回避する方法は原則としてありません
やはりそうですか
市販ゲームなども独自のUIを作っているので市販されてるゲームのUIなどを
参考します

助言ありがとうございました