About the RSS weather layer Sample
[C#]
PropertySheet.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Runtime.Remoting;
using System.Runtime.InteropServices;
using Microsoft.Win32;
namespace RSSWeatherLayer
{
[Guid("71D93E11-AD59-4104-B922-A92B5F2BF69E")]
[ComVisible(true)]
[ProgId("RSSWeatherLayer.PropertySheet")]
[ClassInterface(ClassInterfaceType.None)]
public partial class PropertySheet : UserControl, IProvideObjectHandle, ISpecifyPropertyPages
{
#region Control Registration
[ComRegisterFunction]
static void ComRegister(Type t)
{
string keyName = @"CLSID\" + t.GUID.ToString("B");
using (RegistryKey key =
Registry.ClassesRoot.OpenSubKey(keyName, true))
{
key.CreateSubKey("Control").Close();
using (RegistryKey subkey = key.CreateSubKey("MiscStatus"))
{
subkey.SetValue("", "131457");
}
using (RegistryKey subkey = key.CreateSubKey("TypeLib"))
{
Guid libid = Marshal.GetTypeLibGuidForAssembly(t.Assembly);
subkey.SetValue("", libid.ToString("B"));
}
using (RegistryKey subkey = key.CreateSubKey("Version"))
{
Version ver = t.Assembly.GetName().Version;
string version =
string.Format("{0}.{1}",
ver.Major,
ver.Minor);
if (version == "0.0") version = "1.0";
subkey.SetValue("", version);
}
}
}
[ComUnregisterFunction]
static void ComUnregister(Type t)
{
// Delete entire CLSID\{clsid} subtree
string keyName = @"CLSID\" + t.GUID.ToString("B");
Registry.ClassesRoot.DeleteSubKeyTree(keyName);
}
#endregion
RSSWeatherLayerClass m_layer = null;
public PropertySheet()
{
InitializeComponent();
}
#region IProvideObjectHandle Members
public ObjectHandle ObjectHandle
{
get { return new ObjectHandle(this); }
}
#endregion
#region ISpecifyPropertyPages Members
public void GetPages(ref CAUUID pPages)
{
Guid[] g = new Guid[2];
g[0] = typeof(RSSLayerProps).GUID;
g[1] = typeof(RSSLayerProps2).GUID;
pPages.SetPages(g);
}
public RSSWeatherLayerClass RSSWatherLayer
{
get { return m_layer; }
set { m_layer = value; }
}
#endregion
}
}
[Visual Basic .NET]
PropertySheet.vb
Imports Microsoft.VisualBasic
Imports System
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Drawing
Imports System.Data
Imports System.Text
Imports System.Windows.Forms
Imports System.Runtime.Remoting
Imports System.Runtime.InteropServices
Imports Microsoft.Win32
<Guid("71D93E11-AD59-4104-B922-A92B5F2BF69E"), ComVisible(True), ProgId("PropertySheet"), ClassInterface(ClassInterfaceType.None)> _
Public Partial Class PropertySheet : Inherits UserControl : Implements IProvideObjectHandle, ISpecifyPropertyPages
#Region "Control Registration"
<ComRegisterFunction> _
Private Shared Sub ComRegister(ByVal t As Type)
Dim keyName As String = "CLSID\" & t.GUID.ToString("B")
Using key As RegistryKey = Registry.ClassesRoot.OpenSubKey(keyName, True)
key.CreateSubKey("Control").Close()
Using subkey As RegistryKey = key.CreateSubKey("MiscStatus")
subkey.SetValue("", "131457")
End Using
Using subkey As RegistryKey = key.CreateSubKey("TypeLib")
Dim libid As Guid = Marshal.GetTypeLibGuidForAssembly(t.Assembly)
subkey.SetValue("", libid.ToString("B"))
End Using
Using subkey As RegistryKey = key.CreateSubKey("Version")
Dim ver As Version = t.Assembly.GetName().Version
Dim version As String = String.Format("{0}.{1}", ver.Major, ver.Minor)
If version = "0.0" Then
version = "1.0"
End If
subkey.SetValue("", version)
End Using
End Using
End Sub
<ComUnregisterFunction> _
Private Shared Sub ComUnregister(ByVal t As Type)
' Delete entire CLSID\{clsid} subtree
Dim keyName As String = "CLSID\" & t.GUID.ToString("B")
Registry.ClassesRoot.DeleteSubKeyTree(keyName)
End Sub
#End Region
Private m_layer As RSSWeatherLayerClass = Nothing
Public Sub New()
InitializeComponent()
End Sub
#Region "IProvideObjectHandle Members"
Public ReadOnly Property ObjectHandle() As ObjectHandle Implements IProvideObjectHandle.ObjectHandle
Get
Return New ObjectHandle(Me)
End Get
End Property
#End Region
#Region "ISpecifyPropertyPages Members"
Public Sub GetPages(ByRef pPages As CAUUID) Implements ISpecifyPropertyPages.GetPages
Dim g As Guid() = New Guid(1){}
g(0) = GetType(RSSLayerProps).GUID
g(1) = GetType(RSSLayerProps2).GUID
pPages.SetPages(g)
End Sub
Public Property RSSWatherLayer() As RSSWeatherLayerClass
Get
Return m_layer
End Get
Set
m_layer = Value
End Set
End Property
#End Region
End Class