【问题标题】:is HDC handle valid for another process?HDC 句柄对另一个进程有效吗?
【发布时间】:2011-07-27 05:12:45
【问题描述】:

我正在使用 Windows api 创建剪辑的 HDC(设备上下文)句柄,然后将其发送到另一个进程。此句柄是否可以在其中绘图?

【问题讨论】:

    标签: c winapi c++builder


    【解决方案1】:

    您需要在应用程序中公开一种在 DC 上绘图的方法。

    最有可能的候选者是您定义的 Windows 消息(WM_APP 或 WM_USER)。

    WM_USER + 1,
    WM_USER + 2,
    WM_USER + 3,
    etc...
    

    然后你将在你的应用程序 WNDPROC 中处理这些

    switch case
    {
      WM_USER + 1:
       // draw a circle
      WM_USER + 2:
       // draw a rectangle
      WM_USER + 3:
       // draw a snowman
    }
    

    最后来自第三方应用程序,他们会通过 SendMessage API 简单地将消息发送到您的应用程序:

    SendMessage(hWndSergey, WM_USER + 1, 0, 0);
    

    LPARAM 和 WPARAM 可以是指向全局共享内存的指针以交换参数或简单的 dword 值等...

    http://msdn.microsoft.com/en-us/library/ms644950(v=VS.85).aspx

    【讨论】:

    • 谢谢比尔,但更快的是什么:命名管道还是 Windows 消息?
    • @Sergey:开发速度更快还是发送速度更快?命名管道允许在桌面之间发送并带有安全性(DACL 等),而窗口消息则不允许。但是,由于进程的完整性级别,窗口消息在 Windows 7 上也有其局限性......
    【解决方案2】:

    设备上下文句柄在另一个进程中无效。考虑公开一个界面,其他进程可以用来在您的窗口中绘制。

    【讨论】:

    • 是的,这正是我所需要的,但是您如何做到这一点,请您描述一下?
    • @Sergey:这实际上不是您问题的一部分。因此,如果这是您想要的,您应该编辑它。不过,鉴于您的问题,jdigital 的回复是正确的。
    猜你喜欢
    • 2012-05-09
    • 1970-01-01
    • 2016-05-08
    • 2012-01-31
    • 2019-09-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-11
    • 1970-01-01
    相关资源
    最近更新 更多