透過ウィンドウを使ってソフトを作っていたのですが、マウスの座標が10px左にずれていて困っています…
原因・解決法等教えて頂きたいですm(__)m
ttps://dxlib.xsrv.jp/cgi/patiobbs/patio.cgi?mode=view&no=3384
上記で提示されているコードに背景とマウスの座標を描画する機能を加えただけでも確認しました。
背景は透過ウィンドウの範囲を分かりやすくするためのもので、黒1色塗りつぶしです。
#include"DxLib.h"
int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nShowCmd)
{
int GraphHandle;
int ScreenHandle;
int SoftImageHandle;
int PreMulAlphaFontHandle;
int SCREEN_W = 1408;
int SCREEN_H = 792;
int MouseX, MouseY;
// ウインドウモードで起動
ChangeWindowMode(TRUE);
// 透過ウインドウ設定
SetUseBackBufferTransColorFlag(TRUE);
// 画面サイズを設定
SetGraphMode(SCREEN_W, SCREEN_H, 32);
// DXライブラリの初期化
if (DxLib_Init() < 0) return -1;
// 描画対象にできるアルファチャンネル付き画面を作成
ScreenHandle = MakeScreen(SCREEN_W, SCREEN_H, TRUE);
// 描画結果取り込み用のソフトウエア用画像を作成
SoftImageHandle = MakeARGB8ColorSoftImage(SCREEN_W, SCREEN_H);
// 画像を読み込む際にアルファ値をRGB値に乗算するように設定する
SetUsePremulAlphaConvertLoad(TRUE);
// 画像の読み込み
GraphHandle = LoadGraph("BG.png");
// 画像を読み込む際にアルファ値をRGB値に乗算する設定を解除する
SetUsePremulAlphaConvertLoad(FALSE);
// 乗算済みアルファ対応のフォントハンドルを作成する設定にする
SetFontCacheUsePremulAlphaFlag(TRUE);
// アンチエイリアスつきフォントの作成
PreMulAlphaFontHandle = CreateFontToHandle(NULL, 32, 8, DX_FONTTYPE_ANTIALIASING_8X8);
// 乗算済みアルファ対応のフォントハンドルを作成する設定を解除する
SetFontCacheUsePremulAlphaFlag(FALSE);
// 透過色を紫に設定
// ( 透過色の部分が強制的に透過されてしまうため、使用されにくい色に設定 )
SetTransColor(255, 0, 255);
// 描画先をアルファチャンネルつき画面にする
SetDrawScreen(ScreenHandle);
// メインループ
while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0)
{
// 画面をクリア
ClearDrawScreen();
// 描画ブレンドモードを乗算済みアルファにセット
SetDrawBlendMode(DX_BLENDMODE_PMA_ALPHA, 255);
// 画像を描画
DrawGraph(0, 0, GraphHandle, TRUE);
// マウスの位置を取得
GetMousePoint(&MouseX, &MouseY);
// 文字列を描画
DrawFormatStringToHandle(550, 350, GetColor(0, 255, 0), PreMulAlphaFontHandle, "%d %d", MouseX, MouseY);
// 描画結果をソフトイメージに転送する
GetDrawScreenSoftImage(0, 0, SCREEN_W, SCREEN_H, SoftImageHandle);
// 取り込んだソフトイメージを使用して透過ウインドウの状態を更新する
UpdateLayerdWindowForPremultipliedAlphaSoftImage(SoftImageHandle);
}
// DXライブラリの後始末
DxLib_End();
// ソフトの終了
return 0;
}