程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> C#調用Google Earth Com API開發(二)

C#調用Google Earth Com API開發(二)

編輯:關於C#

繼《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、執行效果:

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved