MFC中如何用PNG文件作为启动界面

我说的启动界面就是打开软件时闪过的软件信息的图片我已经做好了SPLASH界面,但只支持BMP资源(MFC默认的图片资源貌似只能是BMP),这样的话透明,边缘羽化效果体现不... 我说的启动界面就是打开软件时闪过的软件信息的图片
我已经做好了SPLASH界面,但只支持BMP资源(MFC默认的图片资源貌似只能是BMP),这样的话透明,边缘羽化效果体现不出来
网上用CIMAGE类来载入PNG貌似不支持从资源中载入
有说用GDI++我还不知道怎么弄
如果能用其他方法实现不规则形状图片的启动画面也可以
我刚学MFC没多久,望各位高手赐教,能给出具体代码我直接include就能用最好
这里先谢谢大家了!!
那是不是要创建一个形状不规则的对话框呢,该怎么弄嘞
很多软件启动LOGO都是不规则的比如vs2010,mathematica,很漂亮的说~
谢谢1,2L回答
3L,我语文也不咋地- -,看起来实现比较复杂,要真那么弄有点本末倒置,改天我在研究一下,再==看有没有其他高手围观,过几天我再送分哈~
展开
 我来答
sl65agm
2011-02-16 · TA获得超过1383个赞
知道小有建树答主
回答量:734
采纳率:0%
帮助的人:585万
展开全部
无论是GDI,GDI+或者是Cimage都是浮云,,windows上能显示的图片,一定是设备相关的位图,可以简单认为,GDI+或者是Cimage最终是将Png格式转换为位图,才显示出来的。

为了实现不规则的图形窗口,有非常多的方法,你的情况比较适合用两张位图显示,步骤如下(非唯一方案)
1. 准备一张你需要显示的位图, 比如你的照片
2. 用Photo shop一类的工具,更具第一章位图中人体的轮廓,生成一张“模板位图”
3. 在程序主窗口构造之前,获取当前屏幕的设备上下文句柄,并建立一个兼容设备上下文。
4. 在兼容上下文中选择你的照片。
5. 调用神器MaskBlt(嘎嘎,,GDI里面少有的控制底层光栅操作的函数,一般只有dx才有这种武器的),使用你刚才生成的模板图,将兼容上下文拷贝到当前屏幕上下文上。
6. 阻断当前线程大概1~3秒,以完成显示。
说明: MaskBlt 中dwRop参数表明了源/目标的逻辑算符,掩码位图中0和1代表取那个算符。
0 或 仍和数都不改变这个数,,, 仍和数 “或” 1可以把自己变成1
所以,,被你涂黑的部分,,算符取“源或目标”,, 没涂黑的部分,,算符取“直接拷贝源”
核心函数:
GetDC CreateCompatibleDC MaskBlt(Cimage类中的同名方式意识是一样的) SelectObject

最后,,再次声明,,这些GDI一定是对位图在操作,他们眼里没有png这个概念,如果你一定要把Png放到exe文件中,那你必须构造IStream以生成cimage对象,还不如保存两种位图,然后再用标准mfc的方法加载。。。你注意看,,为了减小应用程序的大小,连使命的召唤这样牛逼的游戏,开始的Logo都是Bmp的哦。。。
可能没有说清楚,,不过你要原谅哥哥,,哥哥高考语文只有几十分的,,,
博思aippt
2024-07-20 广告
博思AIPPT是基于ai制作PPT的智能在线工具,它提供了4种AI制作PPT的方式,包括AI生成大纲、AI直接生成PPT、文本生成PPT、AI提炼文档生成PPT,一站式集成多种AI生成PPT的方式,可满足办公用户的不同需求和使用场景。ai生... 点击进入详情页
本回答由博思aippt提供
flally
2011-02-15 · TA获得超过208个赞
知道答主
回答量:133
采纳率:0%
帮助的人:113万
展开全部
不一定非要用splash,你可以使用一个对话框,在主界面初始化的时候载入,停顿一段时间后销毁。在对话框上,你可以载入png,貌似某个控件是支持的,你找找,如果不支持可以直接用cimage类
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
饭盒与玫瑰
2011-02-22 · 超过17用户采纳过TA的回答
知道答主
回答量:110
采纳率:100%
帮助的人:31.2万
展开全部
可以用一个对话框,
CRgn可以构造任意形状的出口区域,而SetWindowRgn()函数讲一个窗口区域hRgn分哦诶给hWnd,系统只显示该区域标识的地方,区域以外系统不会显示,这样就达到了创建任意形状窗口的目的,
详细说明见<<专家门诊_Visual_C++开发答疑300问>>第58页,"如何生成任意形状窗口"
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tn瓶邪
推荐于2016-08-26 · TA获得超过1881个赞
知道小有建树答主
回答量:610
采纳率:98%
帮助的人:112万
展开全部
代码为:
CImage m_Image; //用于加载logo.png
//加载png图片
if (!m_Image.IsNull())
{
m_Image.Destroy();
}
m_Image.Load(_T("res/logo.png"));
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ftfix23
2011-02-16 · TA获得超过117个赞
知道答主
回答量:212
采纳率:0%
帮助的人:0
展开全部
好像是不可以的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式