トップページ > 記事閲覧
画面の回転でエラーが
名前:ねこ 日時: 2016/07/29 00:42

プログラムを実行中に画面を90度、もしくは270度回転させるとProcessMessageが-1を返してしまうのですがこれは仕様でしょうか? ウィンドウモードで起こりました デスクトップやノートであれば頻繁に画面を回転させる事はないのでいいと思うのですが 最近はwindowsタブレットなどがあり画面の回転という動作をする頻度が増えていると思うので、もし可能ならば対応して欲しいと考えています
メンテ

Page: 1 |

Re: 画面の回転でエラーが ( No.1 )
名前:管理人 日時:2016/07/30 02:47

ご指摘ありがとうございます ねこさんが試された環境は Windows8 や Windows10 のタブレットPCなどの手軽に 画面の角度を変更できるデバイスでしょうか?
メンテ
Re: 画面の回転でエラーが ( No.2 )
名前:ねこ 日時:2016/07/30 21:43

いいえ、自分の環境はデスクトップと画面の取り外しなどが出来ない、普通のノートになります ノートPCの画面を頻繁に回転させるという使い方をしている友人からの報告で もしかしたらタブレットユーザーには致命的なバグになるのではないかと思い書き込みましたので タブレットでの動作を確認した訳ではなかったですすみません
メンテ
Re: 画面の回転でエラーが ( No.3 )
名前:管理人 日時:2016/08/01 02:51

手元の Windows10 のタブレットPC環境( Surface Pro 3 )でDXライブラリのウィンドウモードの プログラムを実行しながら画面を回転させてみたのですが、ProcessMessage が -1 を返すことなく そのまま動き続けました 自分でも何時ごろ対応したのか覚えていませんが、ウィンドウモードであれば実行中に デスクトップ画面の解像度や角度の変更を行っても問題なく動作し続けるようです お使いのDXライブラリのバージョンが最新ではありませんでしたら、最新版のDXライブラリであれば ねこさんのご友人が試された環境でも回転後も正常に動作するかもしれませんので、よろしければこちらの 暫定最新版をお使いになってみてください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_DevCppTest.exe // Dev-C++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
メンテ
Re: 画面の回転でエラーが ( No.4 )
名前:ねこ 日時:2016/08/01 22:27

