实现C ++ Win32启动画面的最快方法

时间:2008-10-03 16:27:13

标签: c++ winapi

将c ++ Win32程序实现为...的简单方法是什么? - 显示800x600x24未压缩位图图像
- 在没有边框的窗口中(唯一可见的是图像)
- 十秒钟后关闭 - 并且不使用MFC

6 个答案:

答案 0 :(得分:6)

如果您的目标是Windows(Windows 2000)及更高版本的现代版本,则可以使用UpdateLayeredWindow功能显示任何位图(包括带有Alpha通道的位图,如果需要)。

blogged a four-part series关于如何编写执行此操作的C ++ Win32应用程序。如果您需要等待十秒钟才能关闭启动画面(而不是在主窗口准备就绪之前),您需要使用Dan Cristoloveanu建议的调用DestroyWindow的计时器技术。

答案 1 :(得分: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 :(得分:2)

这里的关键是使用layered window

您可以从win32向导生成的项目开始,将CreateWindow调用更改为CreateWindowEx,并将WS_EX_LAYERED设置为扩展窗口样式,并将WS_POPUP和WS_SYSMENU组合为窗口样式。当你这样做启动你的应用程序时,它将是隐形的。然后你应该使用UpdateLayeredWindow来绘制你的图像。如果您想使用带有alpha图层的PNG图像,则可能还需要AlphaBlend功能。

希望这有帮助!

答案 3 :(得分:1)

  • 使用LoadImage加载位图
  • 使用CreateWindowEx创建窗口。
  • 在窗口proc中捕获WM_PAINT。使用BitBlt绘制位图。

答案 4 :(得分:1)

这是一个Win32 api FAQ

查看专业的Win32api论坛 新闻://194.177.96.26/comp.os.ms-windows.programmer.win32 20年来它被回答了数百次。

答案 5 :(得分:1)

你可以:

  • 在资源文件中创建一个对话框
  • 让它包含Picture控件
  • 将图片控件类型设置为位图
  • 在资源文件中创建/导入位图,并将该位图ID设置为对话框中的图片控件
  • 使用CreateDialogParam
  • 创建窗口
  • 处理WM_INITDIALOG以将计时器设置为10秒(使用SetTimer)
  • 处理WM_TIMER以捕获您的计时器事件并销毁窗口(使用DestroyWindow)