トップページ > 過去ログ > 記事閲覧
ウィンドウモードでのGraphLock関数について
名前:ジェイ 日時: 2008/10/16 23:40

はじめまして。ジェイと申します。 掲題の件、ウィンドウモード(非フルスクリーンモード)でGraphLock関数を使用したアプリケーションを作成しているのですが、うまく動作しません。 ・再現方法について homepage2.nifty.com/natupaji/DxLib/dxfunc.html#R15N3 の、GraphLock関数の「サンプル」のソースコードにおいて、 『char *GraphData ;』 と 『if( DxLib_Init() == -1 )』の間に ChangeWindowMode( TRUE ) ; の一行を追加してコンパイル&実行しますと、空のウィンドウモードのアプリケーションが起動すると同時に、フルスクリーンの左上にグラデーションが表示されます。 ※PCの「画面のプロパティ」で16bit/32bitカラーモードの変更を行っても、現象はほぼ同じで、ウィンドウモードのアプリケーション上にはグラデーションが表示されません。 ウィンドウモードでGraphLock関数を利用する場合、何か特別な設定が必要なのでしょうか? もしくは、GraphLock関数は、フルスクリーンモードでのみ動作する関数なのでしょうか? お忙しいところ済みませんが、お知恵を拝借できればと思います。 (もし当方の環境依存の問題でしたら申し訳ありません。ノートPCの為、グラフィックス関係が特殊なのかもしれません)

Page: 1 |

Re: ウィンドウモードでのGraphLock関数について ( No.1 )
名前:Will 日時:2008/10/17 10:01

予想になりますが、ウィンドウモードの場合様々なソフトが画面表示を行うため、 あるひとつのアプリケーションがロックしてしまうと、ほかのソフトがとまってしまうため出来ないようになっているのではないでしょうか。 GraphLock関数の説明に、ロック中にブレークポイントを使うとハングアップすると書いています。 これは、ブレークによりフルスクリーンが解除されるとウィンドウモードに移行してしまうため、 その瞬間にハングアップしますよ、ってことだと思います。
Re: ウィンドウモードでのGraphLock関数について ( No.2 )
名前:ジェイ 日時:2008/10/17 20:20

Willさんの書き込みを拝見しましたが、いくつか 腑に落ちない点があります。 ----引用---- ウィンドウモードの場合様々なソフトが画面表示を行うため、あるひとつのアプリケーションがロックしてしまうと、ほかのソフトがとまってしまう ------------ PCのスクリーン全体がGraphLockの対象となり、 ロックされてしまうということでしょうか? リファレンスを見ますと、ロックは グラフィックハンドルを対象に行われるように 見受けられます。 またサンプルでは、表画面のグラフィックハンドルを ロックの対象としているようですが、 表画面=PCの画面全体である、という記載が 見当たりませんでした。 ----引用---- これは、ブレークによりフルスクリーンが解除されるとウィンドウモードに移行してしまうため、 その瞬間にハングアップしますよ、ってことだと思います。 ------------ もしそうであれば、ブレークポイントについての 言及ではなく、直接「ウィンドウモードでは GraphLockは禁止」のような記載が リファレンスにあるのではないかと思うのですが、 いかがでしょうか?
Re: ウィンドウモードでのGraphLock関数について ( No.3 )
名前:ジェイ 日時:2008/10/26 09:56

もし管理人さんがご覧になっていましたら、お尋ねしたいです。 よろしくお願いします。
Re: ウィンドウモードでのGraphLock関数について ( No.4 )
名前:管理人 日時:2008/11/03 22:51

申し訳ありません、GraphLock は現在のPC環境に適していないので非公開関数にすることにしました 代替手段があるかもしれませんので、宜しければ GraphLock をどのような用途でお使いになりたかったのか 教えていただけないでしょうか? 因みに上記のことを踏まえた上で、お書き込み頂いた質問にご返答します > ウィンドウモードでGraphLock関数を利用する場合、何か特別な設定が必要なのでしょうか? > もしくは、GraphLock関数は、フルスクリーンモードでのみ動作する関数なのでしょうか? いえ、ウインドウモードでも正常に動作します ただ、表画面に対するロックには動作に差異がありますので、表画面に対するロックは控えた方が良いと思います > PCのスクリーン全体がGraphLockの対象となり、 > ロックされてしまうということでしょうか? はい、その通りです Aero を有効にした Vista では違いますが・・・
Re: ウィンドウモードでのGraphLock関数について ( No.5 )
名前:ジェイ 日時:2008/11/04 22:20

管理人様、ご返答ありがとうございます。 > 代替手段があるかもしれませんので、宜しければ GraphLock をどのような用途でお使いになりたかったのか > 教えていただけないでしょうか? GraphLockを使用したかったのは、 「画面描画用タイルパターンを、bmpファイルのロードではなく、 プログラムから作成したかった」為です。 画面を、タイルパターン(例えば8ドットx8ドット)を敷き詰めて描画する場合、  (1)いくつかのタイルパターンをまとめ、"AAAA.bmp"タイルパターン画像ファイルを作成。  (2)プログラム内で、タイルパターン用グラフィックハンドルに"AAAA.bmp"をロード。  (3)DrawRectGraphで、タイルパターン用グラフィックハンドルの任意の部分から     表画面ないし裏画面にタイルパターンをコピーして、画面を作成。 のような処理を行うと思います。 上記の処理では、(2)のタイルパターン用グラフィックハンドルで指し示される画像は、 (1)のタイルパターン画像ファイルの内容となりますが、 私の作成するプログラムでは、(2)の画像をプログラム内で作成する形にしたいのです。 このため、特定のグラフィックハンドルに対してのDrawPixel, DrawBox, GetPixelを 行うような関数が無いかと探しましたが、見当たらなかったため、GrapLockを使用した次第です。 以上、ご回答まで。
Re: ウィンドウモードでのGraphLock関数について ( No.6 )
名前:管理人 日時:2008/11/05 02:44

ご返答ありがとうございます ジェイさんがご希望の処理は今回のバージョンアップで追加した LoadSoftImage 系の関数で実現できると思います 簡単に手順をご説明しますと 1.MakeXRGB8ColorSoftImage でタイルパターン格納用のソフトウエアイメージハンドルを作成 ( アルファチャンネルが必要な場合は MakeARGB8ColorSoftImage 関数を使用してください ) 2.DrawPixelSoftImage を使用して1で作成したソフトウエアイメージハンドル上に  タイルパターンを作成 3.CreateGraphFromSoftImage で1で作成したソフトウエアイメージハンドルからグラフィックハンドルを作成 という感じです ( 申し訳ありません、大変お手数ですが関数の詳細はリファレンスページの開設をご参照下さい m(_ _;m ) ソフトウエアイメージハンドルに対しては DrawPixel に相当する機能しかありませんが、 DrawPixel で済ませられることでしたらソフトウエアイメージハンドルの類で実現可能です 宜しければご検討下さい

Page: 1 |