使用GetWindowDC绘图

时间:2015-09-20 09:50:52

标签: vb.net winapi

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

我正在使用vb.net 2013,我尝试将图像刻录到表单,绘制字符串,绘制矩形等等。

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

我是否必须使用DWM功能禁用aero,这是一个句法技巧,或者是什么?我已经发布了一个没有答案的“在标题栏中绘制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)

错误是OutOfMemory,即使对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进行了测试,也不会在任何地方绘制任何内容。

这是一个简单的目的。绘制一个表单的所有区域,然后从中开始绘制,我将处理绘图。对于负面投票来说太糟糕了。没有帮助,因为如果人们在负面投票上快速...尝试快速阅读所有问题中的内容,并发现它不仅仅是“gimme gimme codez” - 另一个引用的问题有代码。

知道很多的人忘记了,一旦你像我一样,并且对这个主题知之甚少......甚至可能不知道如何提出正确的问题......

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

1 个答案:

答案 0 :(得分:1)

Graphics.FromHwnd()采用窗口句柄,而不是DC(名称中的线索)。请改为Graphics.FromHdc()