Office Word中的ATL控件显示不正常(BitBlt)

johnhanssz 2018-07-25 12:43:33
我用VS2008新建了一个ATL工程,添加了OnCreate方法(仅仅修改窗口扩展样式为透明)
LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
const LONG_PTR exStyle = GetWindowLongPtr(GWL_EXSTYLE);
SetWindowLongPtr(GWL_EXSTYLE, exStyle | WS_EX_TRANSPARENT);
return 0;
}
同时修改OnDrawAdvanced为从磁盘加载图片并绘制到窗口(通过BitBlt的SRCAND)
HRESULT OnDrawAdvanced(ATL_DRAWINFO& di)
{
RECT& rc = *(RECT*)di.prcBounds;

CImage imgx;
imgx.Load(_T("C:\\image.jpg"));
imgx.StretchBlt(di.hdcDraw, rc.left, rc.top, rc.right, rc.bottom, 0,0,imgx.GetWidth(),imgx.GetHeight(), SRCAND);

return S_OK;
}
加载的jpg图片如下:


以上代码编译后在Word2007中无论设置哪种嵌入方式都能正常显示,



但在Word2013中,遇到了诡异现象:
当设置为嵌入型时,和2007一样,一切正常

当设置为嵌入型以外的任何其他方式时,图像变成了黑白。


而当把StretchBlt改为TransparentBlt时,图像完全不能显示,但拖动word滚动条或点击时会一闪而过

请教这是什么情况?如何解决。
...全文
270 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
warmice5255 2019-12-04
  • 打赏
  • 举报
回复
有结果了吗?希望能回复下。
许文君 2019-06-19
  • 打赏
  • 举报
回复
必须要嵌入控件么?不能直接图片么?

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