えっと、すごい筋肉痛です。30分しか打ってないのに。
痛いのは、上腕・背中・首筋。首が回らない。
えっと、バグ発見です。マルチディスプレイに対応してなかったです。
プライマリモニタしか表示されない。
悪いのは::GetSystemMetrics()の引数。SM_CXSCREEN,SM_CYSCREENだとプライマリモニタのサイズしかわからない。正解はSM_XVIRTUALSCREEN, SM_YVIRTUALSCREEN, SM_CXVIRTUALSCREEN, SM_CYVIRTUALSCREEN。
SM_CXVIRTUALSCREEN, SM_CYVIRTUALSCREENだけでもいいような気がしたけど、プライマリモニタを右に持ってくると仮想スクリーン原点が(0,0)にならないので、SM_XVIRTUALSCREEN, SM_YVIRTUALSCREENも使いなさいね。ってことらしい。
で、コンパイルしようとしたんだけど定数が定義されていないといわれて失敗。調べてみるとwinuser.hにこんな風に書かれている。
#if(WINVER >= 0x0500)
#define SM_XVIRTUALSCREEN 76
#define SM_YVIRTUALSCREEN 77
#define SM_CXVIRTUALSCREEN 78
#define SM_CYVIRTUALSCREEN 79
#define SM_CMONITORS 80
#define SM_SAMEDISPLAYFORMAT 81
#endif /* WINVER >= 0x0500 */
調べてみるとWINVERの値は0x400になってた。あれ?
みつけた。
Using the Windows Headers
というわけで、0x0500を設定。::GetSystemMetrics()のリファレンスによるとSM_XVIRTUALSCREENはwindows 98/windows 2000以上となっているから、0x410のような気もするけどどうなんだろう。
逆にwindows 98未満で実行した場合はどうなるのかな。失敗は0を戻すらしいから、表示領域が空になって何も表示されなくなるのかな。
どっかで、windows 95や98が動いてないかな。
コメントする