2015-09-20 57 views
-2

我在使用Win API GetWindowDC获取绘制的有效hDC时遇到困难。使用GetWindowDC进行绘图

我使用vb.net 2013,我试图bitblt图像到窗体,绘制字符串,绘制矩形,什么也没有。

我在Win7中运行所有的测试。

我是否必须禁用DWM功能的航空,是一个处理技巧,或者是什么?我已经发布了一个“draw titlebar vb.net 2013”​​的问题,没有答案,我使用了一些代码,但现在,我只需要一个工作示例即可开始。所有的帮助表示赞赏。


但是这里有更多的代码不起作用。

Select Case m.Msg 
     Case WinAPI.Win32Messages.WM_NCPAINT 

      Dim hDC As IntPtr = WinAPI.GetWindowDC(m.HWnd) 
      Dim g As Graphics = Graphics.FromHwnd(hDC) 

      g.DrawString("TESTE", New Font("ARIAL", 16), New SolidBrush(Color.Black), 5, 5) 
      g.Dispose() 

      WinAPI.ReleaseDC(m.HWnd, hDC) 

的错误是内存不足,并没有得到任何地方绘制,即使做clientarea测试。

这是一个简单的目的。开始绘制一个表单的所有区域,然后,我将处理该图形。

那么,至少在正确编辑的帮助,谢谢。关于Graphics.FromHDC,是的,我试过了。

但是,这里有更多的代码不起作用。

Select Case m.Msg 
    Case WinAPI.Win32Messages.WM_NCPAINT 

     Dim hDC As IntPtr = WinAPI.GetWindowDC(m.HWnd) 
     Dim g As Graphics = Graphics.FromHwnd(hDC) 

     g.DrawString("TESTE", New Font("ARIAL", 16), New SolidBrush(Color.Black), 5, 5) 
     g.Dispose() 

     WinAPI.ReleaseDC(m.HWnd, hDC) 

错误是OutOfMemory,即使对clientarea进行了测试,任何地方都不会得出任何错误。

这是一个简单的目的。开始绘制一个表单的所有区域,然后,我将处理该图形。反对票太糟糕了。没有帮助,因为如果那些在负面投票中速度很快的人......试图在阅读所有提出的问题时尽可能快地发现它不仅仅是“给我一个编码” - 另一个引用的问题有代码。

人说知道很多忘记,一旦你在哪里我一样,并没有了解很多的主题......可能甚至不知道如何提出正确的问题...

感谢帮助,如果有人可以提供。

+0

*“Plz giev me teh codez”*不是应该成为stackoverflow问题的一部分。您需要显示**您的**代码,并提出具体问题。你想渲染到客户区还是窗口的非客户区?应用程序是否在您的控制之下?你有什么尝试?那是如何失败的? – IInspectable

+0

[WM_NCPAINT](https://msdn.microsoft.com/en-us/library/dd145212.aspx)的文档包含有效的示例代码。 – IInspectable

回答

1

Graphics.FromHwnd()需要一个窗口句柄,而不是DC(线索在名称中)。改为尝试Graphics.FromHdc()

+0

是的。我尝试了第一次,但没有发生。没有错误,但没有画出任何错误。 – JDF