啟動畫面本質是無標題彈出視窗(WS_POPUP),繼承 CWnd。特效採用「隨機積木法」:將位圖切成 20×20=400 區塊,隨機順序以 StretchBlt 複製到目標 DC,形成拼圖漸現效果。

CLjxWnd 實作CDC MemDC; // 記憶體 DC
BITMAP bm; // 位圖資訊
CBitmap m_bmp; // 位圖物件
CBitmap* old_bmp;
m_bmp.LoadBitmap(IDB_BITMAP1);
m_bmp.GetBitmap(&bm); // 取得寬高
CreateEx(0, AfxRegisterWndClass(0, AfxGetApp()->LoadStandardCursor(IDC_ARROW)),
"animatesplash", WS_POPUP, 0,0, bm.bmWidth, bm.bmHeight, NULL, NULL, NULL);
OnPaint 隨機積木演算法MemDC.CreateCompatibleDC(NULL);
old_bmp = MemDC.SelectObject(&m_bmp);
int stepX = bm.bmWidth / 20, stepY = bm.bmHeight / 20;
int shown[20][20] = {0}, count = 0;
srand((unsigned)time(NULL));
while (count < 400) {
int x = rand() % 20, y = rand() % 20;
if (shown[x][y]) continue;
shown[x][y] = 1;
dc.StretchBlt(x*stepX, y*stepY, stepX, stepY,
&MemDC, x*stepY, y*stepY, stepX, stepY, SRCCOPY);
count++; Sleep(10);
}
MemDC.SelectObject(old_bmp);
BOOL CMyApp::InitInstance() {
// ... 標準初始化 ...
CLjxWnd* pSplash = new CLjxWnd;
pSplash->CreateLjxWnd();
pSplash->CenterWindow();
pSplash->ShowWindow(SW_SHOW);
pSplash->UpdateWindow(); // 觸發 OnPaint
Sleep(2000); // 停留 2 秒
pSplash->SendMessage(WM_CLOSE);
delete pSplash;
CMyDlg dlg; m_pMainWnd = &dlg; dlg.DoModal();
return FALSE;
}