zoukankan      html  css  js  c++  java
  • 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、执行效果:

    image

  • 相关阅读:
    MutationObserver 简单应用场景
    call apply bind sleep
    js 继承,Object.setPrototypeOf | Object.getPrototypeOf | Object.create class
    JSON.stringify
    javascript 与node的 event-loop
    js 不常用面试题 数组对象深度取值
    Oracle单表备份
    mybatis批量写法
    mybatis批量更新
    Python中if __name__ == '__main__':理解
  • 原文地址:https://www.cnblogs.com/cpcpc/p/2123106.html
Copyright © 2011-2022 走看看