HOW TO
When running standalone applications for ArcGIS it is recommended to turn off the Windows Aero theme during the lifetime of the application. There are some cases where having the Aero theme enabled may cause display issues. These display issues become more apparent in dynamic display and 3D modes.
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using ESRI.ArcGIS;
namespace MyApp
{
static class Program
{
[DllImport("kernel32", SetLastError = true)]
static extern IntPtr LoadLibrary(string lpFileName);
[DllImport("kernel32", CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)]
static extern IntPtr GetProcAddress(IntPtr hModule, string procName);
internal delegate int DwmEnableComposition(int enable);
[STAThread]
static void Main()
{
if (!RuntimeManager.Bind(ProductCode.Engine))
{
if (!RuntimeManager.Bind(ProductCode.Desktop))
{
MessageBox.Show("Unable to bind to ArcGIS runtime. Application will be shut down.");
return;
}
}
DisableAeroDesktopWindowManager();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
private static void DisableAeroDesktopWindowManager()
{
IntPtr pDll = IntPtr.Zero;
try
{
// Load the Desktop Windows Manger library, if the library does not exist
// then bail out because we are on an OS older than Vista.
pDll = LoadLibrary("dwmapi.dll");
if (pDll == IntPtr.Zero)
return;
// Get the DwmEnableComposition Function
IntPtr pFunc = GetProcAddress(pDll, "DwmEnableComposition");
if (pFunc == IntPtr.Zero)
return;
DwmEnableComposition enableDwm = (DwmEnableComposition)System.Runtime.InteropServices.Marshal.GetDelegateForFunctionPointer(pFunc, typeof(DwmEnableComposition));
if (enableDwm == null) return;
{
// Disable Desktop Window Manager
enableDwm(0);
}
}
catch
{
//Todo: log error
}
}
}
}
Imports System.Runtime.InteropServices
Namespace My
Partial Friend Class MyApplication
<DllImport("kernel32", SetLastError:=True)> _
Public Shared Function LoadLibrary(ByVal lpFileName As String) As IntPtr
End Function
<DllImport("kernel32", CharSet:=CharSet.Ansi, ExactSpelling:=True, SetLastError:=True)> _
Public Shared Function GetProcAddress(ByVal hModule As IntPtr, ByVal procName As String) As IntPtr
End Function
Friend Delegate Function DwmEnableComposition(ByVal enable As Integer) As Integer
Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup
If Not ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Engine) Then
If Not ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Desktop) Then
MessageBox.Show("Unable to bind to ArcGIS runtime. Application will be shut down.")
e.Cancel = True 'Abort application start up
End If
End If
DisableAeroDesktopWindowManager()
End Sub
Private Sub DisableAeroDesktopWindowManager()
Dim pDll As IntPtr = IntPtr.Zero
Try
pDll = LoadLibrary("dwmapi.dll")
If (pDll = IntPtr.Zero) Then
Return
End If
' Get the DwmEnabledComposition Function
Dim pFunc As IntPtr = GetProcAddress(pDll, "DwmEnableComposition")
If (pFunc = IntPtr.Zero) Then
Return
End If
Dim enableDwm As DwmEnableComposition
enableDwm = DirectCast(System.Runtime.InteropServices.Marshal.GetDelegateForFunctionPointer(pFunc, GetType(DwmEnableComposition)), DwmEnableComposition)
If (enableDwm Is Nothing) Then
Return
End If
' Disable Desktop Window Manager
enableDwm(0)
Catch
'Todo: log error
End Try
End Sub
End Class
End Namespace
Article ID: 000011117
Get help from ArcGIS experts
Start chatting now