VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > Objective-C编程 >
  • c# 调用 Google Earch Com API开发二

制作者:剑锋冷月 单位:无忧统计网,www.51stat.net
 

 

 

  继《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、执行效果:

C# 调用 Google Earth Com API开发(二)

  系列文章:

  C#调用 GoogleEarth COM API开发(一)

  C# 调用 Google Earth Com API开发(三)

 

 

  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、执行效果:

C# 调用 Google Earth Com API开发(二)

  系列文章:

  C#调用 GoogleEarth COM API开发(一)

  C# 调用 Google Earth Com API开发(三)

 



相关教程