HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
0610
ゆー高DPIについて3解決


ゆー

リンク

2018/6/10(Sun) 12:54:28|NO.84585

高DPIについて質問します。

#uselib "gdi32.dll" #cfunc GetDeviceCaps "GetDeviceCaps" int,int #uselib "user32.dll" #func SetProcessDPIAware "SetProcessDPIAware" #packopt hide 1 #define LOGPIXELSX $00000058 #define LOGPIXELSY $0000005A #define ctype XSIZ(%1) int(%1*XDPI/96) #define ctype YSIZ(%1) int(%1*YDPI/96) #define ctype SIZX(%1) int(%1/XDPI*96) #define ctype SIZY(%1) int(%1/YDPI*96) hginfo=ginfo(20) SetProcessDPIAware XDPI=GetDeviceCaps(hdc,LOGPIXELSX) YDPI=GetDeviceCaps(hdc,LOGPIXELSY) SetProcessDPIAware screen 0,XSIZ(640),YSIZ(480) font "MS ゴシック",YSIZ(16) mes hginfo mes SIZX(ginfo(20))
このときSetProcessDPIAware関数を呼び出す前、解像度Xが1366の場合、1093になります。
SetProcessDPIAware関数を呼び出す前と同じ値を取得したいと思っているのですが、どうすればいいのでしょうか?



この記事に返信する


あらや

リンク

2018/6/10(Sun) 14:22:31|NO.84586

>解像度Xが1366の場合、1093になります。
XDPIがどんな数字でも、96を掛けて1093になる整数は存在しないはずですが・・・
私がどこか読み間違えましたかね???


とりあえずですが
>#define ctype SIZX(%1) int(%1/XDPI*96)
>#define ctype SIZY(%1) int(%1/YDPI*96)
途中で除算を行なうと、小数点以下が切り捨てられてしまうので
除算を最後に回すとどうでしょうか?

#define ctype SIZX(%1) int(%1*96/XDPI) #define ctype SIZY(%1) int(%1*96/YDPI)



ゆー

リンク

2018/6/12(Tue) 19:47:36|NO.84600

あらやさん。
ありがとうございます。
計算ミスでした。
int(%1/XDPI*96)をint(%1*96/XDPI)に変えればよかったんですね。



ゆー

リンク

2018/6/12(Tue) 19:48:08|NO.84601

解決チェック忘れてました。



ONION software Copyright 1997-2021(c) All rights reserved.