您的位置:首页 > 编程语言 > C#

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

2010-12-29 09:33 204 查看
原文地址:/article/5800964.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、执行效果:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: