惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
Microsoft Azure Blog
Microsoft Azure Blog
WordPress大学
WordPress大学
小众软件
小众软件
Last Week in AI
Last Week in AI
月光博客
月光博客
博客园 - 聂微东
Recent Announcements
Recent Announcements
A
About on SuperTechFans
博客园 - 三生石上(FineUI控件)
V
V2EX
阮一峰的网络日志
阮一峰的网络日志
博客园 - Franky
云风的 BLOG
云风的 BLOG
量子位
N
Netflix TechBlog - Medium
Hugging Face - Blog
Hugging Face - Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
J
Java Code Geeks
博客园 - 司徒正美
S
SegmentFault 最新的问题
有赞技术团队
有赞技术团队
Google DeepMind News
Google DeepMind News
宝玉的分享
宝玉的分享

博客园 - 温伟鹏

Docker安装及换源 Team Explorer 2008连接TFS2010提示无法连接的解决办法 C# 调用 Google Earth Com API开发(四) C# 调用 Google Earth Com API开发(三) 安装IE8正式版以后VS无法创建VC++智能设备项目的解决方法 C#调用GoogleEarth COM API开发(一) 贡献自绘CheckBox代码 自绘进度条的其余代码… 好久没上博客园了,给大家送上一个自绘进度条的小例子 夜宵... 天气暴热,心情不爽,股市反弹... ... 测试Live Writer Beta2功能 Live Writer Beta2发布 给老爸买了摄像机 在NSee中添加缩略图预览和属性查看功能 自定义透明的按钮(图) NSee截图 NSee诞生 建好了新的博客
C# 调用 Google Earth Com API开发(二)
温伟鹏 · 2009-02-22 · via 博客园 - 温伟鹏

继《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