我在使用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” - 另一个引用的问题有代码。
知道很多的人忘记了,一旦你像我一样,并且对这个主题知之甚少......甚至可能不知道如何提出正确的问题......
感谢您的帮助,如果有人可以提供帮助。
答案 0 :(得分:1)
Graphics.FromHwnd()
采用窗口句柄,而不是DC(名称中的线索)。请改为Graphics.FromHdc()
。