最新版のDXライブラリに更新して試しましたが 結果は変わりませんでした ログを出力するとそれらしい事が書いてあったので貼り付けておきます 以下ログになります 0:ChangeWindowMode実行 15:ウインドウモードフラグが立てられました 2032:DXライブラリの初期化処理開始 2044: システムの情報を出力します 2057: DXライブラリ Ver3.16e 2068: 論理プロセッサの数 : 4 2079: OS Windows10 ( Build 10586 ) 2204: 現時点のCPU動作速度:大体2.19GHz 2219: MMX命令を使用します 2231: SSE命令が使用可能です 2244: SSE2命令が使用可能です 2255: CPUベンダ:GenuineIntel 2315: CPU名:Intel(R) Core(TM) i5-5200U CPU @ 2.20GHz 2328: COMの初期化... 成功しました 2353: メモリ総量:8103.33MB 空きメモリ領域:3371.72MB 2365: タイマーの精度を検査します 2375: 精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60 2387: パフォーマンスカウンターを使用します タイマー精度 : 2143.471000 KHz 2410: ソフトの二重起動検査... 二重起動はされていませんでした 2445: ウインドウクラスを登録します... 登録に成功しました 2468: ウインドウモード起動用のウインドウを作成します 2485: ディスプレイ情報のセットアップ開始 2508: モニターの数:1 ディスプレイデバイスの数:3 2525: No.0 モニター名:\\.\DISPLAY1 1920x1080 32bit 60Hz 2582: ディスプレイ情報のセットアップ完了 2606: ウインドウの作成に成功しました 2625: ウインドウを表示します 2659: IMEを無効にしました 2684: ウインドウスタイルをウインドウモード用に変更します... 完了 2773: DirectInput関係初期化処理 2790: XInput DLL の読み込み中... 成功 2824: DirectInput7 の取得中... DirectInput8 の取得を試みます...成功 2886: 引き続き初期化処理... 初期化成功 2926: ジョイパッドの初期化... 2966: ジョイパッドの初期化は正常に終了しました 2977: マウスデバイスの初期化... 初期化成功 3008: キーボードデバイスの初期化... 初期化成功 3036: DirectInput 関連の初期化は正常に終了しました 3093: DirectSound の初期化を行います 3108: DirectSound インターフェースの取得を行います.... 成功 3146: 引き続きインターフェースの初期化処理... 成功 3287: DirectSound デバイスを列挙します 3304: Module Name : Description : プライマリ サウンド ドライバー 3319: Module Name : {0.0.0.00000000}.{042864b9-2aef-499e-afa8-5c732f05549c} Description : スピーカー (Realtek High Definition Audio) 3333: 最大サンプリングレート:200.00KHz 最小サンプリングレート:0.10KHz 3348: 総サウンドメモリ領域:0.00KB 空きサウンドメモリ領域:0.00KB 3360: 利用可能サンプリング精度 3375: Primary 16bit = OK 8bit = OK 3389: Secondary 16bit = OK 8bit = OK 3403: 利用可能チャンネル 3417: Primary MONO = OK STEREO = OK 3428: Secondary MONO = OK STEREO = OK 3445: DirectSound の初期化は正常に終了しました 3466: d3d11.dll の読み込み.... 成功 3503: dxgi.dll の読み込み.... 成功 3530: API CreateDXGIFactory1 のアドレスを取得します.... 成功 3559: IDXGIFactory1 を作成します.... 成功 3612: API D3D11CreateDevice のアドレスを取得します.... 成功 3668: IDXGIAdapter を取得します.... 成功 3704: Direct3D 11 FeatureLevel 11_0 以上を対象とします 3718: ID3D11Device オブジェクトを取得します.... 成功 3776: IDXGIDevice1 を取得します.... 成功 3803: [ウインドウモード 1920x1080] 3816: IDXGISwapChain を作成します.... 成功 3839: IDXGIOutput を取得します.... 成功 3862: Graphics Device:Intel(R) HD Graphics 5500 3875: 画面のフォーマットは DXGI_FORMAT_R8G8B8A8_UNORM です 3887: 16bit Zバッファフォーマットは DXGI_FORMAT_D16_UNORM です 3899: 24bit Zバッファフォーマットは DXGI_FORMAT_D24_UNORM_S8_UINT です 3911: 32bit Zバッファフォーマットは DXGI_FORMAT_D32_FLOAT です 3922: カラーフォーマットは DXGI_FORMAT_R8G8B8A8_UNORM です 3932: DXT1テクスチャフォーマットは DXGI_FORMAT_BC1_UNORM です 3944: DXT2テクスチャフォーマットは使えません 3960: DXT3テクスチャフォーマットは DXGI_FORMAT_BC2_UNORM です 3972: DXT4テクスチャフォーマットは使えません 3986: DXT5テクスチャフォーマットは DXGI_FORMAT_BC3_UNORM です 4002: ABGR 整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_UNORM です 4016: ABGR 浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_FLOAT です 4032: ABGR 浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32G32B32A32_FLOAT です 4045: 1チャンネル整数 8 ビット型カラーフォーマットは DXGI_FORMAT_R8_UNORM です 4061: 1チャンネル整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16_UNORM です 4076: 1チャンネル浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16_FLOAT です 4094: 1チャンネル浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32_FLOAT です 4119: 2チャンネル整数 8 ビット型カラーフォーマットは DXGI_FORMAT_R8G8_UNORM です 4132: 2チャンネル整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16_UNORM です 4143: 2チャンネル浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16_FLOAT です 4153: 2チャンネル浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32G32_FLOAT です 4165: 描画用 16bit カラーフォーマットは DXGI_FORMAT_B5G6R5_UNORM です 4177: 描画用 32bit カラーフォーマットは DXGI_FORMAT_B8G8R8X8_UNORM です 4193: 描画用アルファ付き 32bit カラーフォーマットは DXGI_FORMAT_R8G8B8A8_UNORM です 4209: 描画用 ABGR 整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_UNORM です 4225: 描画用 ABGR 浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_FLOAT です 4238: 描画用 ABGR 浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32G32B32A32_FLOAT です 4255: 描画用1チャンネル整数 8 ビット型カラーフォーマットは DXGI_FORMAT_R8_UNORM です 4274: 描画用1チャンネル整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16_UNORM です 4292: 描画用1チャンネル浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16_FLOAT です 4308: 描画用1チャンネル浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32_FLOAT です 4328: 描画用2チャンネル整数 8 ビット型カラーフォーマットは DXGI_FORMAT_R8G8_UNORM です 4354: 描画用2チャンネル整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16_UNORM です 4368: 使用する機能レベル:D3D_FEATURE_LEVEL_11_1 4380: 同時にレンダリングできるバッファの数:8 4391: 最大テクスチャサイズ 幅:16384 高さ:16384 4403: 標準描画用の頂点バッファの作成.... 成功 4423: 深度バッファを作成します.... 成功 4447: シェーダーコード関係の初期化.... 成功 4634: 各種シェーダー用定数バッファの作成.... 成功 4658: 各種 ID3D11InputLayout の作成.... 成功 4726: 画像の単純転送処理の初期化... 成功 4753: フォントの初期化を行います 4767: フォントの初期化は正常に終了しました 4779: 文字コードバッファの初期化を行います... 完了しました 4805:DXライブラリの初期化処理終了 8074:復元関数が登録されていないためか画面が24ビットカラーに変更されたため終了します 8095:またはスクリーンが小さすぎるためか色ビット数の違いが大きいためか終了します 8411:ウインドウを閉じようとしています 8480:ウインドウが破棄されようとしています 8506:ソフトを終了する準備が整いました 8548:フォントの初期化を行います 8563:フォントの初期化は正常に終了しました 8614:d3d11.dll の解放 1 8660:dxgi.dll の解放 1 8700:Direct3D11 のオブジェクト数を出力 8722:Direct3D11 のオブジェクト合計数 : 0 8751:DirectInput 関連の終了処理... 完了 8788:DirectSound の終了処理は正常に終了しました 8879: 8890:Alloc memory dump 8902: Total size:0(0.000kb) Alloc num:0 8916: ここまで
メンテ
Re: 画面の回転でエラーが ( No.5 )
名前:管理人 日時:2016/08/07 04:34

