デスクトップマスコットの作り方について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ガーネット

デスクトップマスコットの作り方について

#1

投稿記事 by ガーネット » 7年前

C言語に触れて半年くらいで、ポインタやメモリ管理等の概念はある程度理解しているつもりの者です。

質問からさせていただきますとデスクトップマスコットを作る上で、他のウィンドウで作業をする場合に、デスクトップマスコットの移動等の処理を止めずに済む方法はありますでしょうか?

自分は今、お遊び程度の感覚でデスクトップマスコットの作り方を調べ、プログラムを組んでいます。簡易的でしかないので、適当な挙動をつけてウィンドウを透明化、常に手前に表示するくらいでしかないのですが、他のアプリケーションを触ってしまうとどうやら処理が止まってしまうらしく、自分の思っていたようなものになりませんでした。再度、制作したデスクトップマスコットをクリックすると処理が始まったことから、別のウィンドウで作業している間は処理を一時停止させているものかと思われます。これを阻止する方法はあるのでしょうか。

コード:

#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;
}
パソコンに関する知識がまだ浅く、うまく言語化できていない点がありますがお願いします。
フォーラムルールには一通り目を通したつもりですが、不備ありましたらご指摘ください。

かずま

Re: デスクトップマスコットの作り方について

#2

投稿記事 by かずま » 7年前

ガーネット さんが書きました:
7年前
デスクトップマスコットを作る上で、他のウィンドウで作業をする場合に、デスクトップマスコットの移動等の処理を止めずに済む方法はありますでしょうか?
whileループに入る前に、SetAlwaysRunFlag(TRUE); を実行してみてください。

ガーネット

Re: デスクトップマスコットの作り方について

#3

投稿記事 by ガーネット » 7年前

かずま さんが書きました:
7年前
whileループに入る前に、SetAlwaysRunFlag(TRUE); を実行してみてください。
解決しました。ありがとうございます

返信

“C言語何でも質問掲示板” へ戻る