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

时间:2020-03-06 15:05:06  来源:igfitidea点击:

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

解决方案

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

注册初始窗口的类,并使用以下样式创建窗口:

  • WS_POPUPWINDOW:将确保窗口没有标题/系统菜单
  • WS_EX_TOPMOST:会将初始屏幕保持在一切之上。请注意,这有点麻烦。最好仅将启动窗口作为主窗口的子窗口。但是,我们可能必须操纵z顺序,以将其他任何弹出窗口(如果创建)保持在初始屏幕下方。

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

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

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

这里的关键是使用分层窗口。

我们可以从win32向导生成的项目开始,将CreateWindow调用更改为CreateWindowEx,并将WS_EX_LAYERED设置为扩展窗口样式,并将WS_POPUP和WS_SYSMENU的组合设置为窗口样式。当我们启动应用程序时,它将不可见。然后,我们应该使用UpdateLayeredWindow绘制图像。如果要使用带有Alpha层的PNG图像,则可能还需要AlphaBlend函数。

希望这可以帮助!

这是Win32 API常见问题解答

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

你可以:

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

如果目标是Windows(Windows 2000)及更高版本的现代版本,则可以使用UpdateLayeredWindow函数显示任何位图(如果需要,可以显示一个带有alpha通道的位图)。

我在博客上撰写了一个四部分的系列文章,内容涉及如何编写实现此目的的C ++ Win32应用程序。如果我们需要等待恰好十秒钟关闭启动屏幕(而不是直到主窗口准备就绪),则需要使用Dan Cristoloveanu建议的计时器技术,该计时器称为DestroyWindow。