トップページ > 過去ログ > 記事閲覧
別ウインドウに描画
名前:GB 日時: 2011/06/09 23:00

DXライブラリで描画した内容を 指定のウインドウに表示させたいのですが void draw(HWND hWnd) { SetWindowVisibleFlag(FALSE); ChangeWindowMode(TRUE); DxLib_Init(); SetDrawScreen(DX_SCREEN_BACK); LoadGraphScreen(0, 0, _T("test.bmp"), TRUE); BltBackScreenToWindow(hWnd, 0, 0); ScreenFlip(); } このようにすると、指定した「hWnd」に何も表示されませんでした。 そこで以下のようにしたところ void draw(HWND hWnd) { //SetWindowVisibleFlag(FALSE); ChangeWindowMode(TRUE); DxLib_Init(); SetDrawScreen(DX_SCREEN_BACK); LoadGraphScreen(0, 0, _T("test.bmp"), TRUE); BltBackScreenToWindow(hWnd, 0, 0); ScreenFlip(); } 表示されたのですが、DXライブラリが生成するウインドウも 表示されたままになってしまいました。 さらに void draw(HWND hWnd) { ChangeWindowMode(TRUE); DxLib_Init(); SetDrawScreen(DX_SCREEN_BACK); LoadGraphScreen(0, 0, _T("test.bmp"), TRUE); BltBackScreenToWindow(hWnd, 0, 0); ScreenFlip(); SetWindowVisibleFlag(FALSE); } このようにすると、指定のウインドウに表示されるのですが DXライブラリが生成するウインドウが非表示になるところが見えてしまいます。 「SetWindowVisibleFlag」を「SetNotWinFlag」に変えてみても 動きは同じでした。 また「BltBackScreenToWindow」を「SetUserWindow」に変えてみたところ 起動直後にウインドウが消えてしまいました。 (DxLib_Initの前に記述しています。) 最終的にやりたいことは 最初からDXライブラリが生成するウインドウを非表示 又はそもそも生成しないで 指定した「hWnd」にDXライブラリが描画する内容を 表示したいのです。 何か解決策があれば教えてください。 ※使用しているバージョンはVC++用最新のv3.05です。

Page: 1 |

Re: 別ウインドウに描画 ( No.1 )
名前:いっち 日時:2011/06/10 19:40

SetUserWindow では問題あるのでしょうか?
Re: 別ウインドウに描画 ( No.2 )
名前:GB 日時:2011/06/10 20:27

回答ありがとうございます。 説明が不足しておりまして申し訳ありません。 「SetUserWindow」を設定した場合に DXライブラリが生成するウインドウは非表示になるのですが 「SetUserWindow」で指定した「hWnd」のウインドウも起動後に強制終了してしまいます。 その際に使用したソースです。 void draw(HWND hWnd) { SetUserWindow(hWnd); DxLib_Init(); LoadGraphScreen(0, 0, _T("test.bmp"), TRUE); }
Re: 別ウインドウに描画 ( No.3 )
名前:いっち 日時:2011/06/10 20:47

> 「SetUserWindow」で指定した「hWnd」のウインドウも起動後に強制終了してしまいます。 私の環境では特に問題なく動作しているように見受けられます。 もし宜しければ、強制終了の発生するソースをご提供下さい。
Re: 別ウインドウに描画 ( No.4 )
名前:GB 日時:2011/06/10 21:05

回答ありがとうございます。 現在他のツールの画面描画部分をDXライブラリに差し替えるプラグインを作成しているのですが そのツールがプラグイン用に提供しているウインドウハンドルを使用しています。 その為、ソースを張り付けるとなるとかなり大きなものとなってしまいますので もう一度自分で調べてみようと思います。 BltBackScreenToWindowでは問題なく表示できているので SetUserWindowを使用した場合に、他のツールが提供している ウインドウとの相性が悪いのかもしれません。 調べて頂きありがとうございました。
Re: 別ウインドウに描画 ( No.5 )
名前:いっち 日時:2011/06/10 21:35

SetUserWindow だと何故強制終了するのかわからないのでなんとも言えないのですが、 渡されたウィンドウハンドルを直接 SetUserWindow に指定するのではなく、 そのウィンドウハンドルを親に持つ子ウィンドウを作成して指定しても駄目でしょうか?
Re: 別ウインドウに描画 ( No.6 )
名前:いっち 日時:2011/06/11 00:29

もしかすると、強制終了の原因は「マウスデバイスの初期化... マウスデバイスの協調レベルの設定に失敗しました」というものかもしれません。 だとすると、DxLib_Init の前で SetNotInputFlag( TRUE ); とすれば、とりあえず動くかもしれません。
Re: 別ウインドウに描画 ( No.7 )
名前:GB 日時:2011/06/11 00:55

SetNotInputFlag(TRUE); を設定したところ、問題なく動作しました。 ありがとうございます! でも、これ設定すると入力機能が使用できなくなってしまうんですよね・・? 何か良い回避方法はないでしょうか。
Re: 別ウインドウに描画 ( No.8 )
名前:いっち 日時:2011/06/11 01:48

DirectInputを切るだけで動くかもしれません。 以下のように変更してみてください。 > SetNotInputFlag( TRUE ); ↓↓↓↓ > SetUseDirectInputFlag( FALSE ); ようするにスクリーンセーバーのプレビューと同じですね。 >h t t p://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=1556
Re: 別ウインドウに描画 ( No.9 )
名前:GB 日時:2011/06/14 23:18

お返事遅くなりまして申し訳ありません。 「SetUseDirectInputFlag」を使用することで問題なく動作しました。 ありがとうございます! DirectInputを使用しないということは「DxInput.cpp」で定義されている関数については使用できない (win32apiのイベントを使用してプロシージャで処理する) と言う認識で宜しいでしょうか?
Re: 別ウインドウに描画 ( No.10 )
名前:いっち 日時:2011/06/15 00:07

> DirectInputを使用しないということは「DxInput.cpp」で定義されている関数については使用できない いいえ。DXライブラリはDirectInputを使わない場合は(たぶん)WindowsAPIを使用してキー情報を更新します。 (Vista以降の環境ではデフォルトで SetUseDirectInputFlag は FALSE です) 使用感が若干異なりますが、CheckHitKey などは使えると思います。
Re: 別ウインドウに描画 ( No.11 )
名前:GB 日時:2011/06/15 15:37

了解しました。 これですっきりと作業が進められそうです。 色々とありがとうございました!

Page: 1 |