GDI+的DrawString函数为啥写入的字还是透明的

GDI+的DrawString函数为什么写入的字还是透明的?
本帖最后由 screen12 于 2014-01-30 09:13:38 编辑
我想用一幅png图片做背景,于是先用Image image(L"skin1.png",TRUE);把图片选入,再用
Graphics graph(hdcmem);
graph.DrawImage(&image,0,0,227,113);
把图片拷贝进hdcmem,然后再用DrawString写一些字进去,程序如下:
FontFamily fontFamily(L"新宋体");
Font font(&fontFamily, sys.fsize, FontStyleRegular, UnitPixel);
SolidBrush solidBrush(Color(255, 255, 0, 0));
WCHAR string[256];
wcscpy(string, L"欢迎!");
PointF pointF(80, 10);
graph.DrawString(string, 2, &font, pointF, &solidBrush);

最后用UpdateLayeredWindow把hdcmem的内容更新到窗口上:
m_Blend.BlendOp=0;
m_Blend.BlendFlags=0; 
m_Blend.AlphaFormat=1;
m_Blend.SourceConstantAlpha=255;
UpdateLayeredWindow(hWndComp,hdcScreen,&ptWinPos,&sizeWindow,hdcmem,&ptSrc, 0, &m_Blend,ULW_ALPHA);

结果发现:在白背景上,图片显示为(字很淡,依稀能看到):
GDI+的DrawString函数为啥写入的字还是透明的

把窗口拖到灰色背景上,图片显示为:
GDI+的DrawString函数为啥写入的字还是透明的

可以发现:在白背景下,字体为白色,可我当时键的画刷是红色的SolidBrush solidBrush(Color(255, 255, 0, 0));而且alpha值为255,为什么显示的是白色的?

而移到灰背景下,字体倒确实是红色的了,不过是淡红色的,而且有一定程序的透明。

我希望字体完全不透明,完全覆盖背景,应该怎么办?

------解决方案--------------------
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面界面版关于版主结帖工作的具体办法