如何根据句柄获取控件

时间:2022-06-22 14:37:25
在双缓存里面,有这样的一段代码:

this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint, true);
     this.UpdateStyles();

上面代码里面this是form,我想要把这个this变成桌面。
根据我已经学到的,我知道了桌面的句柄是:

 IntPtr DesktopHandle = GetDC(IntPtr.Zero);

所以我想要根据句柄获取控件,来获取桌面。


当然以上是我的思路之一,有可能存在严重的错误,我只是问一下。
谢谢!

如果想要更多了解我的问题:http://blog.csdn.net/qq_30997287/article/details/48164379

7 个解决方案

#1


IntPtr DesktopHandle = GetDC(IntPtr.Zero);
这肯定是错的,桌面句柄怎么可能是0呢。

#2


引用 1 楼 caozhy 的回复:
IntPtr DesktopHandle = GetDC(IntPtr.Zero);
这肯定是错的,桌面句柄怎么可能是0呢。

测试过,是对的。

#3


引用 1 楼 caozhy 的回复:
IntPtr DesktopHandle = GetDC(IntPtr.Zero);
这肯定是错的,桌面句柄怎么可能是0呢。

请参考代码:

 [DllImport("User32.dll")]
     public extern static IntPtr GetDC(System.IntPtr hWnd);
    
     private void button12_Click(object sender, EventArgs e)
     {
     IntPtr DesktopHandle = GetDC(IntPtr.Zero);
     Graphics g = System.Drawing.Graphics.FromHdc(DesktopHandle);
     g.FillRectangle(new SolidBrush(Color.Red), 0, 0, 100, 100);
     } 

#4


你得到桌面句柄,就可以操作桌面了,你还想要得到什么呢,windows的api大部分是通过句柄操作的

#5


给一个我的实例,根据句柄获取axmpcontrol控件
IntPtr pIntPtr = new IntPtr(m_hookHelper.ActiveView.ScreenDisplay.hWnd);
AxMapControl m_MapControl  = System.Windows.Forms.Form.FromHandle(pIntPtr) as AxMapControl;

#6


引用 4 楼 bdmh的回复:
你得到桌面句柄,就可以操作桌面了,你还想要得到什么呢,windows的api大部分是通过句柄操作的

我觉得你回答问题是文不对题…………-_-||

#7


引用 5 楼 gis_99的回复:
给一个我的实例,根据句柄获取axmpcontrol控件
IntPtr pIntPtr = new IntPtr(m_hookHelper.ActiveView.ScreenDisplay.hWnd);
AxMapControl m_MapControl  = System.Windows.Forms.Form.FromHandle(pIntPtr) as AxMapControl;

赞!!赞\(≧▽≦)/

#1


IntPtr DesktopHandle = GetDC(IntPtr.Zero);
这肯定是错的,桌面句柄怎么可能是0呢。

#2


引用 1 楼 caozhy 的回复:
IntPtr DesktopHandle = GetDC(IntPtr.Zero);
这肯定是错的,桌面句柄怎么可能是0呢。

测试过,是对的。

#3


引用 1 楼 caozhy 的回复:
IntPtr DesktopHandle = GetDC(IntPtr.Zero);
这肯定是错的,桌面句柄怎么可能是0呢。

请参考代码:

 [DllImport("User32.dll")]
     public extern static IntPtr GetDC(System.IntPtr hWnd);
    
     private void button12_Click(object sender, EventArgs e)
     {
     IntPtr DesktopHandle = GetDC(IntPtr.Zero);
     Graphics g = System.Drawing.Graphics.FromHdc(DesktopHandle);
     g.FillRectangle(new SolidBrush(Color.Red), 0, 0, 100, 100);
     } 

#4


你得到桌面句柄,就可以操作桌面了,你还想要得到什么呢,windows的api大部分是通过句柄操作的

#5


给一个我的实例,根据句柄获取axmpcontrol控件
IntPtr pIntPtr = new IntPtr(m_hookHelper.ActiveView.ScreenDisplay.hWnd);
AxMapControl m_MapControl  = System.Windows.Forms.Form.FromHandle(pIntPtr) as AxMapControl;

#6


引用 4 楼 bdmh的回复:
你得到桌面句柄,就可以操作桌面了,你还想要得到什么呢,windows的api大部分是通过句柄操作的

我觉得你回答问题是文不对题…………-_-||

#7


引用 5 楼 gis_99的回复:
给一个我的实例,根据句柄获取axmpcontrol控件
IntPtr pIntPtr = new IntPtr(m_hookHelper.ActiveView.ScreenDisplay.hWnd);
AxMapControl m_MapControl  = System.Windows.Forms.Form.FromHandle(pIntPtr) as AxMapControl;

赞!!赞\(≧▽≦)/