質問
(:GetDeviceCapsを使用して)Windowsで画面のDPIを取得する場合、水平値は常に垂直値と同じですか?例:
HDC dc = ::GetDC(NULL);
const int xDPI = ::GetDeviceCaps(dc, LOGPIXELSX);
const int yDPI - ::GetDeviceCaps(dc, LOGPIXELSY);
assert(xDPI == yDPI);
::ReleaseDC(NULL, dc);
これらの値はこれまでと異なりますか?
解決
異なる場合もありますが、一般的にはプリンターにのみ適用されます。画面は常に同一の水平および垂直DPIを持っていると想定できます。
他のヒント
これらが異なることは一度もありませんが、この MSDNページには、次のような可能性があることを示唆するコメントが表示されます。
int nHorz = dc.GetDeviceCaps(LOGPIXELSX);
int nVert = dc.GetDeviceCaps(LOGPIXELSY);
// almost always the same in both directions, but sometimes not!
それらが異なるケースは見たことがありませんが、2つの別個の呼び出しがあるという事実は、それらが時々ある可能性があることを強く示唆しています。
16:9ディスプレイの1600x1200のような4:3解像度など、物理的な画面の比率とは異なる画面解像度の比率を使用するようにモニターが設定されている場合、それらは簡単に異なります。
所属していません StackOverflow