在.NET平台使用Google Earth COM API示例(02)
来源:互联网 发布:谷歌seo初级指南2016 编辑:程序博客网 时间:2024/05/16 15:05
准备工作与注意事项同前一篇文章,现在我们来关注一些高级的内容。
本文将涉及到两个方面的内容。
1.跨平台调用,在C#中使用Windows API(从dll导入的函数)
2.将GE渲染窗口嵌入到C#的WinForm窗体中
第一部分,跨平台调用的代码
// Windows API调用using System;using System.Collections.Generic;using System.Text;using System.Runtime.InteropServices;namespace GEDemo2{ public class NativeMethods { [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, UInt32 uflags); [DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern IntPtr PostMessage(int hWnd, int msg, int wParam, int lParam); #region 预定义 public static readonly IntPtr HWND_BOTTOM = new IntPtr(1); public static readonly IntPtr HWND_NOTOPMOST = new IntPtr(-2); public static readonly IntPtr HWND_TOP = new IntPtr(0); public static readonly IntPtr HWND_TOPMOST = new IntPtr(-1); public static readonly UInt32 SWP_NOSIZE = 1U; public static readonly UInt32 SWP_NOMOVE = 2U; public static readonly UInt32 SWP_NOZORDER = 4U; public static readonly UInt32 SWP_NOREDRAW = 8U; public static readonly UInt32 SWP_NOACTIVATE = 16U; public static readonly UInt32 SWP_FRAMECHANGED = 32U; public static readonly UInt32 SWP_SHOWWINDOW = 64U; public static readonly UInt32 SWP_HIDEWINDOW = 128U; public static readonly UInt32 SWP_NOCOPYBITS = 256U; public static readonly UInt32 SWP_NOOWNERZORDER = 512U; public static readonly UInt32 SWP_NOSENDCHANGING = 1024U; #endregion public delegate int EnumWindowsProc(IntPtr hwnd, int lParam); [DllImport("user32", CharSet = CharSet.Auto)] public extern static IntPtr GetParent(IntPtr hWnd); [DllImport("user32", CharSet = CharSet.Auto)] public extern static bool MoveWindow(IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint); [DllImport("user32", CharSet = CharSet.Auto)] public extern static IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent); [DllImport("user32.dll", ExactSpelling = true, CharSet = CharSet.Auto)] public static extern IntPtr GetWindow(IntPtr hWnd, int uCmd); public static int GW_CHILD = 5; public static int GW_HWNDNEXT = 2; }}
这部分代码被称作"NativeMethods",其中的一些method将会在第二部分中被引用
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using EARTHLib;namespace GEDemo2{ public partial class GEDemo2 : Form { static readonly Int32 WM_QUIT = 0x0012; private IntPtr GEHMainWnd = (IntPtr)0; private IntPtr GEHRenderWnd = (IntPtr)0; private ApplicationGE GEApp; public GEDemo2() { InitializeComponent(); } //重写OnLoad比实现Form_Load更高效 protected override void OnLoad(EventArgs e) { base.OnLoad(e); //启动GoogleEarth实例 GEApp = new ApplicationGE(); GEHMainWnd = (IntPtr)GEApp.GetMainHwnd(); //隐藏GoogleEarth主窗口 NativeMethods.SetWindowPos(GEHMainWnd, NativeMethods.HWND_BOTTOM, 0, 0, 0, 0, NativeMethods.SWP_NOSIZE | NativeMethods.SWP_HIDEWINDOW); GEHRenderWnd = (IntPtr)GEApp.GetRenderHwnd(); //将渲染窗口嵌入到主窗体 NativeMethods.MoveWindow(GEHRenderWnd, 0, 0, this.Width, this.Height, true); NativeMethods.SetParent(GEHRenderWnd, this.Handle); } protected override void OnClosing(CancelEventArgs e) { base.OnClosing(e); //关闭窗口 NativeMethods.PostMessage((int)GEHMainWnd, WM_QUIT, 0, 0); } }}这部分就是主窗体的(非设计部分)的全部代码,运行结果如下
现在只是实现了第一部分(窗体嵌入),稍后将会陆续完善。敬请关注本博。
点此领取楼主。
0 0
- 在.NET平台使用Google Earth COM API示例(02)
- 在.NET平台使用Google Earth COM API示例(01)
- 在.NET平台使用Google Earth COM API示例(03)
- 在.NET平台使用Google Earth COM API示例(04)
- 在.NET平台使用Google Earth COM API示例(05)
- 在MFC项目中使用Google Earth COM API示例
- Google Earth COM API
- Google Earth Com API开发资料3
- C# 调用 Google Earth Com API开发(二)
- C#调用Google Earth COM API开发(一)
- C# 调用 Google Earth Com API开发(二)
- C# 调用 Google Earth Com API开发(三)
- C# 调用 Google Earth Com API开发(四)
- 转:C# 调用 Google Earth Com API开发(三)
- 转:C# 调用 Google Earth Com API开发(四)
- google earth web api
- 论文-基于MFC单文档的Google Earth COM API程序设计
- 在Google Earth上越狱
- XML概述
- iframe问题(未解决)
- 一个星期的总结
- hdu 3605 Escape (二分图的多重匹配)
- ubuntu 13.10 Rhythmbox不能播放mp3 和中文乱码的问题
- 在.NET平台使用Google Earth COM API示例(02)
- Libevent源码分析-----TAILQ_QUEUE队列
- 概率主题模型资源
- [代码备份]poj1755
- Hu矩轮廓匹配
- C语言基础——预处理指令
- Sublime Text2 按shift键选择不了的问题
- winform DataGridView双击修改单元格的值
- 最大流最小费用流模板