マウスの左ボタンが押された後の最初のループでカーソルとウインドウの座標を記憶しておいて、
以降のループではマウスの左ボタンが離されるまで『記憶しておいたカーソルの座標』と
『現在のカーソルの座標』との差分に『記憶しておいたウインドウの座標』を足したものを使って
SetWindowPosition を実行するようにすると意図した挙動になると思います
透過ウインドウではありませんが、ウインドウのクライアント領域を左クリックで掴んで
移動することができるサンプルを組んでみましたので、よろしければご覧ください m(_ _)m
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int StartFlag = FALSE ;
POINT StartCursorPos ;
int StartWinX, StartWinY ;
POINT NowCursorPos ;
ChangeWindowMode(TRUE);
SetUseDirectInputFlag( FALSE ) ;
if( DxLib_Init() == -1)return -1;
SetDrawScreen( DX_SCREEN_BACK ) ;
// メインループ
while( ProcessMessage() == 0 )
{
ClearDrawScreen() ;
// マウスの左ボタンが押されているかで分岐
if( ( GetMouseInput() & MOUSE_INPUT_LEFT ) != 0 )
{
// 左ボタンが押されていたら現在のカーソルの位置を取得
GetCursorPos( &NowCursorPos ) ;
// 左ボタンが押されてから初めてのループかどうかで分岐
if( StartFlag == FALSE )
{
// 左ボタンが押されてから初めてのループの場合
// 左ボタンが押されてから初めてのループかどうかをチェックするためのフラグを立てる
StartFlag = TRUE ;
// 左ボタンが押され始めた時のカーソルの位置とウインドウの位置を保存
StartCursorPos = NowCursorPos ;
GetWindowPosition( &StartWinX, &StartWinY ) ;
}
else
{
// 左ボタンが押されてから初めてのループではない場合
// 左ボタンが押されてから初めてのループのときに保存しておいたカーソルの座標と、
// 現在のカーソルの座標の差分を左ボタンが押されてから初めてのループのときの
// ウインドウの位置に足す
SetWindowPosition(
StartWinX + NowCursorPos.x - StartCursorPos.x,
StartWinY + NowCursorPos.y - StartCursorPos.y
) ;
}
}
else
{
// 左ボタンが押されてなかったら『左ボタンが押されてから初めてのループか
// どうかをチェックするためのフラグ』を倒す
StartFlag = FALSE ;
}
ScreenFlip() ;
}
DxLib_End() ;
return 0 ;
}