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

10

如何简单实现一个c++ Win32程序,以显示一个800x600x24未压缩的位图图像,在一个没有边框的窗口中(唯一可见的是图像),在十秒后关闭,并且不使用MFC?

6个回答

7
如果你的目标是现代化版本的Windows(Windows 2000及以上),你可以使用UpdateLayeredWindow函数来显示任何位图(包括具有alpha通道的位图,如果需要的话)。
写了一个四部分系列文章,介绍如何编写一个C++ Win32应用程序来实现此功能。如果您需要等待确切的十秒钟以关闭闪屏界面(而不是等到主窗口就绪),您需要使用Dan Cristoloveanu建议的计时器技术调用DestroyWindow。

你的博客出现了404错误。请更新答案并包含相关细节。 - BrainSlugs83
@BrainSlugs83 已更新。 - Bradley Grainger

2

为启动窗口注册一个类并使用以下样式创建一个窗口:

  • WS_POPUPWINDOW:确保您的窗口没有标题/系统菜单
  • WS_EX_TOPMOST:将始终使启动窗口置于所有其他窗口之上。请注意,这可能有点侵入性。最好将启动窗口设置为主窗口的子窗口。但是,您可能需要操作z顺序,以使任何其他弹出窗口(如果有)位于启动窗口下方。

使用CreateDIBSection加载位图。这很容易,因为BMP文件本质上是DIB结构的转储。或者按照Ken所说,使用LoadImage。

处理WM_PAINT或WM_ERASEBKGND消息,在窗口上绘制位图。

在WM_CREATE上设置一个10秒钟的计时器,并在Windows发送WM_TIMER消息时让窗口自行销毁。


2
这里的关键点是使用分层窗口
您可以从win32向导生成的项目开始,并将CreateWindow调用更改为CreateWindowEx,并将WS_EX_LAYERED设置为扩展窗口样式,将WS_POPUP和WS_SYSMENU组合为窗口样式。当您这样启动应用程序时,它将是不可见的。然后,您应该使用UpdateLayeredWindow来绘制图像。如果您想使用带有alpha层的PNG图像,则还可能需要AlphaBlend函数。
希望这可以帮助到您!

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

1

您可以:

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

0

这是一个Win32 API常见问题解答。

请参阅专业的Win32 API论坛news://194.177.96.26/comp.os.ms-windows.programmer.win32,在那里已经有数百次回答了20年。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接