2008-10-03 94 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的计时器技术。