今天在用gdi+画图片的时候,因为需要用到alpha混合实现半透明效果,本来以为像swt一样有个直接的setAlpha什么的,后来发现并非如此,gdi+实现的方式是通过”颜色变换矩阵”,而且,这样不只能做到改变画图时的alpha还能实现一些其他的颜色变换,比如反色,黑白等等,原理有点像D3D的变换矩阵,codeproject上的一篇文章对此解释的很清楚了,留个记录以后参考:http://www.codeproject.com/vb/net/colormatrix.asp
设计开发
[ZT]Font应用
可以通过iEikonEnv-〉***Font()来获得Cfont指针。字体有TitleFont(),DenseFont(),DenseFont(),AnnotationFont(),Font() 共5种。画下划线的方法
font = iEikonEnv->LegendFont();
textPoint.iY = (aRect.Height() / KMiddleTextTwoVertAlign); gc.UseFont(font);//使用legendFont
gc.SetPenColor(colorBlue);//定义gc的clor
gc.SetUnderlineStyle(EUnderlineOn);//画下划线
gc.DrawText(text, textPoint); gc.SetUnderlineStyle(EUnderlineOff);//下划线结束
gc.DiscardFont();//释放内存中使用的discard
TScrollBox内加TImage后的滚动速度
当TScrollBox内的TImage过大且TScrollBox本身Bound也较宽的时候会出现滚动条在滚动的时候明显延迟的情况,可能是由于我的绘图方式问题,现在是用GDI+通过TImage的handle直接绘图,另外不是在TImage的OnPaint里去重绘的,而是用了timer定时更新,因为我需要实现一些动画效果,现在尝试过将timer定时绘图的部分用一个TThread单开一个线程实现,但效果仍不是很理想。还尝试了一下根据TScrollBox的滚动条确定TImage的可视区域并用SetClip减掉没用的部分,最后也是稍微好了一点,当ScrollBox很大(整个窗口全屏的时候),拖动滚动条依然会有延迟,目前正在继续研究中……
C++ Builder的__published关键字
Category
Keyword extensions
Syntax
__published:
Description
The __published keyword was added to support the VCL.
还是CB2007的gdiplus问题
上次加了STRICT后是不报歧义错误了,编译可以正常通过,但是在链接的时候会提示无法解析的符号,好像是implib的时候生成的lib不对的样子,最后检查了一下gdiplus.dll的版本号,发现当前系统的是5.1.3097.0(这个是有漏洞的版本),从m$网站上下载了最新的5.1.3102.1360(无漏洞)版本后,implib生成.lib,链接,没有问题了。
S60 v3 SDK调用链接了ESTLIB.DLL的dll后的exe不能正常运行
连续试了HSS(Hekkus Sound System)和Tuny 2个sound library,都是这个错误,运行后在加载dll时就出错,stack trace:
关于SWT画半透明时用gc的setAlpha
由于gc的setAlpha会自动打开Advanced模式,相当于调用了setAdvanced(true),而这项操作意味着需要调用native的gdiplus.dll的函数,所以发布的时候如果客户端没有这个dll,就会在setAlpha的时候出异常。
C++ Builder 2007开始提供试用下载了
今天回家收信收到了CodeGear寄来的一封信,说CB2007已经提供试用下载了,马上到网站上查看,原来是和D2007一样的下载安装方式,先是一个小exe,然后漫长的在线下载安装。囧,今天累了,明天再说吧,硬盘也没那么多地方了……
加载PNG时的CImageDecoder和AO
加载png时创建CImageDecoder和AO的具体过程(下面的方法在decode的同时还根据png的alpha生成了mask做透明操作,但是不支持半透明alpha混合…):