C# 调用 Google Earth Com API开发(二)
原文地址:http://www.cnblogs.com/wpwen/archive/2009/02/22/1395622.html
继《C#调用GoogleEarth Com API开发(一)》,我Neil又带给大家第二篇文章。这一篇文章在第一篇的基础上,展示如何调用Windows API将GoogleEarth的界面隐藏掉,并将GoogleEarth的地图显示在自定义的窗体上。废话少说,直接上代码。
1、主窗口代码:
1: // 功能:GE实例(二)
2: // 描述:GE COM API 网址:http://earth.google.com/comapi/index.html
3: // 作者:温伟鹏
4: // 日期:2009-02-08
   5:  
6: using System;
7: using System.Collections.Generic;
8: using System.ComponentModel;
9: using System.Data;
10: using System.Drawing;
11: using System.Text;
12: using System.Windows.Forms;
13: using EARTHLib;
  14:  
15: namespace GEDemo
  16: {
17: public partial class Form2 : Form
  18:     {
19: /// <summary>
20: /// 用来关闭GoogleEarth的消息定义
21: /// </summary>
22: static readonly Int32 WM_QUIT = 0x0012;
  23:  
24: private IntPtr GEHWnd = (IntPtr)5;
25: private IntPtr GEHrender = (IntPtr)5;
26: private IntPtr GEParentHrender = (IntPtr)5;
27: /// <summary>
28: /// 定义GE应用程序类
29: /// </summary>
30: private ApplicationGEClass GeApp;
  31:  
32: public Form2()
  33:         {
  34:             InitializeComponent();
  35:         }
  36:  
37: protected override void OnLoad(EventArgs e)
  38:         {
39: base.OnLoad(e);
  40:  
41: if (!this.DesignMode)
  42:             {
43: GeApp = new ApplicationGEClass();
  44:  
  45:                 GEHWnd = (IntPtr)GeApp.GetMainHwnd();
  46:  
  47:                 NativeMethods.SetWindowPos(GEHWnd, NativeMethods.HWND_BOTTOM, 0, 0, 0, 0,
  48:                     NativeMethods.SWP_NOSIZE + NativeMethods.SWP_HIDEWINDOW);
  49:  
  50:                 GEHrender = (IntPtr)GeApp.GetRenderHwnd();
  51:                 GEParentHrender = (IntPtr)NativeMethods.GetParent(GEHrender);
  52:  
53: NativeMethods.MoveWindow(GEHrender, 0, 0, this.Width, this.Height, true);
  54:  
55: NativeMethods.SetParent(GEHrender, this.Handle);
  56:             }
  57:         }
  58:  
59: protected override void OnClosing(CancelEventArgs e)
  60:         {
61: base.OnClosing(e);
  62:  
  63:             NativeMethods.PostMessage(GeApp.GetMainHwnd(), WM_QUIT, 0, 0);
  64:         }
  65:     }
  66: }
2、NativeMethods类定义:
1: // 功能:Windows API调用
2: // 描述:大家可以参照MSDN
3: // 作者:温伟鹏
4: // 日期:2009-02-08
   5:  
6: using System;
7: using System.Collections.Generic;
8: using System.Text;
9: using System.Runtime.InteropServices;
  10:  
11: namespace GEDemo
  12: {
13: public class NativeMethods
  14:     {
15: [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
16: public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, UInt32 uflags);
  17:  
18: [DllImport("user32.dll", CharSet = CharSet.Auto)]
19: public static extern IntPtr PostMessage(int hWnd, int msg, int wParam, int lParam);
  20:  
21: #region 预定义
  22:  
23: public static readonly IntPtr HWND_BOTTOM = new IntPtr(1);
24: public static readonly IntPtr HWND_NOTOPMOST = new IntPtr(-2);
25: public static readonly IntPtr HWND_TOP = new IntPtr(0);
26: public static readonly IntPtr HWND_TOPMOST = new IntPtr(-1);
27: public static readonly UInt32 SWP_NOSIZE = 1;
28: public static readonly UInt32 SWP_NOMOVE = 2;
29: public static readonly UInt32 SWP_NOZORDER = 4;
30: public static readonly UInt32 SWP_NOREDRAW = 8;
31: public static readonly UInt32 SWP_NOACTIVATE = 16;
32: public static readonly UInt32 SWP_FRAMECHANGED = 32;
33: public static readonly UInt32 SWP_SHOWWINDOW = 64;
34: public static readonly UInt32 SWP_HIDEWINDOW = 128;
35: public static readonly UInt32 SWP_NOCOPYBITS = 256;
36: public static readonly UInt32 SWP_NOOWNERZORDER = 512;
37: public static readonly UInt32 SWP_NOSENDCHANGING = 1024;
  38:  
39: #endregion
  40:  
41: public delegate int EnumWindowsProc(IntPtr hwnd, int lParam);
  42:  
43: [DllImport("user32", CharSet = CharSet.Auto)]
44: public extern static IntPtr GetParent(IntPtr hWnd);
  45:  
46: [DllImport("user32", CharSet = CharSet.Auto)]
47: public extern static bool MoveWindow(IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint);
  48:  
49: [DllImport("user32", CharSet = CharSet.Auto)]
50: public extern static IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
  51:  
52: [DllImport("user32.dll", ExactSpelling = true, CharSet = CharSet.Auto)]
53: public static extern IntPtr GetWindow(IntPtr hWnd, int uCmd);
  54:  
55: public static int GW_CHILD = 5;
56: public static int GW_HWNDNEXT = 2;
  57:     }
  58: }
3、执行效果:
 
                     
                    
                 
                    
                

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号