2008-10-03 140 views
8

什麼是簡單的方式來實現一個C++的Win32程序...
- 顯示一個800x600x24未壓縮的位圖圖像
- 在一個窗口無國界(唯一可見的是圖像)
- 這10秒
後關閉 - 和不使用MFC最快的方式

回答

1

您可以:

  • 在資源文件中創建一個對話框
  • 有它包含畫面控制
  • 設置圖片控件類型爲位圖
  • 創建/導入位圖資源文件並將該位圖ID設置爲對話框中的圖片控件
  • 使用CreateDialogParam創建窗口
  • H andle的WM_INITDIALOG以便設置10秒(使用SetTimer的)
  • 手柄WM_TIMER定時器趕上你的計時器事件,並銷燬窗口(調用DestroyWindow)
1
  • 使用的LoadImage加載位圖
  • 使用CreateWindowEx創建窗口。
  • 在窗口proc中捕獲WM_PAINT。使用BitBlt來繪製位圖。
2

註冊爲啓動窗口類,並使用這些樣式創建一個窗口:

  • WS _ POPUPWINDOW:將確保你的窗口沒有標題/ SYSMENU
  • WS _ EX _ TOPMOST:將保持啓動畫面的一切。請注意,這有點侵入性。將飛濺窗口設置爲主窗口的子窗口可能會更好。不過,您可能必須操縱z順序,以便在啓動屏幕下方保留任何其他彈出窗口(如果您創建了任何窗口)。

使用CreateDIBSection加載位圖。應該很容易,因爲BMP文件基本上是DIB結構的轉儲。或者做Ken說的並使用LoadImage。

處理WM _ PAINT或WM _ ERASEBKGND消息在窗口上繪製位圖。

On WM _ CREATE設置一個10秒的計時器,當Windows發送WM _ TIMER消息時,讓窗口自行銷燬。

2

這裏的關鍵是使用layered window

你可以用一個Win32嚮導生成項目的啓動,改變CreateWindow的調用CreateWindowEx,並作爲WS_EX_LAYERED擴展窗口風格WS_POPUP和WS_SYSMENU作爲窗口樣式的組合集。當你這樣做啓動你的應用程序時,它將不可見。那麼你應該使用UpdateLayeredWindow來繪製你的圖像。如果你想使用alpha圖層的PNG圖像,你可能還需要AlphaBlend函數。

希望這會有所幫助!

1

這是一個Win32 API的常見問題

查看專業Win32API的論壇 消息://194.177.96.26/comp.os.ms-windows.programmer.win32 它已經回答了上百次了20年。 。

6

如果你針對Windows的現代版本(Windows 2000)及更高版本,您可以使用UpdateLayeredWindow函數來顯示任何位圖(如果需要,可顯示包含alpha通道的位圖)。

I blogged a four-part series關於如何編寫這樣做的C++ Win32應用程序。如果您需要等待十秒鐘才能關閉啓動畫面(而不是直到主窗口準備就緒),則需要使用Dan Cristoloveanu建議的調用DestroyWindow的計時器技術。