質問からさせていただきますとデスクトップマスコットを作る上で、他のウィンドウで作業をする場合に、デスクトップマスコットの移動等の処理を止めずに済む方法はありますでしょうか?
自分は今、お遊び程度の感覚でデスクトップマスコットの作り方を調べ、プログラムを組んでいます。簡易的でしかないので、適当な挙動をつけてウィンドウを透明化、常に手前に表示するくらいでしかないのですが、他のアプリケーションを触ってしまうとどうやら処理が止まってしまうらしく、自分の思っていたようなものになりませんでした。再度、制作したデスクトップマスコットをクリックすると処理が始まったことから、別のウィンドウで作業している間は処理を一時停止させているものかと思われます。これを阻止する方法はあるのでしょうか。
#include <DxLib.h>
static const int SCREEN_SIZE_W = 1370;
static const int SCREEN_SIZE_H = 940;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
DxLib::ChangeWindowMode(TRUE);
DxLib::SetGraphMode(SCREEN_SIZE_W, SCREEN_SIZE_H, 32);
DxLib::SetWindowStyleMode(2);
DxLib::SetUseBackBufferTransColorFlag(TRUE);
if (DxLib::DxLib_Init() != 0)
{
return -1;
}
const int omoteHandle = DxLib::MakeRGB8ColorSoftImage(SCREEN_SIZE_W, SCREEN_SIZE_H);
DxLib::SetDrawScreen(DX_SCREEN_BACK);
const int graphHandle = DxLib::LoadGraph("Test.png", TRUE);
int x = 0;
int y = 0;
int counter = 0;
HWND hWnd = GetMainWindowHandle();
SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
while (ProcessMessage()==0&&ClearDrawScreen()==0&&CheckHitKey(KEY_INPUT_ESCAPE)==0)
{
if (CheckHitKey(KEY_INPUT_UP)) {
y-=20;
}
if (CheckHitKey(KEY_INPUT_LEFT)) {
x-=20;
}
if (CheckHitKey(KEY_INPUT_RIGHT)) {
x+=20;
}
if (CheckHitKey(KEY_INPUT_DOWN)) {
y+=20;
}
counter++;
x += 15 - (counter % 30);
DxLib::DrawGraph(x, y, graphHandle, TRUE);
DxLib::GetDrawScreenSoftImage(0, 0, SCREEN_SIZE_W, SCREEN_SIZE_H, omoteHandle);
DxLib::UpdateLayerdWindowForSoftImage(omoteHandle);
}
DeleteGraph(graphHandle);
DeleteGraph(omoteHandle);
DxLib_End();
return 0;
}
フォーラムルールには一通り目を通したつもりですが、不備ありましたらご指摘ください。