Re: GetDesktopScreenGraph関数について ( No.1 ) |
- 名前:s8079 日時:2016/10/02 00:32
ディスプレイの拡大モードが原因でした。
大変お騒がせしました。
お時間があれば,ディスプレイの拡大モードにも対応していただけるとうれしいです。
|
Re: GetDesktopScreenGraph関数について ( No.2 ) |
- 名前:管理人 日時:2016/10/02 03:25
すみません、ディスプレイの拡大モードとは具体的にはどのようなものでしょうか?
よろしければOSのバージョンと、「コントロールパネルのこの項目から変更できる設定」などについて
教えてください m(_ _)m
|
Re: GetDesktopScreenGraph関数について ( No.3 ) |
- 名前:s8079 日時:2016/10/02 13:26
コントロールパネル→デスクトップのカスタマイズ→ディスプレイの
「項目のサイズの変更」にある「カスタムの拡大率を設定」で変更できます。
|
Re: GetDesktopScreenGraph関数について ( No.4 ) |
- 名前:管理人 日時:2016/10/03 01:56
|
Re: GetDesktopScreenGraph関数について ( No.5 ) |
- 名前:s8079 日時:2016/10/03 22:47
動作確認しました。
対応ありがとうございました。
もう少し欲を言わせていただきますとその拡大率を取得することはできないでしょうか。
以下のサイトを参考にWinAPIを用いて取得してみましたが,結果が変化しませんでした。
msdn.microsoft.com/ja-jp/library/windows/desktop/ff684173(v=vs.85).aspx
|
Re: GetDesktopScreenGraph関数について ( No.6 ) |
- 名前:管理人 日時:2016/10/04 00:48
拡大率を取得、ですか…
どのような用途の為でしょうか?
普通に作成したソフトウエアは拡大率を無視して実ピクセル単位のサイズで動作するので、
拡大率を取得できる意味はあまりなさそうですが…
|
Re: GetDesktopScreenGraph関数について ( No.7 ) |
- 名前:s8079 日時:2016/10/04 01:56
例えば,GetDesktopScreenGraph関数で全画面を取得しようとするとき,
引数には画面右端の座標が必要になります。
しかし,WinAPI等を用いて画面右端を取得すると,
拡大率の影響で実際より小さな値となってしまいます。
そこで,拡大率を取得して補正してあげることで,全画面を取得しようというわけです。
一考していただけないでしょうか。
|
Re: GetDesktopScreenGraph関数について ( No.8 ) |
- 名前:管理人 日時:2016/10/05 00:03
既存の GetDefaultState という関数で拡大率に影響されない全画面のサイズを取得することができます
// 起動時のデスクトップの画面情報を取得する
// SizeX : デスクトップの横解像度を格納する変数のアドレス
// SizeY : 縦解像度を格納する変数のアドレス
// ColorBitDepth : 画面カラービット数を格納する変数のアドレス
// RefreshRate : デスクトップのリフレッシュレートを格納する変数のアドレス
// LeftTopX : デスクトップの左上X座標を格納する変数のアドレス
// LeftTopY : デスクトップの左上Y座標を格納する変数のアドレス
int GetDefaultState(
int *SizeX ,
int *SizeY ,
int *ColorBitDepth,
int *RefreshRate ,
int *LeftTopX ,
int *LeftTopY
) ;
不要な項目は NULL を指定することができますので、デスクトップの縦横のサイズだけ取得したい場合は
int SizeX, SizeY ;
GetDefaultState( &SizeX, &SizeY, NULL, NULL, NULL, NULL ) ;
としてください
|
Re: GetDesktopScreenGraph関数について ( No.9 ) |
- 名前:s8079 日時:2016/10/05 02:30
返信ありがとうございます。
早速試させていただきました。
残念ながら,結果は変わらず,拡大率の影響を受けてしまいました。
どうにかならないでしょうか。
|
Re: GetDesktopScreenGraph関数について ( No.10 ) |
- 名前:管理人 日時:2016/10/06 02:19
すみません、テスト時の拡大率設定が正しくなかったようです、その後手元でも拡大率の影響を
受けてしまっていることを確認しました
拡大率を取得する機能の代わりに GetDefaultState に拡大率の影響を受けない全画面のサイズを
取得するための引数を追加しましたので、よろしければこちらをダウンロードしてください 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)」をして下さい)
追加した引数は PixelSizeX と PixelSizeY です
// 起動時のデスクトップの画面情報を取得する
// SizeX : デスクトップの横解像度を格納する変数のアドレス
// SizeY : 縦解像度を格納する変数のアドレス
// ColorBitDepth : 画面カラービット数を格納する変数のアドレス
// RefreshRate : デスクトップのリフレッシュレートを格納する変数のアドレス
// LeftTopX : デスクトップの左上X座標を格納する変数のアドレス
// LeftTopY : デスクトップの左上Y座標を格納する変数のアドレス
// PixelSizeX : OSの拡大率設定の影響を受けないデスクトップの横解像度を格納する変数のポインタ
// PixelSizeY : OSの拡大率設定の影響を受けないデスクトップの縦解像度を格納する変数のポインタ )
int GetDefaultState(
int *SizeX,
int *SizeY,
int *ColorBitDepth,
int *RefreshRate,
int *LeftTopX,
int *LeftTopY,
int *PixelSizeX,
int *PixelSizeY
) ;
拡大率の影響を受けないデスクトップ画面のサイズを取得する場合は
int PixelSizeX, PixelSizeY ;
GetDefaultState( NULL, NULL, NULL, NULL, NULL, NULL, &PixelSizeX, &PixelSizeY ) ;
としてください
 |
Re: GetDesktopScreenGraph関数について ( No.11 ) |
- 名前:s8079 日時:2016/10/06 12:14
動作確認しました。
理想の動きです。
対応ありがとうございました。
これからもDxLibを愛用させていただきます。
|