言葉での説明が難しいのでソースと実行画面の写真を貼らせて頂きます。
写真:http://www.dotup.org/uploda/www.dotup.org4062538.jpg
LoadSoftImageで読み込んだ"./win.png"(黒色で四角の画像)をスクリーン座標(0,0)に表示させる意図なのですが、実行すると写真のようにY座標が27ドットずれます。
また表示位置には問題のないX座標も、GetMousePoint()で取得したX座標数値が5ドットずれています。写真ではスクリーンX座標0を指しているのですが-5となっております。
この5と27のズレはどうもウィンドウの枠のサイズとタイトルバーのサイズの分というのは理解できたのですが…
意図した動作を実現するのに何か方法がありましたらお教え頂けると助かります。
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE,LPSTR lpCmdLine,int)
{
SetUseBackBufferTransColorFlag(true);
if ( SetGraphMode( 640, 480, 32 ) != DX_CHANGESCREEN_OK ) return 1;
if ( ChangeWindowMode( true ) != DX_CHANGESCREEN_OK ) return 1;
if ( DxLib_Init() ) return 1;
if ( SetDrawScreen( DX_SCREEN_BACK ) ) return 1;
int gHandle = LoadSoftImage( "./win.png" );
SetTransColor(255,10,10);
SetBackgroundColor( 255, 10, 10 );
int SofH = MakeARGB8ColorSoftImage( 640, 480 );
int CapH = MakeXRGB8ColorSoftImage( 640, 480 );
//SetWindowStyleMode(2);//2にするとX座標の問題はなし、ただしY座標が27ずれる
SetWindowPos( GetMainWindowHandle(), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE );
while( ClearDrawScreen(),ProcessMessage() == 0 )
{
int x=0, y=0;
GetMousePoint( &x, &y );
DrawFormatString( 0, 0, GetColor(255,255,255), "x%d,y%d", x, y );
FillSoftImage( SofH, 0, 0, 0, 0 );
BltSoftImage( 0, 0, 640, 480, gHandle, 0, 0, SofH );
GetDrawScreenSoftImage( 0, 0, 640, 480, CapH );
BltSoftImageWithTransColor( 0, 0, 640, 480, CapH, 0, 0, SofH, 255, 10, 10, 0 );
UpdateLayerdWindowForSoftImage( SofH );
}
DxLib_End();
return 0;
}