いつもDXライブラリに大変お世話になっております。
「3D機能をオフ」にして「ウィンドウを最大化」したとき、
マウス座標が画面とずれる現象を確認いたしましたのでご報告します。
別の言い方をすると、
「ウィンドウ最大化時、3D機能のオンオフによって画面の表示位置が変わってしまう現象」
なのですが、困っているのはマウス座標が見た目と変わってしまう点です。
使用したDXライブラリはWindows版の3.23です。
私の指定の方法などに問題があるかもしれませんが、
よければご確認いただけますと幸いです。
<再現スクリーンショット>
以下URLが再現画像です。
画像の上側が、再現ソース(後述)そのままの「3D機能オフ」の場合、
下側が「3D機能オン」(SetUse3DFlag( FALSE );をコメントアウト)で実行した場合です。
silversecond.com/tmp/20220104_DxLibTest.jpg
下側は期待通りのマウス座標になっていますが、
上側は見た目上は画面上にカーソルがあるように見えるにも関わらず
マウス座標が「マイナス」になっているのが分かると思います。
<再現ソース>
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
SetUse3DFlag( FALSE ); // 3D機能をオフ ※この行をコメントアウトすると期待する動作になります
ChangeWindowMode(TRUE) ; // ウィンドウモードに
if( DxLib_Init() == -1 ){ return -1;} // DXライブラリ初期化処理
SetDrawScreen( DX_SCREEN_BACK );
SetMouseDispFlag( TRUE ); //マウスカーソルを表示(位置確認用)
SetGraphMode(480 , 480 , 32 ); // 拡大時の黒埋め部分が出てきやすいように480x480に
SendMessage( GetMainWindowHandle() , WM_SYSCOMMAND , SC_MAXIMIZE , NULL ); // ウィンドウ最大化
char str[256];
int MouseX,MouseY;
// ESCを押すまでループ
while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0){
DrawBox(0, 0, 480, 480, GetColor(200,120,120), TRUE );
GetMousePoint( &MouseX, &MouseY );
sprintf( str , "マウス座標X %d Y %d", MouseX, MouseY);
DrawString( 30 , 230 , str , GetColor( 255,255,255) ) ;//マウス座標を表示
WaitTimer(16);
ScreenFlip();
}
DxLib_End() ; // DXライブラリ使用の終了
return 0 ; // ソフトの終了
}