簡単なスプラッシュウィンドウの作り方

Windows SDK でスプラッシュを表示するプログラム。
探したけど見つからないな・・・ということで書いてみた。



普通に CreateDialog して表示すると描画されないんだな ・ω・

STYLE DS_SETFONT | DS_SETFOREGROUND | DS_NOFAILCREATE | DS_CENTER | WS_POPUP
EXSTYLE WS_EX_TOPMOST | WS_EX_TOOLWINDOW | WS_EX_STATICEDGE
BEGIN
    CONTROL         139,IDC_STATIC,"Static",SS_BITMAP,0,0,400,300
END

とりあえずリソースのフラグこんな感じ・ω・

  _beginthread(ThreadSplash,0,0);

WinMain の後でこの処理を呼ぶ

#include <process.h>

int THRD_FLG=0;
HWND HWNDSPL=NULL;
int CALLBACK SPLWnd(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
 switch (message)
    {
    case WM_INITDIALOG:
        THRD_FLG=1;
        HWNDSPL=hDlg;
        ShowWindow(hDlg,SW_SHOW);
        return true;
     }
     return (INT_PTR)FALSE;
}

void ThreadSplash(void *datax) {
    MSG msg;
  CreateDialogA(hInst, MAKEINTRESOURCEA(IDD_SPLASH), 0, SPLWnd);            
  while (GetMessage(&msg, HWNDSPL, 0, 0))
    {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            if(THRD_FLG==2)break;
    }
    _endthread();
}

マルチスレッドにして、スプラッシュ用の窓は描画させる仕組み

THRD_FLG=2;
EndDialog(HWNDSPL);

プログラムの初期化が終わってスプラッシュを引っ込める時に上の処理を呼ぶ。

単に ○ 秒間無意味にスプラッシュを表示したままにするだったら、マルチスレッドにしなくても、CreateDialogの後メッセージループ回すだけなんで、もっと、簡単だったんだけどね・ω・;

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です