CRichEditCtrl 闪烁

dancing_night 2014-04-03 05:05:46
如题,在CRichEditCtrl 里插入图片后,改变窗口大小和拉动滚动条,图片都闪的厉害,求指导
...全文
265 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2014-05-08
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复三日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
dancing_night 2014-04-08
  • 打赏
  • 举报
回复
引用 10 楼 schlafenhamster 的回复:
"有什么功能 re 做不到?" 需要加背景图?
那就是以前的人机制做错了,我把他改回来看闪烁不
schlafenhamster 2014-04-05
  • 打赏
  • 举报
回复
"有什么功能 re 做不到?" 需要加背景图?
schlafenhamster 2014-04-04
  • 打赏
  • 举报
回复
插入后, 你 没有 动他吧, re 应该 自己可以 管理的。 闪烁 是 因为 重绘的 结果, re 怎么 会 不知道 ?
dancing_night 2014-04-04
  • 打赏
  • 举报
回复
引用 2 楼 schlafenhamster 的回复:
“CRichEditCtrl 里插入图片”
看看你插入是怎么写的。

插入图片代码如下:
hr = CreateILockBytesOnHGlobal(NULL, TRUE, &spLockBytes);
if (hr != S_OK) {
break;
}

ASSERT(spLockBytes != NULL);

// 创建Storage
hr = StgCreateDocfileOnILockBytes(spLockBytes,
STGM_SHARE_EXCLUSIVE | STGM_CREATE | STGM_READWRITE, 0, &spStorage);
if (hr != S_OK) {
break;
}

// 获取ClientSite
hr = m_pRichEditOle->GetClientSite(&spOleClientSite);
if (hr != S_OK) {

break;
}

// 创建COleImage实例
hr = CoCreateInstance(CLSID_OleImage, NULL, CLSCTX_INPROC, IID_IOleImage, (LPVOID*) &spOleImage);
if (hr != S_OK) {
break;
}

hr = spOleImage->loadFromFile(this, atype, _bstr_t(path), resId, 400);
spOleImage->SetMsgIdAndPicPos(msgId, picpos);
if (hr != S_OK) {
TRACE(_T("FUCKFUCKFUCK.\n"));
break;
}

// 获取IOleObject接口
hr = spOleImage->QueryInterface(IID_IOleObject, (LPVOID *) &spOleObject);
if (hr != S_OK) {
break;
}

// 获取IOleObject的用户CLSID
hr = spOleObject->GetUserClassID(&clsid);
if (hr != S_OK) {
break;
}

// 填充OLE对象属性
ZeroMemory(&reobject, sizeof(REOBJECT));
reobject.cbStruct = sizeof(REOBJECT);
reobject.clsid = clsid;
reobject.cp = REO_CP_SELECTION;
reobject.dvaspect = DVASPECT_CONTENT;
reobject.dwFlags = REO_BELOWBASELINE;
reobject.poleobj = spOleObject;
reobject.polesite = spOleClientSite;
reobject.pstg = spStorage;
SIZEL sizel = {0};
reobject.sizel = sizel;

// 插入OLE对象
hr = m_pRichEditOle->InsertObject(&reobject);
if (hr != S_OK) {
break;
}

// 通知OLE容器保证OLE对象被正确引用
hr = OleSetContainedObject(spOleObject, TRUE);
schlafenhamster 2014-04-04
  • 打赏
  • 举报
回复
“CRichEditCtrl 里插入图片” 看看你插入是怎么写的。
dancing_night 2014-04-04
  • 打赏
  • 举报
回复
那我改那我改怎么下手,有什么好思路不
dancing_night 2014-04-04
  • 打赏
  • 举报
回复
那应该怎么下手呢?
schlafenhamster 2014-04-04
  • 打赏
  • 举报
回复
你是自绘 ? 不应该自绘, 有什么功能 re 做不到?
dancing_night 2014-04-04
  • 打赏
  • 举报
回复
引用 4 楼 schlafenhamster 的回复:
插入后, 你 没有 动他吧, re 应该 自己可以 管理的。 闪烁 是 因为 重绘的 结果, re 怎么 会 不知道 ?
现在的问题是我无法获取文字和图片相对于CrichEditCtrl的DC的CRect,你有什么好办法么
dancing_night 2014-04-04
  • 打赏
  • 举报
回复
引用 4 楼 schlafenhamster 的回复:
插入后, 你 没有 动他吧, re 应该 自己可以 管理的。 闪烁 是 因为 重绘的 结果, re 怎么 会 不知道 ?
我追了代码,发现机制是错的,以前是把每个图片单独的绘制在dc上,我现在正在改,想做到把整个区域dc复制成memdc然后在memdc上绘制完成并写上字然后一下替换,这个机制应该没问题吧?
dancing_night 2014-04-03
  • 打赏
  • 举报
回复
怎么没人指导呢

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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