ログの貼り付けありがとうございます DXライブラリはウインドウモードで実行中にデスクトップ画面の解像度が変更された場合は 「デスクトップ画面の縦・横いずれかの解像度よりソフトのウインドウのサイズが大きい場合はエラー終了する」 という処理を行っているのですが、ログを拝見する限りでは上記の条件に該当してしまって ソフトが終了しているようです( おそらくデスクトップが縦長の角度になった事によりソフトのウインドウの横サイズより デスクトップ解像度の横サイズの方が小さくなってしまっているのではないかと思います ) ただ、こちらの処理を外してソフトのウインドウがデスクトップ解像度の横サイズより大きくなってしまっても 問題なく動作することが確認できたので、上記の処理を外しました ( どうやら「デスクトップ画面の解像度よりソフトのウインドウのサイズが大きくなると正常に動作しない」のは DirectDraw7 や Direct3D7 を使用していた頃のことだったようです( 現在DXライブラリが使用している Direct3D のバージョンは 9 と 11 ) ) これでねこさんの環境で画面を回転させてもソフトが終了してしまわないようになったと思いますので、 よろしければお試しになってみてください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_DevCppTest.exe // Dev-C++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
メンテ
Re: 画面の回転でエラーが ( No.6 )
名前:ねこ(解決) 日時:2016/08/08 17:51

無事に動くことを確認しました ご対応ありがとうございました
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存