《如何在桌面嵌入窗体》由会员分享,可在线阅读,更多相关《如何在桌面嵌入窗体(4页珍藏版)》请在金锄头文库上搜索。
1、如何在桌面嵌入窗体如何在桌面嵌入窗体using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Runtime.InteropServices;namespace ShowInDeskpublic partial class Form1 : FormIntPtr hDesktop;public const int G
2、W_CHILD = 5;public Form1()InitializeComponent();this.hDesktop = GetDesktopHandle(DesktopLayer.Progman);EmbedDesktop(this, this.Handle, this.hDesktop);isMouseDown = false;public IntPtr GetDesktopHandle(DesktopLayer layer)/hWnd = new HandleRef();HandleRef hWnd;IntPtr hDesktop = new IntPtr();switch (la
3、yer)case DesktopLayer.Progman:hDesktop = Win32Support.FindWindow(“Progman“, null);/第一层桌面break;case DesktopLayer.SHELLDLL:hDesktop = Win32Support.FindWindow(“Progman“, null);/第一层桌面hWnd = new HandleRef(this, hDesktop);hDesktop = Win32Support.GetWindow(hWnd, GW_CHILD);/第 2 层桌面break;case DesktopLayer.Fo
4、lderView:hDesktop = Win32Support.FindWindow(“Progman“, null);/第一层桌面hWnd = new HandleRef(this, hDesktop);hDesktop = Win32Support.GetWindow(hWnd, GW_CHILD);/第 2 层桌面hWnd = new HandleRef(this, hDesktop);hDesktop = Win32Support.GetWindow(hWnd, GW_CHILD);/第 3 层桌面break;return hDesktop;public void EmbedDesk
5、top(Object embeddedWindow, IntPtr childWindow, IntPtr parentWindow)Form window = (Form)embeddedWindow;HandleRef HWND_BOTTOM = new HandleRef(embeddedWindow, new IntPtr(1);const int SWP_FRAMECHANGED = 0x0020;/发送窗口大小改变消息Win32Support.SetParent(childWindow, parentWindow);Win32Support.SetWindowPos(new Han
6、dleRef(window, childWindow), HWND_BOTTOM, 300, 300, window.Width, window.Height, SWP_FRAMECHANGED);using System;using System.Collections.Generic;using System.Text;using System.Runtime.InteropServices;namespace ShowInDeskclass Win32SupportDllImport(“user32.dll“, CharSet = CharSet.Auto)public static e
7、xtern IntPtr FindWindow(string className, string windowName);DllImport(“user32.dll“, CharSet = CharSet.Auto, ExactSpelling = true)public static extern IntPtr GetWindow(HandleRef hWnd, int nCmd);DllImport(“user32.dll“)public static extern IntPtr SetParent(IntPtr child, IntPtr parent);DllImport(“user3
8、2.dll“, EntryPoint = “GetDCEx“, CharSet = CharSet.Auto, ExactSpelling = true)public static extern IntPtr GetDCEx(IntPtr hWnd, IntPtr hrgnClip, int flags);DllImport(“user32.dll“, CharSet = CharSet.Auto, ExactSpelling = true)public static extern bool SetWindowPos(HandleRef hWnd, HandleRef hWndInsertAfter, int x, int y, int cx, int cy, int flags);DllImport(“user32.dll“)public static extern int ReleaseDC(IntPtr window, IntPtr handle);namespace ShowInDeskpublic enum DesktopLayerProgman = 0,SHELLDLL = 1,FolderView = 2