DXライブラリとScreenSaverライブラリを併用したスクリーンセーバー製作について

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

DXライブラリとScreenSaverライブラリを併用したスクリーンセーバー製作について

#1

投稿記事 by SKB » 6年前

昨日はお世話になりました。
引き続きスクリーンセーバー製作を進め、いよいよDXライブラリを使って画像読み込み等してみたのですが、うまくいきませんでした。
そこで、色々削って、単純に「DXライブラリを初期化して終了するスクリーンセーバー」を作ろうと思ったのですが、何やらDxLib_init()が正しく動いていないようなのです。
(DXライブラリ初期化を行わず、ただの何もない真っ黒なスクリーンセーバーを表示することには成功しています。)
以下、コードです。

コード:

#include <windows.h>
#include <scrnsave.h>
#include "DxLib.h"

//スクリーンセーバーを作るためのライブラリ
#pragma comment(lib,"scrnsave.lib")
#pragma comment(lib, "comctl32.lib")
#define ID_TIMER 32767

LRESULT WINAPI ScreenSaverProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
        case WM_CREATE:
            //起動処理
		//DXライブラリ初期化
		if(DxLib_Init()==-1)
		{
			return -1;    //エラーが起きたら終了
		}
			
	         break;
 
	case WM_TIMER:
			if(ProcessMessage()==-1) return -1;
                        break;

        case WM_DESTROY:
            //終了処理
			
			DxLib_End(); //DXライブラリ終了処理
			return 0;
 
        default:
            break;
    }
 
    return DefScreenSaverProc(hWnd, msg, wParam, lParam);
}
 
BOOL WINAPI ScreenSaverConfigureDialog(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
    return FALSE;
}
 
BOOL WINAPI RegisterDialogClasses(HANDLE hInst)
{
    return TRUE;
}
色々調べたところ、そもそもDxLib_init関数はWinMain関数内で呼ばなければならないということが分かりました。
しかし、ScreenSaverライブラリの内部にWinMain関数が存在しているとのことで、結局どうすればいいのかが分かりません。

上述のコードをビルドして実行すると、数秒後に画面が暗転するのですが、スクリーンセーバーなのにマウスやキーを操作しても終了せず、タスクマネージャーで確認すると応答なしになっており、数秒するとプログラムの停止メッセージが出てきてしまいます。
pngファイルを読み込み、回転等させたいのでDXライブラリの使用を検討したのですが、ScreenSaverライブラリとの併用は難しいのでしょうか?
アドバイスよろしくお願いいたします。

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