Ms office 如何在屏幕上发送基于Wic的渲染目标?

Ms office 如何在屏幕上发送基于Wic的渲染目标?,ms-office,reverse-engineering,direct3d,direct2d,Ms Office,Reverse Engineering,Direct3d,Direct2d,我试图了解Office 2013是如何将内容绘制到屏幕上的。到目前为止,我的发现是: Office正在使用CreateWicBitmapRenderTarget创建基于Wic的位图 使用此渲染目标,Office使用各种绘图方法。它按预期使用BeginDraw/EndDraw包装这些调用 Office使用DrawGlyphRun方法在Wic位图上绘制文档的文本(即DrawGlyphRun的此指针是从CreateWicBitmapRenderTarget返回的指针) 在这一点上,我很困惑办公室是如何

我试图了解Office 2013是如何将内容绘制到屏幕上的。到目前为止,我的发现是:

  • Office正在使用
    CreateWicBitmapRenderTarget
    创建基于Wic的位图
  • 使用此渲染目标,Office使用各种绘图方法。它按预期使用BeginDraw/EndDraw包装这些调用
  • Office使用DrawGlyphRun方法在Wic位图上绘制文档的文本(即DrawGlyphRun的此指针是从CreateWicBitmapRenderTarget返回的指针)
  • 在这一点上,我很困惑办公室是如何继续下去的。所以我的问题是:

    将基于Wic的渲染目标复制到屏幕的各种可能方式有哪些?

    我很确定,最后Office使用的是交换链(可能是Windows 7上的
    CreateSwapChain
    和Windows 8上的
    CreateSwapChainForHwnd
    )。我正在逐步使用各种“可疑”函数,例如
    CreateBitmapFromWicBitmap
    CreateBitmapFromDxgiSurface
    ),但我不了解完整的API调用链

    编辑(对MooseBoys的回答): 这不是在屏幕上放置像素的一般问题。像素已经位于一个渲染目标(使用CreateWicBitmapRenderTarget创建的渲染目标,然后使用BeginDraw/DrawGlyphRun/EndDraw绘制)上,现在我想将这些像素移动到另一个渲染目标(实际屏幕上的渲染目标)。
    在GDC世界中,我会寻找类似BitBlt的东西,将像素从一个hdc移动到另一个hdc。我想知道D2D世界中的协议是什么。

    解码后的WIC位图没有任何需要特殊处理的特定协议。因此,您的问题基本上归结为“将像素放到屏幕上的各种方法是什么?”对此有很多答案。您是否已经在屏幕上绘制其他内容?如果是这样,分享你目前的技术将有助于缩小范围。谢谢@MooseBoys的跟进。请参阅上面的编辑。如果您使用D2D进行渲染,可能需要使用CreateBitmapFromWicBitmap。一旦你有了它,就在你的目标上使用DrawBitmap。这假设您已经将D2D的其余部分设置为渲染到屏幕。如果您将交换链绑定到窗口,则可以尝试调用Present()。