トップページ > 記事閲覧
GetDisplayMode関数の挙動について
名前:Citrine 日時: 2019/02/05 00:43

いつもお世話になっております。 GetDisplayMode関数の挙動で少し疑問があったためスレッドを立てさせていただきました。 下記のソースコードで対応している画面モードの取得、列挙をするプログラムを作成し実行したところ、 同じ解像度、周波数が2,3つほど重複して取得されました。 グラフィックボードのプロパティでは重複していませんでしたが、この挙動は仕様なのでしょうか? --- 以下ソースコード --- #include "DxLib.h" #include <vector> int WINAPI _tWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPTSTR lpCmdLine, _In_ int nShowCmd) { SetGraphMode(1920, 1080, 32); ChangeWindowMode(TRUE); if (DxLib_Init() != 0) { return -1; } SetDrawScreen(DX_SCREEN_BACK); std::vector<DISPLAYMODEDATA> mode; mode.resize(GetDisplayModeNum(0)); for (int i = 0; i < mode.size(); i++) { mode.at(i) = GetDisplayMode(i, 0); } while (ProcessMessage() == 0) { ClearDrawScreen(); for (int i = 0; i < mode.size(); i++) { DrawFormatString(0, i * 18, GetColor(0xFF, 0xFF, 0xFF), _T("%dx%d %dbit %dHz"), mode.at(i).Width, mode.at(i).Height, mode.at(i).ColorBitDepth, mode.at(i).RefreshRate); } ScreenFlip(); } DxLib_End(); return 0; } --- ソースコードここまで --- --- 実行結果 --- 640x480 32bit 59Hz 640x480 32bit 60Hz 720x480 32bit 60Hz 720x480 32bit 59Hz 720x576 32bit 60Hz 720x576 32bit 60Hz 720x576 32bit 60Hz 800x600 32bit 60Hz 1024x768 32bit 60Hz 1152x864 32bit 59Hz 1152x864 32bit 60Hz 1176x664 32bit 60Hz ※重複箇所 1176x664 32bit 60Hz 1176x664 32bit 60Hz 1176x664 32bit 59Hz 1176x664 32bit 59Hz 1176x664 32bit 59Hz 1280x720 32bit 60Hz 1280x720 32bit 59Hz 1280x768 32bit 60Hz 1280x768 32bit 60Hz 1280x800 32bit 60Hz 1280x960 32bit 60Hz ※ 1280x960 32bit 60Hz 1280x960 32bit 60Hz 1280x1024 32bit 60Hz 1360x768 32bit 60Hz 1360x768 32bit 60Hz 1360x768 32bit 60Hz 1366x768 32bit 60Hz 1366x768 32bit 60Hz 1366x768 32bit 60Hz 1600x900 32bit 60Hz 1600x1024 32bit 60Hz 1600x1024 32bit 60Hz 1600x1024 32bit 60Hz 1600x1024 32bit 59Hz 1600x1024 32bit 59Hz 1600x1024 32bit 59Hz 1600x1200 32bit 59Hz ※ 1600x1200 32bit 60Hz 1600x1200 32bit 59Hz 1600x1200 32bit 60Hz 1600x1200 32bit 59Hz 1600x1200 32bit 60Hz 1680x1050 32bit 60Hz 1680x1050 32bit 60Hz 1680x1050 32bit 60Hz 1680x1050 32bit 59Hz 1680x1050 32bit 59Hz 1680x1050 32bit 59Hz 1768x992 32bit 60Hz 1768x992 32bit 60Hz 1768x992 32bit 60Hz 1768x992 32bit 59Hz 1768x992 32bit 59Hz 1768x992 32bit 59Hz 1920x1080 32bit 60Hz 1920x1080 32bit 59Hz 1920x1200 32bit 59Hz ※ 1920x1200 32bit 60Hz 1920x1200 32bit 59Hz 1920x1200 32bit 60Hz 1920x1200 32bit 59Hz 1920x1200 32bit 60Hz 1920x1440 32bit 59Hz 1920x1440 32bit 60Hz 1920x1440 32bit 59Hz 1920x1440 32bit 60Hz 1920x1440 32bit 59Hz 1920x1440 32bit 60Hz 2048x1536 32bit 60Hz ※ 2048x1536 32bit 60Hz 2048x1536 32bit 60Hz 2048x1536 32bit 30Hz 2048x1536 32bit 30Hz 2048x1536 32bit 30Hz 2560x1440 32bit 59Hz 2560x1440 32bit 60Hz 2560x1600 32bit 60Hz 2560x1600 32bit 60Hz 2560x1600 32bit 60Hz 2560x1600 32bit 30Hz 2560x1600 32bit 30Hz 2560x1600 32bit 30Hz 3840x2160 32bit 60Hz 3840x2160 32bit 30Hz --- 実行結果ここまで --- 実行環境 OS: Windows 10 Ver.1809 x64 CPU: Intel Core i7-4770 RAM: 8GB GPU: NVIDIA GeForce GTX760
メンテ

Page: 1 |

Re: GetDisplayMode関数の挙動について ( No.2 )
名前:管理人 日時:2019/02/05 23:54

> グラフィックボードのプロパティでは重複していませんでしたが、この挙動は仕様なのでしょうか? いえ、仕様ではなくバグです 重複しないように修正したバージョンをアップしましたので、よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.2 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい) > jTickerさん ご情報ありがとうございます > 根拠なしの なんとなーーーーーくですが、同関数内で DevMode.dmDefaultSource == 0 の時のみ > 列挙するのがよいのかも(?)しれません。(こうすると重複はないっぽい) ご提案いただいた処理も検討したのですが、OSのバージョンが変更となった場合に DevMode.dmDefaultSource == 0 同士で重複するような場合も発生するかもしれないので シンプルに『列挙済みの要素と比較して重複していたら除外する』という処理にしました
メンテ
Re: GetDisplayMode関数の挙動について ( No.3 )
名前:Citrine(解決) 日時:2019/02/06 23:37

取得結果が重複しないことを確認しました。 お忙しい中の対応ありがとうございます。
メンテ

Page: 1 |

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

   クッキー保存