////////////////////////////////////////////////////////////////////////////////
//
//  Project:   AIMP
//             Programming Interface
//
//  Target:    v6.00 build 3000
//
//  Purpose:   GUI API
//
//  Author:    Artem Izmaylov
//             © 2006-2026
//             www.aimp.ru
//
#ifndef apiGUIH
#define apiGUIH

#include "apiTypes.h"
#include "apiObjects.h"
#include "apiMenu.h"

static const GUID IID_IAIMPServiceUI = {0x41494D50, 0x5365, 0x7276, 0x69, 0x63, 0x65, 0x55, 0x49, 0x00, 0x00, 0x00};

static const GUID IID_IAIMPUIAuthDialog = {0x61756941, 0x7574, 0x6844, 0x6C, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIAuthDialogEvents = {0x61756941, 0x7574, 0x6844, 0x6C, 0x67, 0x45, 0x76, 0x6E, 0x74, 0x00, 0x00};
static const GUID IID_IAIMPUIBaseButtonnedEdit = {0x61756942, 0x6173, 0x6542, 0x74, 0x6E, 0x45, 0x64, 0x69, 0x74, 0x00, 0x00};
static const GUID IID_IAIMPUIBaseComboBox = {0x61756942, 0x6173, 0x6543, 0x6F, 0x6D, 0x62, 0x6F, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIBaseEdit = {0x61756942, 0x6173, 0x6545, 0x64, 0x69, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIBBCBox = {0x61756942, 0x4243, 0x426F, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIBevel = {0x61756942, 0x6576, 0x656C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIBrandBox = {0x61756942, 0x7261, 0x6E64, 0x42, 0x6F, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIBrowseFolderDialog = {0x61756942, 0x7277, 0x7346, 0x6C, 0x64, 0x72, 0x44, 0x6C, 0x67, 0x00, 0x00};
static const GUID IID_IAIMPUIButton = {0x61756942, 0x7574, 0x746F, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUICardView = {0x61756943, 0x6172, 0x6456, 0x69, 0x65, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUICardViewEvents = {0x61756943, 0x6172, 0x6456, 0x69, 0x65, 0x77, 0x45, 0x76, 0x6E, 0x74, 0x73};
static const GUID IID_IAIMPUICardViewItem = {0x61756943, 0x6172, 0x6456, 0x69, 0x65, 0x77, 0x49, 0x74, 0x6D, 0x00, 0x00};
static const GUID IID_IAIMPUICategory = {0x61756943, 0x6174, 0x6567, 0x6F, 0x72, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIChangeEvents = {0x61756945, 0x766E, 0x7443, 0x68, 0x61, 0x6E, 0x67, 0x65, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUICheckBox = {0x61756943, 0x6865, 0x636B, 0x42, 0x6F, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUICheckComboBox = {0x61756943, 0x6865, 0x636B, 0x65, 0x64, 0x43, 0x6F, 0x6D, 0x62, 0x6F, 0x00};
static const GUID IID_IAIMPUIColorButton = {0x61756943, 0x6F6C, 0x6F72, 0x42, 0x75, 0x74, 0x74, 0x6F, 0x6E, 0x00, 0x00};
static const GUID IID_IAIMPUIColorPickerDialog = {0x61756943, 0x6F6C, 0x6F72, 0x50, 0x69, 0x63, 0x6B, 0x65, 0x72, 0x00, 0x00};
static const GUID IID_IAIMPUIColorSchema = {0x617569D1, 0x6F6C, 0x6F72, 0x53, 0x63, 0x68, 0x65, 0x6D, 0x61, 0x00, 0x00};
static const GUID IID_IAIMPUIComboBox = {0x61756943, 0x6F6D, 0x626F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIControl = {0x61756943, 0x6F6E, 0x7472, 0x6F, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIDateEdit = {0x61756944, 0x6174, 0x6545, 0x64, 0x69, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIDateTimeEdit = {0x61756944, 0x6174, 0x6554, 0x69, 0x6D, 0x65, 0x45, 0x64, 0x69, 0x74, 0x00};
static const GUID IID_IAIMPUIDPIAwareness = {0x61756944, 0x5049, 0x4177, 0x61, 0x72, 0x65, 0x6E, 0x65, 0x73, 0x73, 0x00};
static const GUID IID_IAIMPUIDrawEvents = {0x61756945, 0x766E, 0x7444, 0x72, 0x61, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIEdit = {0x61756945, 0x6469, 0x7400, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIEditButton = {0x61756945, 0x6469, 0x7442, 0x74, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIFileDialogs = {0x61756946, 0x696C, 0x6544, 0x6C, 0x67, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIFont = {0x61756946, 0x6F6E, 0x7400, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIFontPickerDialog = {0x61756946, 0x6F6E, 0x7450, 0x69, 0x63, 0x6B, 0x65, 0x72, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIForm = {0x61756946, 0x6F72, 0x6D00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIForm2 = {0x61756946, 0x6F72, 0x6D32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIFormEvents = {0x61756946, 0x6F72, 0x6D45, 0x76, 0x65, 0x6E, 0x74, 0x73, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIFormEvents2 = {0x61756946, 0x6F72, 0x6D45, 0x76, 0x65, 0x6E, 0x74, 0x73, 0x32, 0x00, 0x00};
static const GUID IID_IAIMPUIFormEvents3 = {0x61756946, 0x6F72, 0x6D45, 0x76, 0x65, 0x6E, 0x74, 0x73, 0x33, 0x00, 0x00};
static const GUID IID_IAIMPUIGroupBox = {0x61756947, 0x726F, 0x7570, 0x42, 0x6F, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIImage = {0x61756949, 0x6D61, 0x6765, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIImageComboBox = {0x61756949, 0x6D61, 0x6765, 0x43, 0x6F, 0x6D, 0x62, 0x6F, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIImageList = {0x61756949, 0x6D67, 0x4C69, 0x73, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIImageList3 = {0x61756949, 0x6D67, 0x4C69, 0x73, 0x74, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIInputDialog = {0x61756949, 0x6E70, 0x7574, 0x44, 0x6C, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIInputDialogEvents = {0x61756949, 0x6E70, 0x7574, 0x44, 0x6C, 0x67, 0x45, 0x76, 0x6E, 0x74, 0x00};
static const GUID IID_IAIMPUIKeyboardEvents = {0x61756945, 0x766E, 0x744B, 0x65, 0x79, 0x62, 0x6F, 0x61, 0x72, 0x64, 0x00};
static const GUID IID_IAIMPUILabel = {0x6175694C, 0x6162, 0x656C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIMemo = {0x6175694D, 0x656D, 0x6F00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIMenuItem = {0x6175694D, 0x656E, 0x7549, 0x74, 0x65, 0x6D, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIMessageDialog = {0x6175694D, 0x7367, 0x446C, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIMode = {0x61756955, 0x494D, 0x6F64, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIMouseEvents = {0x61756945, 0x766E, 0x744D, 0x6F, 0x75, 0x73, 0x65, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIMouseWheelEvents = {0x61756945, 0x766E, 0x744D, 0x6F, 0x75, 0x73, 0x65, 0x57, 0x68, 0x6C, 0x00};
static const GUID IID_IAIMPUINumericEdit = {0x6175694E, 0x756D, 0x6572, 0x69, 0x63, 0x45, 0x64, 0x69, 0x74, 0x00, 0x00};
static const GUID IID_IAIMPUIPageControl = {0x61756950, 0x6167, 0x6543, 0x74, 0x72, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIPageControlEvents = {0x61756950, 0x6167, 0x6543, 0x74, 0x72, 0x6C, 0x45, 0x76, 0x6E, 0x74, 0x00};
static const GUID IID_IAIMPUIPaintBox = {0x61756950, 0x6169, 0x6E74, 0x42, 0x6F, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIPanel = {0x61756950, 0x616E, 0x656C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIPathChooser = {0x61756950, 0x6174, 0x6843, 0x68, 0x73, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIPlacementEvents = {0x61756945, 0x766E, 0x7442, 0x6F, 0x75, 0x6E, 0x64, 0x73, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIPopupMenu = {0x61756950, 0x6F70, 0x7570, 0x4D, 0x65, 0x6E, 0x75, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIPopupMenuEvents = {0x61756945, 0x766E, 0x7450, 0x6F, 0x70, 0x75, 0x70, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIPopupMenu2 = {0x61756950, 0x6F70, 0x7570, 0x4D, 0x65, 0x6E, 0x75, 0x32, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIProgressBar = {0x61756950, 0x726F, 0x6772, 0x65, 0x73, 0x73, 0x42, 0x61, 0x72, 0x00, 0x00};
static const GUID IID_IAIMPUIProgressDialog = {0x61756950, 0x726F, 0x6772, 0x65, 0x73, 0x73, 0x44, 0x6C, 0x67, 0x00, 0x00};
static const GUID IID_IAIMPUIProgressDialogEvents = {0x61756950, 0x7267, 0x7273, 0x44, 0x6C, 0x67, 0x45, 0x76, 0x6E, 0x74, 0x00};
static const GUID IID_IAIMPUIRadioBox = {0x61756952, 0x6164, 0x696F, 0x42, 0x6F, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIScrollBox = {0x61756953, 0x6372, 0x6F6C, 0x6C, 0x42, 0x6F, 0x78, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUISlider = {0x61756953, 0x6C69, 0x6465, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUISpinEdit = {0x61756953, 0x7069, 0x6E45, 0x64, 0x69, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUISplitter = {0x61756953, 0x706C, 0x6974, 0x74, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUITabControl = {0x61756954, 0x6162, 0x4374, 0x72, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUITabControlEvents = {0x61756954, 0x6162, 0x4374, 0x72, 0x6C, 0x45, 0x76, 0x6E, 0x74, 0x73, 0x00};
static const GUID IID_IAIMPUITabSheet = {0x61756954, 0x6162, 0x5368, 0x65, 0x65, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIToolButton = {0x61756954, 0x6F6F, 0x6C42, 0x75, 0x74, 0x74, 0x6F, 0x6E, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUITimeEdit = {0x61756954, 0x696D, 0x6545, 0x64, 0x69, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUITrayIcon = {0x41494D50, 0x5372, 0x7654, 0x72, 0x61, 0x79, 0x49, 0x63, 0x6F, 0x6E, 0x00};
static const GUID IID_IAIMPUITreeList = {0x61756954, 0x4C00, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUITreeListColumn = {0x61756954, 0x4C43, 0x6F6C, 0x75, 0x6D, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUITreeListCustomDrawEvents = {0x61756954, 0x4C44, 0x7261, 0x77, 0x45, 0x76, 0x6E, 0x74, 0x73, 0x00, 0x00};
static const GUID IID_IAIMPUITreeListDeleteEvents = {0x61756954, 0x4C44, 0x656C, 0x45, 0x76, 0x65, 0x6E, 0x74, 0x73, 0x00, 0x00};
static const GUID IID_IAIMPUITreeListDragSortingEvents = {0x6169544C, 0x4472, 0x6167, 0x53, 0x6F, 0x72, 0x74, 0x45, 0x76, 0x6E, 0x74};
static const GUID IID_IAIMPUITreeListEvents = {0x61756954, 0x4C45, 0x7665, 0x6E, 0x74, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUITreeListGroup = {0x61756954, 0x4C47, 0x726F, 0x75, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUITreeListInplaceEditingEvents = {0x61756954, 0x4C45, 0x6474, 0x45, 0x76, 0x6E, 0x74, 0x73, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUITreeListNode = {0x61756954, 0x4C4E, 0x6F64, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIValidationLabel = {0x61756956, 0x616C, 0x6964, 0x4C, 0x61, 0x62, 0x65, 0x6C, 0x00, 0x00, 0x00};
static const GUID IID_IAIMPUIWinControl = {0x61756957, 0x696E, 0x4374, 0x72, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

/*----------------------------------------------------------------------------------------------------------------------*/
/* Flags																												   */
/*----------------------------------------------------------------------------------------------------------------------*/
  const int AIMPUI_STYLE_LIGHT      = 0;
  const int AIMPUI_STYLE_DARK       = 1;

  // Modifiers Flags
  const int AIMPUI_FLAGS_MOD_ALT    = 1;
  const int AIMPUI_FLAGS_MOD_CTRL   = 2;
  const int AIMPUI_FLAGS_MOD_SHIFT  = 4;

  // Borders Flags
  const int AIMPUI_FLAGS_BORDER_LEFT   = 1;
  const int AIMPUI_FLAGS_BORDER_TOP    = 2;
  const int AIMPUI_FLAGS_BORDER_RIGHT  = 4;
  const int AIMPUI_FLAGS_BORDER_BOTTOM = 8;
  const int AIMPUI_FLAGS_BORDERS_ALL =
  	AIMPUI_FLAGS_BORDER_LEFT  | AIMPUI_FLAGS_BORDER_TOP |
	AIMPUI_FLAGS_BORDER_RIGHT | AIMPUI_FLAGS_BORDER_BOTTOM;
  const int AIMPUI_FLAGS_BORDERS_NONE = 0;

  // Font Style Flags
  const int AIMPUI_FLAGS_FONT_BOLD      = 1;
  const int AIMPUI_FLAGS_FONT_ITALIC    = 2;
  const int AIMPUI_FLAGS_FONT_UNDERLINE = 4;
  const int AIMPUI_FLAGS_FONT_STRIKEOUT = 8;

  // Modal Result Flags
  const int AIMPUI_FLAGS_MODALRESULT_NONE     = 0;
  const int AIMPUI_FLAGS_MODALRESULT_OK       = 1;
  const int AIMPUI_FLAGS_MODALRESULT_CANCEL   = 2;
  const int AIMPUI_FLAGS_MODALRESULT_ABORT    = 3;
  const int AIMPUI_FLAGS_MODALRESULT_RETRY    = 4;
  const int AIMPUI_FLAGS_MODALRESULT_IGNORE   = 5;
  const int AIMPUI_FLAGS_MODALRESULT_YES      = 6;
  const int AIMPUI_FLAGS_MODALRESULT_NO       = 7;
  const int AIMPUI_FLAGS_MODALRESULT_CLOSE    = 8;
  const int AIMPUI_FLAGS_MODALRESULT_HELP     = 9;
  const int AIMPUI_FLAGS_MODALRESULT_TRYAGAIN = 10;
  const int AIMPUI_FLAGS_MODALRESULT_CONTINUE = 11;

  // Edit Mask Flags
  const int AIMPUI_FLAGS_EDITMASK_TEXT    = 0;
  const int AIMPUI_FLAGS_EDITMASK_INTEGER = 1;
  const int AIMPUI_FLAGS_EDITMASK_FLOAT   = 2;

  // Form's BorderStyle
  const int AIMPUI_FLAGS_BORDERSTYLE_SIZEABLE          = 0;
  const int AIMPUI_FLAGS_BORDERSTYLE_SINGLE            = 1;
  const int AIMPUI_FLAGS_BORDERSTYLE_DIALOG            = 2;
  const int AIMPUI_FLAGS_BORDERSTYLE_TOOLWINDOW        = 3;
  const int AIMPUI_FLAGS_BORDERSTYLE_TOOLWINDOWSIZABLE = 4;
  const int AIMPUI_FLAGS_BORDERSTYLE_NONE              = 5;

  // Form's BorderIcons
  const int AIMPUI_FLAGS_BORDERICON_SYSTEMMENU         = 1;
  const int AIMPUI_FLAGS_BORDERICON_MINIMIZE           = 2;
  const int AIMPUI_FLAGS_BORDERICON_MAXIMIZE           = 4;

  // Flags for IAIMPUIBrowseFolderDialog
  const int AIMPUI_FLAGS_BROWSEFOLDER_CUSTOMPATHS = 1;
  const int AIMPUI_FLAGS_BROWSEFOLDER_MULTISELECT = 2;

  // Flags for IAIMPUIColorPickerDialog
  const int AIMPUI_FLAGS_COLORPICKER_ALLOWALPHA = 1;

  // Button Styles
  const int AIMPUI_FLAGS_BUTTON_STYLE_NORMAL          = 0;
  const int AIMPUI_FLAGS_BUTTON_STYLE_DROPDOWN        = 1;
  const int AIMPUI_FLAGS_BUTTON_STYLE_DROPDOWNBUTTON  = 2;

  // Flags for IAIMPUITreeListNode.Get
  const int AIMPUI_FLAGS_TL_NODE_GET_PARENT      = -1;
  const int AIMPUI_FLAGS_TL_NODE_GET_NEXTSIBLING = -2;
  const int AIMPUI_FLAGS_TL_NODE_GET_PREVSIBLING = -3;

  // Flags for IAIMPUITreeList.SortBy
  const int AIMPUI_FLAGS_TL_SORTBY_FLAG_AUTO       = 0;
  const int AIMPUI_FLAGS_TL_SORTBY_FLAG_ASCENDING  = 1;
  const int AIMPUI_FLAGS_TL_SORTBY_FLAG_DESCENDING = 2;

  // Flags for InsertTo for IAIMPUITreeListDragDropEvents
  const int AIMPUI_FLAGS_TL_INSERTTO_AFTER  = 0;
  const int AIMPUI_FLAGS_TL_INSERTTO_BEFORE = 1;
  const int AIMPUI_FLAGS_TL_INSERTTO_INTO   = 2;

  // Flags for AIMPUI_TL_PROPID_GRID_LINES property
  const int AIMPUI_FLAGS_TL_GRIDLINE_VERTICAL   = 1;
  const int AIMPUI_FLAGS_TL_GRIDLINE_HORIZONTAL = 2;

  // Check State
  const int AIMPUI_CHECKSTATE_UNCHECKED = 0;
  const int AIMPUI_CHECKSTATE_CHECKED   = 1;
  const int AIMPUI_CHECKSTATE_MIXED     = 2;

  // ComboBox Styles
  const int AIMPUI_COMBOBOX_STYLE_EDIT = 0;
  const int AIMPUI_COMBOBOX_STYLE_LIST = 1;

  // Slider Labels Position
  const int AIMPUI_SLIDER_LABELPOSITION_AROUND_EDGES = 0;
  const int AIMPUI_SLIDER_LABELPOSITION_BELOW = 1;
  const int AIMPUI_SLIDER_LABELPOSITION_ABOVE = 2;

  // CheckModes
  const int AIMPUI_CHECKMODE_NONE 	  	    = 0;
  const int AIMPUI_CHECKMODE_CUSTOM  	    = 1;
  const int AIMPUI_CHECKMODE_TOGGLE_ENABLED = 2;
  const int AIMPUI_CHECKMODE_MINIMIZE  		= 3; // v6.0

  // Alignment
  const int AIMPUI_ALIGN_NEAR   = 0; // left/top
  const int AIMPUI_ALIGN_FAR    = 1; // right/bottom
  const int AIMPUI_ALIGN_CENTER = 2; // center

  // ValidationLabel's glyph indexes
  const int AIMPUI_VALIDATIONLABEL_GLYPH_OK               = 0;
  const int AIMPUI_VALIDATIONLABEL_GLYPH_WARNING          = 1;
  const int AIMPUI_VALIDATIONLABEL_GLYPH_ERROR            = 2;
  const int AIMPUI_VALIDATIONLABEL_GLYPH_CRITICAL_WARNING = 3;

  // Position of Tabs in PageControl/TabControl
  const int AIMPUI_TABS_POSITION_TOP    = 0;
  const int AIMPUI_TABS_POSITION_BOTTOM = 0;

  // Style of Tabs in PageControl/TabControl
  const int AIMPUI_TABS_STYLE_CLASSIC    = 0;
  const int AIMPUI_TABS_STYLE_BUTTONS	 = 1;
  const int AIMPUI_TABS_STYLE_HYBRID	 = 2;

/*----------------------------------------------------------------------------------------------------------------------*/
/* Property IDs																								   	   		*/
/*----------------------------------------------------------------------------------------------------------------------*/

  // PropID for IAIMPUIControl
  const int AIMPUI_CONTROL_PROPID_CUSTOM     = 0;
  const int AIMPUI_CONTROL_PROPID_ENABLED    = 1;
  const int AIMPUI_CONTROL_PROPID_HINT       = 2;
  const int AIMPUI_CONTROL_PROPID_NAME       = 3;
  const int AIMPUI_CONTROL_PROPID_PARENT     = 4;
  const int AIMPUI_CONTROL_PROPID_POPUPMENU  = 5;
  const int AIMPUI_CONTROL_PROPID_VISIBLE    = 6;
  const int AIMPUI_CONTROL_MAX_PROPID        = 20;

  // PropID for IAIMPUIWinControl
  const int AIMPUI_WINCONTROL_PROPID_FOCUSED  = AIMPUI_CONTROL_MAX_PROPID + 1;
  const int AIMPUI_WINCONTROL_PROPID_TABORDER = AIMPUI_CONTROL_MAX_PROPID + 2;
  const int AIMPUI_WINCONTROL_MAX_PROPID      = AIMPUI_CONTROL_MAX_PROPID + 10;

  // PropID for IAIMPUIBaseEdit
  const int AIMPUI_BASEEDIT_PROPID_BORDERS   = AIMPUI_WINCONTROL_MAX_PROPID + 1;
  const int AIMPUI_BASEEDIT_PROPID_MAXLENGTH = AIMPUI_WINCONTROL_MAX_PROPID + 2;
  const int AIMPUI_BASEEDIT_PROPID_READONLY  = AIMPUI_WINCONTROL_MAX_PROPID + 3;
  const int AIMPUI_BASEEDIT_PROPID_SELLENGTH = AIMPUI_WINCONTROL_MAX_PROPID + 4;
  const int AIMPUI_BASEEDIT_PROPID_SELSTART  = AIMPUI_WINCONTROL_MAX_PROPID + 5;
  const int AIMPUI_BASEEDIT_PROPID_SELTEXT   = AIMPUI_WINCONTROL_MAX_PROPID + 6;
  const int AIMPUI_BASEEDIT_PROPID_TEXT      = AIMPUI_WINCONTROL_MAX_PROPID + 7;
  const int AIMPUI_BASEEDIT_MAX_PROPID       = AIMPUI_WINCONTROL_MAX_PROPID + 10;

  // PropID for IAIMPUIBBCBox
  const int AIMPUI_BBCBOX_PROPID_BORDERS     = AIMPUI_WINCONTROL_MAX_PROPID + 1;
  const int AIMPUI_BBCBOX_PROPID_TEXT        = AIMPUI_WINCONTROL_MAX_PROPID + 2;
  const int AIMPUI_BBCBOX_PROPID_TRANSPARENT = AIMPUI_WINCONTROL_MAX_PROPID + 3;
  const int AIMPUI_BBCBOX_PROPID_WORDWRAP    = AIMPUI_WINCONTROL_MAX_PROPID + 4;
  const int AIMPUI_BBCBOX_PROPID_AUTOSCROLL  = AIMPUI_WINCONTROL_MAX_PROPID + 5;
  const int AIMPUI_BBCBOX_PROPID_TEXTALIGN   = AIMPUI_WINCONTROL_MAX_PROPID + 6;
  const int AIMPUI_BBCBOX_PROPID_TEXTCOLOR   = AIMPUI_WINCONTROL_MAX_PROPID + 7;
  const int AIMPUI_BBCBOX_PROPID_PADDING     = AIMPUI_WINCONTROL_MAX_PROPID + 8;

  // PropID for IAIMPUIBevel
  const int AIMPUI_BEVEL_PROPID_BORDERS = AIMPUI_CONTROL_MAX_PROPID + 1;

  // PropID for IAIMPUIBrandBox
  const int AIMPUI_BRANDBOX_PROPID_CAPTION = AIMPUI_WINCONTROL_MAX_PROPID + 1;

  // PropID for IAIMPUIButton
  const int AIMPUI_BUTTON_PROPID_CAPTION      = AIMPUI_WINCONTROL_MAX_PROPID + 1;
  const int AIMPUI_BUTTON_PROPID_FOCUSABLE    = AIMPUI_WINCONTROL_MAX_PROPID + 2;
  const int AIMPUI_BUTTON_PROPID_DEFAULT      = AIMPUI_WINCONTROL_MAX_PROPID + 3;
  const int AIMPUI_BUTTON_PROPID_DROPDOWNMENU = AIMPUI_WINCONTROL_MAX_PROPID + 4;
  const int AIMPUI_BUTTON_PROPID_IMAGEINDEX   = AIMPUI_WINCONTROL_MAX_PROPID + 5;
  const int AIMPUI_BUTTON_PROPID_IMAGELIST    = AIMPUI_WINCONTROL_MAX_PROPID + 6;
  const int AIMPUI_BUTTON_PROPID_MODALRESULT  = AIMPUI_WINCONTROL_MAX_PROPID + 7;
  const int AIMPUI_BUTTON_PROPID_STYLE        = AIMPUI_WINCONTROL_MAX_PROPID + 8;
  const int AIMPUI_BUTTON_PROPID_TEXTSTYLE    = AIMPUI_WINCONTROL_MAX_PROPID + 9;  // v5.40
  const int AIMPUI_BUTTON_PROPID_DOWN		  = AIMPUI_WINCONTROL_MAX_PROPID + 10; // v6.00

  // PropID for IAIMPUIBaseButtonnedEdit
  const int AIMPUI_BUTTONEDEDIT_PROPID_BUTTONSIMAGES = AIMPUI_BASEEDIT_MAX_PROPID + 1;
  const int AIMPUI_BUTTONEDEDIT_MAX_PROPID           = AIMPUI_BASEEDIT_MAX_PROPID + 10;

  // PropID for IAIMPUIColorButton
  const int AIMPUI_COLORBUTTON_PROPID_CAPTION          = AIMPUI_WINCONTROL_MAX_PROPID + 1; // v6.00
  const int AIMPUI_COLORBUTTON_PROPID_TEXTSTYLE        = AIMPUI_WINCONTROL_MAX_PROPID + 2; // v6.00
  const int AIMPUI_COLORBUTTON_PROPID_VALUE            = AIMPUI_WINCONTROL_MAX_PROPID + 3; // v6.00, Int64 (ARGB)
  const int AIMPUI_COLORBUTTON_PROPID_VALUE_ALLOWALPHA = AIMPUI_WINCONTROL_MAX_PROPID + 4; // v6.00, Int64 (ARGB)

  // PropID for IAIMPUIEditButton
  const int AIMPUI_EDITBUTTON_PROPID_CUSTOM     = 0;
  const int AIMPUI_EDITBUTTON_PROPID_CAPTION    = 1;
  const int AIMPUI_EDITBUTTON_PROPID_ENABLED    = 2;
  const int AIMPUI_EDITBUTTON_PROPID_HINT       = 3;
  const int AIMPUI_EDITBUTTON_PROPID_INDEX      = 4;
  const int AIMPUI_EDITBUTTON_PROPID_IMAGEINDEX = 5;
  const int AIMPUI_EDITBUTTON_PROPID_VISIBLE    = 6;
  const int AIMPUI_EDITBUTTON_PROPID_WIDTH      = 7;

  // PropID for IAIMPUICategory
  const int AIMPUI_CATEGORY_PROPID_AUTOSIZE = AIMPUI_WINCONTROL_MAX_PROPID + 1;
  const int AIMPUI_CATEGORY_PROPID_CAPTION  = AIMPUI_WINCONTROL_MAX_PROPID + 2;

  // PropID for IAIMPUICheckBox and IAIMPUIRadioBox
  const int AIMPUI_CHECKBOX_PROPID_AUTOSIZE = AIMPUI_WINCONTROL_MAX_PROPID + 1; // default: true
  const int AIMPUI_CHECKBOX_PROPID_CAPTION  = AIMPUI_WINCONTROL_MAX_PROPID + 2;
  const int AIMPUI_CHECKBOX_PROPID_STATE    = AIMPUI_WINCONTROL_MAX_PROPID + 3; // ref.AIMPUI_CHECKSTATE_XXX
  const int AIMPUI_CHECKBOX_PROPID_WORDWRAP = AIMPUI_WINCONTROL_MAX_PROPID + 4;

  // PropID for IAIMPUIComboBox
  const int AIMPUI_COMBOBOX_PROPID_AUTOCOMPLETE   = AIMPUI_BUTTONEDEDIT_MAX_PROPID + 1;
  const int AIMPUI_COMBOBOX_PROPID_ITEMINDEX      = AIMPUI_BUTTONEDEDIT_MAX_PROPID + 2;
  const int AIMPUI_COMBOBOX_PROPID_ITEMOBJECT     = AIMPUI_BUTTONEDEDIT_MAX_PROPID + 3;
  const int AIMPUI_COMBOBOX_PROPID_TEXT           = AIMPUI_BUTTONEDEDIT_MAX_PROPID + 4;
  const int AIMPUI_COMBOBOX_PROPID_STYLE          = AIMPUI_BUTTONEDEDIT_MAX_PROPID + 5; // ref.AIMPUI_COMBOBOX_STYLE_XXX

  // PropID for IAIMPUICheckComboBox
  const int AIMPUI_CHECKCOMBO_PROPID_TEXT      = AIMPUI_BUTTONEDEDIT_MAX_PROPID + 1;

  // PropID for IAIMPUIEdit
  const int AIMPUI_EDIT_PROPID_PASSWORDCHAR    = AIMPUI_BUTTONEDEDIT_MAX_PROPID + 2;
  const int AIMPUI_EDIT_PROPID_TEXTHINT        = AIMPUI_BUTTONEDEDIT_MAX_PROPID + 3;
  const int AIMPUI_EDIT_MAX_PROPID             = AIMPUI_BUTTONEDEDIT_MAX_PROPID + 10;

  // PropID for IAIMPUINumericEdit
  const int AIMPUI_NUMERICEDIT_PROPID_MASK     = AIMPUI_EDIT_MAX_PROPID + 1; // ref.AIMPUI_NUMERICEDIT_XXX
  const int AIMPUI_NUMERICEDIT_PROPID_VALUE    = AIMPUI_EDIT_MAX_PROPID + 2;
  const int AIMPUI_NUMERICEDIT_MASK_DECIMALS   = 1;
  const int AIMPUI_NUMERICEDIT_MASK_NEGATIVE   = 2;
  const int AIMPUI_NUMERICEDIT_MASK_ZERO       = 4;

  // PropID for IAIMPUIDateEdit / IAIMPUIDateTimeEdit
  const int AIMPUI_DATEEDIT_PROPID_VALUE       = AIMPUI_BUTTONEDEDIT_MAX_PROPID + 1;

  // PropID for IAIMPUIGroupBox
  const int AIMPUI_GROUPBOX_PROPID_AUTOSIZE    = AIMPUI_WINCONTROL_MAX_PROPID + 1;
  const int AIMPUI_GROUPBOX_PROPID_BORDERS     = AIMPUI_WINCONTROL_MAX_PROPID + 2;
  const int AIMPUI_GROUPBOX_PROPID_TRANSPARENT = AIMPUI_WINCONTROL_MAX_PROPID + 3;
  const int AIMPUI_GROUPBOX_PROPID_CHECKMODE   = AIMPUI_WINCONTROL_MAX_PROPID + 4; // ref.AIMPUI_CHECKMODE_XXX
  const int AIMPUI_GROUPBOX_PROPID_CHECKED     = AIMPUI_WINCONTROL_MAX_PROPID + 5; // ref.AIMPUI_CHECKSTATE_XXX
  const int AIMPUI_GROUPBOX_PROPID_CAPTION     = AIMPUI_WINCONTROL_MAX_PROPID + 6;

  // PropID for IAIMPUIImage
  const int AIMPUI_IMAGE_PROPID_IMAGE            = AIMPUI_WINCONTROL_MAX_PROPID + 1;
  const int AIMPUI_IMAGE_PROPID_IMAGESTRETCHMODE = AIMPUI_WINCONTROL_MAX_PROPID + 2; // ref. AIMP_IMAGE_DRAW_STRETCHMODE_XXX (apiObjects)
  const int AIMPUI_IMAGE_PROPID_IMAGEINDEX       = AIMPUI_WINCONTROL_MAX_PROPID + 3;
  const int AIMPUI_IMAGE_PROPID_IMAGELIST        = AIMPUI_WINCONTROL_MAX_PROPID + 4;

  // PropID for IAIMPUIImageComboBox
  const int AIMPUI_IMAGECOMBOBOX_PROPID_IMAGELIST = AIMPUI_BUTTONEDEDIT_MAX_PROPID + 1;
  const int AIMPUI_IMAGECOMBOBOX_PROPID_ITEMINDEX = AIMPUI_BUTTONEDEDIT_MAX_PROPID + 2;

  // PropID for IAIMPUILabel
  const int AIMPUI_LABEL_PROPID_AUTOSIZE       = AIMPUI_CONTROL_MAX_PROPID + 1;
  const int AIMPUI_LABEL_PROPID_LINE           = AIMPUI_CONTROL_MAX_PROPID + 2;
  const int AIMPUI_LABEL_PROPID_TEXT           = AIMPUI_CONTROL_MAX_PROPID + 3;
  const int AIMPUI_LABEL_PROPID_TEXTALIGN      = AIMPUI_CONTROL_MAX_PROPID + 4; // ref.AIMPUI_ALIGN_XXX
  const int AIMPUI_LABEL_PROPID_TEXTALIGNVERT  = AIMPUI_CONTROL_MAX_PROPID + 5; // ref.AIMPUI_ALIGN_XXX
  const int AIMPUI_LABEL_PROPID_TEXTCOLOR      = AIMPUI_CONTROL_MAX_PROPID + 6;
  const int AIMPUI_LABEL_PROPID_TEXTSTYLE      = AIMPUI_CONTROL_MAX_PROPID + 7;
  const int AIMPUI_LABEL_PROPID_TRANSPARENT    = AIMPUI_CONTROL_MAX_PROPID + 8;
  const int AIMPUI_LABEL_PROPID_URL            = AIMPUI_CONTROL_MAX_PROPID + 9;
  const int AIMPUI_LABEL_PROPID_WORDWRAP       = AIMPUI_CONTROL_MAX_PROPID + 10;
  const int AIMPUI_LABEL_PROPID_TEXTSIZE       = AIMPUI_CONTROL_MAX_PROPID + 11; // v6.0, Int32
  const int AIMPUI_LABEL_MAX_PROPID            = AIMPUI_CONTROL_MAX_PROPID + 20;

  // PropID for IAIMPUIMemo
  const int AIMPUI_MEMO_PROPID_CARET_XY = AIMPUI_BASEEDIT_MAX_PROPID + 1;

  // PropID for IAIMPUITabSheet
  const int AIMPUI_TABSHEET_PROPID_CAPTION   = AIMPUI_WINCONTROL_MAX_PROPID + 1;
  const int AIMPUI_TABSHEET_PROPID_INDEX     = AIMPUI_WINCONTROL_MAX_PROPID + 2;
  const int AIMPUI_TABSHEET_PROPID_VISIBLE   = AIMPUI_WINCONTROL_MAX_PROPID + 3;

  // PropID for IAIMPUIPageControl
  const int AIMPUI_PAGECONTROL_PROPID_ACTIVE 	  = AIMPUI_WINCONTROL_MAX_PROPID + 1;
  const int AIMPUI_PAGECONTROL_PROPID_TABPOSITION = AIMPUI_WINCONTROL_MAX_PROPID + 2; // v6.00, ref. AIMPUI_TABS_POSITION_XXX
  const int AIMPUI_PAGECONTROL_PROPID_STYLE       = AIMPUI_WINCONTROL_MAX_PROPID + 3; // v6.00, ref. AIMPUI_TABS_STYLE_XXX

  // PropID for IAIMPUIPanel
  const int AIMPUI_PANEL_PROPID_AUTOSIZE    = AIMPUI_WINCONTROL_MAX_PROPID + 1;
  const int AIMPUI_PANEL_PROPID_BORDERS     = AIMPUI_WINCONTROL_MAX_PROPID + 2;
  const int AIMPUI_PANEL_PROPID_TRANSPARENT = AIMPUI_WINCONTROL_MAX_PROPID + 3;
  const int AIMPUI_PANEL_PROPID_PADDING     = AIMPUI_WINCONTROL_MAX_PROPID + 4;

  // PropID for IAIMPUIProgressBar
  const int AIMPUI_PROGRESSBAR_PROPID_INDETERMINATE = AIMPUI_WINCONTROL_MAX_PROPID + 1;
  const int AIMPUI_PROGRESSBAR_PROPID_MAX           = AIMPUI_WINCONTROL_MAX_PROPID + 2;
  const int AIMPUI_PROGRESSBAR_PROPID_MIN           = AIMPUI_WINCONTROL_MAX_PROPID + 3;
  const int AIMPUI_PROGRESSBAR_PROPID_PROGRESS      = AIMPUI_WINCONTROL_MAX_PROPID + 4;
  const int AIMPUI_PROGRESSBAR_PROPID_AUTOSIZE      = AIMPUI_WINCONTROL_MAX_PROPID + 5; // v6.00

  // PropID for IAIMPUIScrollBox
  const int AIMPUI_SCROLLBOX_PROPID_BORDERS    = AIMPUI_WINCONTROL_MAX_PROPID + 1;

  // PropID for IAIMPUISlider
  const int AIMPUI_SLIDER_PROPID_HORIZONTAL          = AIMPUI_WINCONTROL_MAX_PROPID + 1;
  const int AIMPUI_SLIDER_PROPID_MARKS               = AIMPUI_WINCONTROL_MAX_PROPID + 2;
  const int AIMPUI_SLIDER_PROPID_PAGESIZE            = AIMPUI_WINCONTROL_MAX_PROPID + 3;
  const int AIMPUI_SLIDER_PROPID_TRANSPARENT         = AIMPUI_WINCONTROL_MAX_PROPID + 4;
  const int AIMPUI_SLIDER_PROPID_VALUE               = AIMPUI_WINCONTROL_MAX_PROPID + 5;
  const int AIMPUI_SLIDER_PROPID_VALUEDEFAULT        = AIMPUI_WINCONTROL_MAX_PROPID + 6;
  const int AIMPUI_SLIDER_PROPID_VALUEMAX            = AIMPUI_WINCONTROL_MAX_PROPID + 7;
  const int AIMPUI_SLIDER_PROPID_VALUEMIN            = AIMPUI_WINCONTROL_MAX_PROPID + 8;
  const int AIMPUI_SLIDER_PROPID_AUTOSIZE            = AIMPUI_WINCONTROL_MAX_PROPID + 9;  // v6.00
  const int AIMPUI_SLIDER_PROPID_LABELPOSITION       = AIMPUI_WINCONTROL_MAX_PROPID + 10; // v6.00 // ref. AIMPUI_SLIDER_LABELPOSITION_XXX
  const int AIMPUI_SLIDER_PROPID_LABELVALUE          = AIMPUI_WINCONTROL_MAX_PROPID + 11; // v6.00
  const int AIMPUI_SLIDER_PROPID_LABELVALUE_WIDTH    = AIMPUI_WINCONTROL_MAX_PROPID + 12; // v6.00
  const int AIMPUI_SLIDER_PROPID_LABELVALUEMIN       = AIMPUI_WINCONTROL_MAX_PROPID + 13; // v6.00
  const int AIMPUI_SLIDER_PROPID_LABELVALUEMIN_WIDTH = AIMPUI_WINCONTROL_MAX_PROPID + 14; // v6.00
  const int AIMPUI_SLIDER_PROPID_LABELVALUEMAX       = AIMPUI_WINCONTROL_MAX_PROPID + 15; // v6.00
  const int AIMPUI_SLIDER_PROPID_LABELVALUEMAX_WIDTH = AIMPUI_WINCONTROL_MAX_PROPID + 16; // v6.00
  
  // PropID for IAIMPUISplitter
  const int AIMPUI_SPLITTER_PROPID_CANHIDE     = AIMPUI_WINCONTROL_MAX_PROPID + 1;
  const int AIMPUI_SPLITTER_PROPID_CONTROL     = AIMPUI_WINCONTROL_MAX_PROPID + 2;

  // PropID for IAIMPUISpinEdit
  const int AIMPUI_SPINEDIT_PROPID_DISPLAYMASK = AIMPUI_WINCONTROL_MAX_PROPID + 1;
  const int AIMPUI_SPINEDIT_PROPID_INCREMENT   = AIMPUI_WINCONTROL_MAX_PROPID + 2;
  const int AIMPUI_SPINEDIT_PROPID_MAXVALUE    = AIMPUI_WINCONTROL_MAX_PROPID + 3;
  const int AIMPUI_SPINEDIT_PROPID_MINVALUE    = AIMPUI_WINCONTROL_MAX_PROPID + 4;
  const int AIMPUI_SPINEDIT_PROPID_VALUE       = AIMPUI_WINCONTROL_MAX_PROPID + 5;
  const int AIMPUI_SPINEDIT_PROPID_VALUETYPE   = AIMPUI_WINCONTROL_MAX_PROPID + 6; // ref.to AIMPUI_SPINEDIT_VALUETYPE_XXX

  const int AIMPUI_SPINEDIT_VALUETYPE_INTEGER  = 0;
  const int AIMPUI_SPINEDIT_VALUETYPE_FLOAT    = 1;

  // PropID for IAIMPUITabControl
  const int AIMPUI_TABCONTROL_PROPID_ACTIVETABINDEX = AIMPUI_WINCONTROL_MAX_PROPID + 1;
  const int AIMPUI_TABCONTROL_PROPID_TABPOSITION    = AIMPUI_WINCONTROL_MAX_PROPID + 2; // v6.0, ref. AIMPUI_TABS_POSITION_XXX
  const int AIMPUI_TABCONTROL_PROPID_STYLE          = AIMPUI_WINCONTROL_MAX_PROPID + 3; // v6.0, ref. AIMPUI_TABS_STYLE_XXX

  // PropID for IAIMPUITimeEdit
  const int AIMPUI_TIMEEDIT_PROPID_VALUE = AIMPUI_WINCONTROL_MAX_PROPID + 1;

  // PropID for IAIMPUITreeListColumn
  const int AIMPUI_TL_COLUMN_PROPID_CAN_RESIZE      = 1;
  const int AIMPUI_TL_COLUMN_PROPID_CAPTION         = 2;
  const int AIMPUI_TL_COLUMN_PROPID_DRAWINDEX       = 3;
  const int AIMPUI_TL_COLUMN_PROPID_IMAGEINDEX      = 4;
  const int AIMPUI_TL_COLUMN_PROPID_INDEX           = 5;
  const int AIMPUI_TL_COLUMN_PROPID_TEXT_ALIGNMENT  = 6;
  const int AIMPUI_TL_COLUMN_PROPID_TEXT_VISIBLE    = 7;
  const int AIMPUI_TL_COLUMN_PROPID_VISIBLE         = 8;
  const int AIMPUI_TL_COLUMN_PROPID_WIDTH           = 9;

  // PropID for IAIMPUITreeListGroup
  const int AIMPUI_TL_GROUP_PROPID_CAPTION      = 1;
  const int AIMPUI_TL_GROUP_PROPID_CHECKSTATE   = 2;  // ref.AIMPUI_CHECKSTATE_XXX
  const int AIMPUI_TL_GROUP_PROPID_EXPANDED     = 3;
  const int AIMPUI_TL_GROUP_PROPID_INDEX        = 4;
  const int AIMPUI_TL_GROUP_PROPID_SELECTED     = 5;

  // PropID for IAIMPUITreeListNode
  const int AIMPUI_TL_NODE_PROPID_ABS_VISIBLE_INDEX     = 0;
  const int AIMPUI_TL_NODE_PROPID_CHECK_ENABLED         = 1;
  const int AIMPUI_TL_NODE_PROPID_CHECKED               = 2;
  const int AIMPUI_TL_NODE_PROPID_CHILDREN_CHECK_STATE  = 3; // ref.AIMPUI_CHECKSTATE_XXX
  const int AIMPUI_TL_NODE_PROPID_EXPANDED              = 4;
  const int AIMPUI_TL_NODE_PROPID_IMAGEINDEX            = 5;
  const int AIMPUI_TL_NODE_PROPID_INDEX                 = 6;
  const int AIMPUI_TL_NODE_PROPID_LEVEL                 = 7;
  const int AIMPUI_TL_NODE_PROPID_SELECTED              = 8;
  const int AIMPUI_TL_NODE_PROPID_TAG                   = 9;

  // PropID for IAIMPUITreeList
  const int AIMPUI_TL_PROPID_ALLOW_DELETING             = AIMPUI_WINCONTROL_MAX_PROPID + 1;
  const int AIMPUI_TL_PROPID_ALLOW_EDITING              = AIMPUI_WINCONTROL_MAX_PROPID + 2;
  const int AIMPUI_TL_PROPID_ALLOW_FOCUS_CELLS          = AIMPUI_WINCONTROL_MAX_PROPID + 3;
  const int AIMPUI_TL_PROPID_ALLOW_MULTISELECT          = AIMPUI_WINCONTROL_MAX_PROPID + 4;
  const int AIMPUI_TL_PROPID_ALLOW_REORDER_COLUMNS      = AIMPUI_WINCONTROL_MAX_PROPID + 5;
  const int AIMPUI_TL_PROPID_ALLOW_SHOWWHIDE_COLUMNS    = AIMPUI_WINCONTROL_MAX_PROPID + 6;
  const int AIMPUI_TL_PROPID_AUTOCHECK_SUBNODES         = AIMPUI_WINCONTROL_MAX_PROPID + 7;
  const int AIMPUI_TL_PROPID_BORDERS                    = AIMPUI_WINCONTROL_MAX_PROPID + 8;
  const int AIMPUI_TL_PROPID_CELL_HINTS                 = AIMPUI_WINCONTROL_MAX_PROPID + 9;
  const int AIMPUI_TL_PROPID_CHECKBOXES                 = AIMPUI_WINCONTROL_MAX_PROPID + 10;
  const int AIMPUI_TL_PROPID_COLUMN_AUTOWIDTH           = AIMPUI_WINCONTROL_MAX_PROPID + 11;
  const int AIMPUI_TL_PROPID_COLUMN_HEIGHT              = AIMPUI_WINCONTROL_MAX_PROPID + 12;
  const int AIMPUI_TL_PROPID_COLUMN_IMAGES              = AIMPUI_WINCONTROL_MAX_PROPID + 13;
  const int AIMPUI_TL_PROPID_COLUMN_VISIBLE             = AIMPUI_WINCONTROL_MAX_PROPID + 14;
  const int AIMPUI_TL_PROPID_DRAG_SORTING               = AIMPUI_WINCONTROL_MAX_PROPID + 15;
  const int AIMPUI_TL_PROPID_DRAG_SORTING_CHANGE_LEVEL  = AIMPUI_WINCONTROL_MAX_PROPID + 16;
  const int AIMPUI_TL_PROPID_GRID_LINES                 = AIMPUI_WINCONTROL_MAX_PROPID + 20;
  const int AIMPUI_TL_PROPID_GROUP_HEIGHT               = AIMPUI_WINCONTROL_MAX_PROPID + 21;
  const int AIMPUI_TL_PROPID_GROUPS                     = AIMPUI_WINCONTROL_MAX_PROPID + 22;
  const int AIMPUI_TL_PROPID_GROUPS_ALLOW_COLLAPSE      = AIMPUI_WINCONTROL_MAX_PROPID + 23;
  const int AIMPUI_TL_PROPID_GROUPS_FOCUS_ON_CLICK      = AIMPUI_WINCONTROL_MAX_PROPID + 24;
  const int AIMPUI_TL_PROPID_HOT_TRACK                  = AIMPUI_WINCONTROL_MAX_PROPID + 25;
  const int AIMPUI_TL_PROPID_INCSEARCH_COLUMN_INDEX     = AIMPUI_WINCONTROL_MAX_PROPID + 26;
  const int AIMPUI_TL_PROPID_NODE_HEIGHT                = AIMPUI_WINCONTROL_MAX_PROPID + 27;
  const int AIMPUI_TL_PROPID_NODE_IMAGE_ALIGNMENT       = AIMPUI_WINCONTROL_MAX_PROPID + 28;
  const int AIMPUI_TL_PROPID_NODE_IMAGES                = AIMPUI_WINCONTROL_MAX_PROPID + 29;
  const int AIMPUI_TL_PROPID_SORTING_MODE               = AIMPUI_WINCONTROL_MAX_PROPID + 30;
  const int AIMPUI_TL_MAX_PROPID                        = AIMPUI_WINCONTROL_MAX_PROPID + 60;

  // PropID for IAIMPUICardView (inherited from IAIMPUITreeList)
  const int AIMPUI_CV_PROPID_CARD_WIDTH                 = AIMPUI_TL_MAX_PROPID + 1; // 0 - table layout
  const int AIMPUI_CV_PROPID_GLYPH_FRAME                = AIMPUI_TL_MAX_PROPID + 2; // Int32 (0/1 - boolean)
  const int AIMPUI_CV_PROPID_GLYPH_SIZE                 = AIMPUI_TL_MAX_PROPID + 3; // Int32 (Low: X, High: Y)

  // PropID for IAIMPUICardViewItem (inherited from IAIMPUITreeListNode)
  const int AIMPUI_CV_ITEM_PROPID_CAN_DELETE            = 20;
  const int AIMPUI_CV_ITEM_PROPID_GLYPH                 = 21;
  const int AIMPUI_CV_ITEM_PROPID_SETTINGS_BUTTON       = 22;

  // PropID for IAIMPUIValidationLabel
  const int AIMPUI_VALIDATIONLABEL_PROPID_GLYPH = AIMPUI_LABEL_MAX_PROPID + 1; // ref.AIMPUI_VALIDATIONLABEL_GLYPH_XXX

  // PropID for IAIMPUIForm
  const int AIMPUI_FORM_PROPID_BORDERICONS   = AIMPUI_WINCONTROL_MAX_PROPID + 1;
  const int AIMPUI_FORM_PROPID_BORDERSTYLE   = AIMPUI_WINCONTROL_MAX_PROPID + 2;
  const int AIMPUI_FORM_PROPID_CAPTION       = AIMPUI_WINCONTROL_MAX_PROPID + 3;
  const int AIMPUI_FORM_PROPID_CLOSEBYESCAPE = AIMPUI_WINCONTROL_MAX_PROPID + 4;
  const int AIMPUI_FORM_PROPID_ICON          = AIMPUI_WINCONTROL_MAX_PROPID + 5;
  const int AIMPUI_FORM_PROPID_PADDING       = AIMPUI_WINCONTROL_MAX_PROPID + 6;
  const int AIMPUI_FORM_PROPID_SHOWONTASKBAR = AIMPUI_WINCONTROL_MAX_PROPID + 7;
  const int AIMPUI_FORM_PROPID_STYLE         = AIMPUI_WINCONTROL_MAX_PROPID + 8;
  const int AIMPUI_FORM_PROPID_STAYONTOP     = AIMPUI_WINCONTROL_MAX_PROPID + 9; // v6.00
  const int AIMPUI_FORM_PROPID_MODALRESULT   = AIMPUI_WINCONTROL_MAX_PROPID + 10; // v6.0, ref. AIMPUI_FLAGS_MODALRESULT_XXX
  const int AIMPUI_FORM_PROPID_CLIENTHEIGHT  = AIMPUI_WINCONTROL_MAX_PROPID + 11; // v6.0
  const int AIMPUI_FORM_PROPID_CLIENTWIDTH   = AIMPUI_WINCONTROL_MAX_PROPID + 12; // v6.0

  // PropID for IAIMPUIProgressDialog
  const int AIMPUI_PROGRESSDLG_PROPID_CAPTION                  = 1;
  const int AIMPUI_PROGRESSDLG_PROPID_MESSAGE                  = 2;
  const int AIMPUI_PROGRESSDLG_PROPID_SHOW_PROGRESS_ON_TASKBAR = 3;

  // PropID for IAIMPUIPathChooser
  const int AIMPUI_PATHCHOOSER_PROPID_COLUMNS = AIMPUI_WINCONTROL_MAX_PROPID + 1; // v6.0

  // PropID for IAIMPUIMode
  const int AIMPUI_MODE_PROPID_ACCENT = 1;
  const int AIMPUI_MODE_PROPID_DPI    = 2; // 0 is auto
  const int AIMPUI_MODE_PROPID_STYLE  = 3; // AIMPUI_STYLE_DARK / AIMPUI_STYLE_LIGHT

  // PropID for IAIMPUITrayIcon
  const int AIMPUI_TRAYICON_PROPID_ID        = 1; // IAIMPString
  const int AIMPUI_TRAYICON_PROPID_HINT      = 2; // IAIMPString
  const int AIMPUI_TRAYICON_PROPID_ICON      = 3; // IAIMPImage or IAIMPImageContainer or IAIMPStream
  const int AIMPUI_TRAYICON_PROPID_MENU      = 4; // IAIMPUIPopupMenu
  const int AIMPUI_TRAYICON_PROPID_VISIBLE	 = 5; // Int32

  // Flags for IAIMPUITrayIcon.Notify
  const int AIMPUI_TRAYICON_NOTIFY_FLAGS_INFO    = 0;
  const int AIMPUI_TRAYICON_NOTIFY_FLAGS_ERROR   = 1;
  const int AIMPUI_TRAYICON_NOTIFY_FLAGS_WARNING = 2;
  
  // PropID for IAIMPUIFont
  const int AIMPUI_FONT_PROPID_NAME   = 1; // IAIMPString
  const int AIMPUI_FONT_PROPID_COLOR  = 2; // Int64
  const int AIMPUI_FONT_PROPID_STYLE  = 3; // ref.AIMPUI_FLAGS_FONT_XXX
  const int AIMPUI_FONT_PROPID_SIZE   = 4; // Int32
  const int AIMPUI_FONT_PROPID_SPECS  = 5; // IAIMPString

  // PropID for IAIMPUIImageList3
  const int AIMPUI_IMAGELIST_PROPID_ALLOWCOLORATION = 1; // v6.0, Int32

/*----------------------------------------------------------------------------------------------------------------------*/
/* Basic Interfaces																								   */
/*----------------------------------------------------------------------------------------------------------------------*/

  /* IAIMPUIDPIAwareness */

  class IAIMPUIDPIAwareness: public IUnknown
  {
		public:
			virtual BOOL WINAPI IsDPIAware() = 0;
			virtual HRESULT WINAPI SetDPIAware(BOOL Value) = 0;
  };

  /* IAIMPUIColorSchema */

  class IAIMPUIColorSchema: public IAIMPPropertyList
  {
		public:
			virtual void WINAPI ApplyToARGB(DWORD* ARGB) = 0;
			virtual void WINAPI ApplyToColor(DWORD* Color) = 0;
			virtual void WINAPI ApplyToColors(RGBQUAD* Colors, INT32 numbersOfColors) = 0;
			virtual void WINAPI ApplyToImage(IAIMPImage* Image) = 0;
  };

  /* IAIMPUIMode */

  class IAIMPUIMode: public IAIMPPropertyList
  {
	  // + refer to AIMP_MSG_EVENT_UI_MODE
  };

/*----------------------------------------------------------------------------------------------------------------------*/
/* Basic Events Interfaces																								   */
/*----------------------------------------------------------------------------------------------------------------------*/

  enum TAIMPUIMouseButton
  {
		umbLeft 		 = 0, 
		umbRight 		 = 1, 
		umbMiddle 		 = 2,
		umbMAXSIZE		 = 0x7FFFFFFF 
  };

  /* IAIMPUIChangeEvents */

  class IAIMPUIChangeEvents: public IUnknown
  {
		public:
			virtual void WINAPI OnChanged(IUnknown* Sender) = 0;
  };

  /* IAIMPUIDrawEvents */

  class IAIMPUIDrawEvents: public IUnknown
  {
		public:
			virtual void WINAPI OnDraw(IUnknown* Sender, HCANVAS Canvas, const RECT R) = 0;
  };

  /* IAIMPUIKeyboardEvents */

  class IAIMPUIKeyboardEvents: public IUnknown
  {
	  public:
		virtual void WINAPI OnEnter(IUnknown* Sender) = 0;
		virtual void WINAPI OnExit(IUnknown* Sender) = 0;
		virtual void WINAPI OnKeyDown(IUnknown* Sender, WORD* Key, WORD Modifiers) = 0;
		virtual void WINAPI OnKeyPress(IUnknown* Sender, WCHAR* Key) = 0;
		virtual void WINAPI OnKeyUp(IUnknown* Sender, WORD* Key, WORD Modifiers) = 0;
  };

  /* IAIMPUIPopupMenuEvents */

  class IAIMPUIPopupMenuEvents: public IUnknown
  {
	  public:
		virtual BOOL WINAPI OnContextPopup(IUnknown* Sender, INT32 X, INT32 Y);
  };

  /* IAIMPUIMouseEvents */

  class IAIMPUIMouseEvents: public IUnknown
  {
	  public:
		virtual void WINAPI OnMouseDoubleClick(IUnknown* Sender, TAIMPUIMouseButton Button, INT32 X, INT32 Y, WORD Modifiers) = 0;
		virtual void WINAPI OnMouseDown(IUnknown* Sender, TAIMPUIMouseButton Button, INT32 X, INT32 Y, WORD Modifiers) = 0;
		virtual void WINAPI OnMouseLeave(IUnknown* Sender) = 0;
		virtual void WINAPI OnMouseMove(IUnknown* Sender, INT32 X, INT32 Y, WORD Modifiers) = 0;
		virtual void WINAPI OnMouseUp(IUnknown* Sender, TAIMPUIMouseButton Button, INT32 X, INT32 Y, WORD Modifiers) = 0;
  };

  /* IAIMPUIMouseWheelEvents */

  class IAIMPUIMouseWheelEvents: public IUnknown
  {
	  public:
		virtual BOOL WINAPI OnMouseWheel(IUnknown* Sender, INT32 WheelDelta, INT32 X, INT32 Y, WORD Modifiers) = 0;
  };

  /* IAIMPUIPlacementEvents */

  class IAIMPUIPlacementEvents: public IUnknown
  {
	  public:
		virtual void WINAPI OnBoundsChanged(IUnknown* Sender) = 0;
  };

/*----------------------------------------------------------------------------------------------------------------------*/
/* Basic Controls Interfaces  																						       */
/*----------------------------------------------------------------------------------------------------------------------*/

  /* TAIMPUIControlPlacement */

  enum TAIMPUIControlAlignment 
  {
	  ualNone   = 0, 
	  ualTop    = 1, 
	  ualBottom = 2, 
	  ualLeft   = 3, 
	  ualRight  = 4, 
	  ualClient = 5,
      ualMAXSIZE = 0x7FFFFFFF 
  };

  #pragma pack(push, 1)
  struct TAIMPUIControlPlacement
  {
		TAIMPUIControlAlignment Alignment;
		RECT AlignmentMargins;
		RECT Anchors;
		RECT Bounds;
  };

  /* TAIMPUIControlPlacementConstraints */

  struct TAIMPUIControlPlacementConstraints
  {
		INT32 MaxHeight;
		INT32 MaxWidth;
		INT32 MinHeight;
		INT32 MinWidth;
  };
  #pragma pack(pop)

  /* IAIMPUIControl */

  class IAIMPUIControl: public IAIMPPropertyList
  {
	  public:
			virtual HRESULT WINAPI GetPlacement(TAIMPUIControlPlacement* Placement) = 0;
			virtual HRESULT WINAPI GetPlacementConstraints(TAIMPUIControlPlacementConstraints* Constraints) = 0;
			virtual HRESULT WINAPI SetPlacement(TAIMPUIControlPlacement Placement) = 0;
			virtual HRESULT WINAPI SetPlacementConstraints(TAIMPUIControlPlacementConstraints Constraints) = 0;

			// Coords Translation
			virtual HRESULT WINAPI ClientToScreen(POINT* P) = 0;
			virtual HRESULT WINAPI ScreenToClient(POINT* P) = 0;

			// Drawing
			virtual HRESULT WINAPI PaintTo(HCANVAS Canvas, INT32 X, INT32 Y) = 0;
			virtual HRESULT WINAPI Invalidate() = 0;
  };


  /* IAIMPUIWinControl */

  class IAIMPUIWinControl: public IAIMPUIControl
  {
	  public:
			virtual HRESULT WINAPI GetControl(INT32 Index, CONSTIID IID, void** Obj) = 0;
			virtual INT32 WINAPI GetControlCount() = 0;
			virtual HWND WINAPI GetHandle() = 0;
			virtual BOOL WINAPI HasHandle() = 0;
			virtual HRESULT WINAPI SetFocus() = 0;
  };

/*----------------------------------------------------------------------------------------------------------------------*/
/* Non-Visual Components Interfaces																			       		*/
/*----------------------------------------------------------------------------------------------------------------------*/

  /* IAIMPUIFont */

  class IAIMPUIFont: public IAIMPPropertyList // v6.00
  {
  };

  /* IAIMPUIImageList */

  class IAIMPUIImageList: public IUnknown
  {
	  public:
			virtual HRESULT WINAPI Add(IAIMPImage* Image) = 0;
			virtual HRESULT WINAPI Clear() = 0;
			virtual HRESULT WINAPI Delete(INT32 Index) = 0; 
			virtual HRESULT WINAPI Draw(HCANVAS Canvas, INT32 Index, INT32 X, INT32 Y, BOOL Enabled) = 0;
			virtual HRESULT WINAPI LoadFromResource(HMODULE Instance, PChar ResName, PChar ResType) = 0;
			virtual INT32 WINAPI GetCount() = 0;
			virtual HRESULT WINAPI GetSize(SIZE* Size) = 0;
			virtual HRESULT WINAPI SetSize(SIZE Size) = 0;
  };

  /* IAIMPUIImageList2 */
  /*
  class IAIMPUIImageList2: public IUnknown
  {
	  public:
			virtual HRESULT WINAPI DrawEx(HCANVAS Canvas, int Index, const RECT R, BOOL Enabled) = 0;
  }; Deprecated, use the IAIMPUIImageList3 */

  /* IAIMPUIImageList3 */

  class IAIMPUIImageList3: public IAIMPPropertyList // v6.00
  {
	  public:
			virtual HRESULT WINAPI Add(IAIMPImage* Image) = 0;
			virtual HRESULT WINAPI Clear() = 0;
			virtual HRESULT WINAPI Delete(INT32 Index) = 0;
			virtual HRESULT WINAPI Draw(HCANVAS Canvas, INT32 Index, INT32 X, INT32 Y, BOOL Enabled) = 0;
			virtual HRESULT WINAPI DrawEx(HCANVAS Canvas, INT32 Index, const RECT R, BOOL Enabled) = 0;
			virtual HRESULT WINAPI LoadFromStream(IAIMPStream* Stream) = 0;
			virtual INT32 WINAPI GetCount() = 0;
			virtual HRESULT WINAPI GetImage(INT32 Index, BOOL Enabled, IAIMPImage** Image) = 0;
			virtual HRESULT WINAPI GetSize(SIZE* Size) = 0;
			virtual HRESULT WINAPI SetSize(SIZE Size) = 0;
  };

  /* IAIMPUIMenuItem */

  class IAIMPUIMenuItem: public IAIMPMenuItem
  {
		public:
			virtual HRESULT WINAPI Add(IAIMPString* ID, IAIMPUIMenuItem** MenuItem) = 0;
			virtual HRESULT WINAPI Delete(INT32 Index) = 0;
			virtual HRESULT WINAPI Get(INT32 Index, CONSTIID IID, void** Obj) = 0;
			virtual INT32 WINAPI GetCount() = 0;
  };

  /* IAIMPUIPopupMenu */

  class IAIMPUIPopupMenu: public IUnknown
  {
	public:
		virtual HRESULT WINAPI Add(IAIMPString* ID, IAIMPUIMenuItem** MenuItem) = 0;
		virtual HRESULT WINAPI Delete(INT32 Index) = 0;
		virtual HRESULT WINAPI DeleteChildren() = 0;
		virtual HRESULT WINAPI Get(INT32 index, CONSTIID IID, void** MenuItem) = 0;
		virtual INT32 WINAPI GetCount() = 0;
		virtual HRESULT WINAPI Popup(POINT ScreenPoint) = 0;
		virtual HRESULT WINAPI Popup2(RECT ScreenRect) = 0;
  };

  /* IAIMPUIPopupMenu2 */

  class IAIMPUIPopupMenu2: public IAIMPUIPopupMenu
  {
	public:
		virtual HRESULT WINAPI PopupFromCursor() = 0;
  };

  /* IAIMPUITrayIcon */

  class IAIMPUITrayIcon: public IAIMPPropertyList
  {
	public:
		virtual HRESULT WINAPI Notify(IAIMPString* Title, IAIMPString* Message, DWORD Flags, IUnknown* Events) = 0;
  };

/*----------------------------------------------------------------------------------------------------------------------*/
/* Special Controls and Events Interfaces																			       */
/*----------------------------------------------------------------------------------------------------------------------*/

  /* IAIMPUIBaseEdit */

  class IAIMPUIBaseEdit: public IAIMPUIWinControl
  {
	public:
		virtual HRESULT WINAPI CopyToClipboard() = 0;
		virtual HRESULT WINAPI CutToClipboard() = 0;
		virtual HRESULT WINAPI PasteFromClipboard() = 0;
		virtual HRESULT WINAPI SelectAll() = 0;
		virtual HRESULT WINAPI SelectNone() = 0;
  };

  /* IAIMPUIBBCBox */

  class IAIMPUIBBCBox: public IAIMPUIWinControl
  {
  };

  /* IAIMPUIBevel */

  class IAIMPUIBevel: public IAIMPUIControl
  {
  };

  /* IAIMPUIButton */

  class IAIMPUIButton: public IAIMPUIWinControl
  {
	public:
		virtual HRESULT WINAPI ShowDropDownMenu() = 0;
  };

  /* IAIMPUIColorButton */

  class IAIMPUIColorButton: public IAIMPUIWinControl // v6.00
  {
  };

  /* IAIMPUIEditButton */

  class IAIMPUIEditButton: public IAIMPPropertyList
  {
  };

  /* IAIMPUIToolButton */

  class IAIMPUIToolButton: public IAIMPUIButton // v6.00
  {
  };

  /* IAIMPUIBaseButtonnedEdit */

  class IAIMPUIBaseButtonnedEdit: public IAIMPUIBaseEdit
  {
	public:
		virtual HRESULT WINAPI AddButton(IUnknown* EventsHandler, IAIMPUIEditButton** Button) = 0;
		virtual HRESULT WINAPI DeleteButton(INT32 Index) = 0;
		virtual HRESULT WINAPI DeleteButton2(IAIMPUIEditButton* Button) = 0;
		virtual HRESULT WINAPI GetButton(INT32 Index, IAIMPUIEditButton** Button) = 0;
		virtual INT32 WINAPI GetButtonCount() = 0;
  };

  /* IAIMPUIBaseComboBox */

  class IAIMPUIBaseComboBox: public IAIMPUIBaseButtonnedEdit
  {
	public:
	    // use the IAIMPNamedContainer to bind custom data within the text
		virtual HRESULT WINAPI Add(IUnknown* Obj, INT32 ExtraData) = 0;
		virtual HRESULT WINAPI Add2(IAIMPObjectList* List) = 0;
		virtual HRESULT WINAPI Clear() = 0;
		virtual HRESULT WINAPI Delete(INT32 Index) = 0;
		virtual HRESULT WINAPI GetItem(INT32 Index, CONSTIID IID, void** Obj) = 0;
		virtual INT32 WINAPI GetItemCount() = 0;
		virtual HRESULT WINAPI SetItem(INT32 Index, IUnknown* Obj) = 0;
  };

  /* IAIMPUIBrandBox */

  class IAIMPUIBrandBox: public IAIMPUIWinControl
  {
  };

  /* IAIMPUICategory */

  class IAIMPUICategory: public IAIMPUIWinControl
  {
  };

  /* IAIMPUICheckBox */

  class IAIMPUICheckBox: public IAIMPUIWinControl
  {
  };

  /* IAIMPUIComboBox */

  class IAIMPUIComboBox: public IAIMPUIBaseComboBox
  {
  };

  /* IAIMPUICheckComboBox */

  class IAIMPUICheckComboBox: public IAIMPUIBaseComboBox
  {
	  public:
			virtual BOOL WINAPI GetChecked(INT32 Index) = 0;
			virtual HRESULT WINAPI SetChecked(INT32 Index, BOOL Value) = 0;
  };

  /* IAIMPUIEdit */

  class IAIMPUIEdit: public IAIMPUIBaseButtonnedEdit
  {
  };

  /* IAIMPUIDateEdit */

  class IAIMPUIDateEdit: public IAIMPUIBaseButtonnedEdit // v6.00
  {
  };

  /* IAIMPUIDateTimeEdit */

  class IAIMPUIDateTimeEdit: public IAIMPUIDateEdit // v6.00
  {
  };

  /* IAIMPUINumericEdit */

  class IAIMPUINumericEdit: public IAIMPUIEdit // v6.00
  {
  };

  /* IAIMPUIGroupBox */

  class IAIMPUIGroupBox: public IAIMPUIWinControl
  {
  };

  /* IAIMPUIImage */

  class IAIMPUIImage: public IAIMPUIControl
  {
  };

  /* IAIMPUIImageComboBox */

  class IAIMPUIImageComboBox: public IAIMPUIBaseComboBox
  {
	public:
		virtual INT32 WINAPI GetImageIndex(INT32 Index) = 0;
		virtual HRESULT WINAPI SetImageIndex(INT32 Index, INT32 Value) = 0;
  };

  /* IAIMPUILabel */

  class IAIMPUILabel: public IAIMPUIControl
  {
  };

  /* IAIMPUIMemo */

  class IAIMPUIMemo: public IAIMPUIBaseEdit
  {
	public:
		virtual HRESULT WINAPI AddLine(IAIMPString* S) = 0;
		virtual HRESULT WINAPI Clear() = 0;
		virtual HRESULT WINAPI DeleteLine(INT32 Index) = 0;
		virtual HRESULT WINAPI InsertLine(INT32 Index, IAIMPString* S) = 0;
		virtual HRESULT WINAPI GetLine(INT32 Index, IAIMPString* S) = 0;
		virtual INT32 WINAPI GetLineCount() = 0;
		virtual HRESULT WINAPI SetLine(INT32 Index, IAIMPString* ) = 0;
		// I/O
		virtual HRESULT WINAPI LoadFromFile(IAIMPString* FileName) = 0;
		virtual HRESULT WINAPI LoadFromStream(IAIMPStream* Stream) = 0;
		virtual HRESULT WINAPI SaveToFile(IAIMPString* FileName) = 0;
		virtual HRESULT WINAPI SaveToStream(IAIMPStream* Stream) = 0;
  };

  /* IAIMPUIPaintBox */

  class IAIMPUIPaintBox: public IAIMPUIControl
  {
  };

  /* IAIMPUITabSheet */

  class IAIMPUITabSheet: public IAIMPUIWinControl
  {
  };

  /* IAIMPUIPageControl */

  class IAIMPUIPageControl: public IAIMPUIWinControl
  {
	public:
		virtual HRESULT WINAPI Add(IAIMPString* Name, IAIMPUITabSheet** Page) = 0;
		virtual HRESULT WINAPI Delete(INT32 Index) = 0;
		virtual HRESULT WINAPI Delete2(IAIMPUITabSheet* Page) = 0;
		virtual HRESULT WINAPI Get(INT32 Index, IAIMPUITabSheet** Page) = 0;
		virtual INT32 WINAPI GetCount() = 0;
  };

  /* IAIMPUIPageControlEvents */

  class IAIMPUIPageControlEvents: public IUnknown
  {
	public:
		virtual void WINAPI OnActivating(IAIMPUIPageControl* Sender, IAIMPUITabSheet* Page, BOOL* Allow) = 0;
		virtual void WINAPI OnActivated(IAIMPUIPageControl* Sender, IAIMPUITabSheet* Page) = 0;
  };

  /* IAIMPUIPanel */

  class IAIMPUIPanel: public IAIMPUIWinControl
  {
  };

  /* IAIMPUIProgressBar */

  class IAIMPUIProgressBar: public IAIMPUIControl
  {
  };

  /* IAIMPUIScrollBox */

  class IAIMPUIScrollBox: public IAIMPUIWinControl
  {
	public:
		virtual HRESULT WINAPI MakeVisible(IAIMPUIControl* Control) = 0;
  };

  /* IAIMPUISlider */

  class IAIMPUISlider: public IAIMPUIWinControl
  {
  };

  /* IAIMPUISplitter */

  class IAIMPUISplitter: public IAIMPUIControl
  {
  };

  /* IAIMPUISpinEdit */

  class IAIMPUISpinEdit: public IAIMPUIWinControl
  {
  };

  /* IAIMPUITabControl */

  class IAIMPUITabControl: public IAIMPUIWinControl
  {
	public:
		virtual HRESULT WINAPI Add(IAIMPString* S) = 0;
	    virtual HRESULT WINAPI Delete(INT32 Index) = 0;
		virtual HRESULT WINAPI Get(INT32 Index, IAIMPString** Tab) = 0;
		virtual INT32 WINAPI GetCount() = 0;
  };

  /* IAIMPUITabControlEvents */

  class IAIMPUITabControlEvents: public IAIMPUIChangeEvents
  {
	public:
		virtual void WINAPI OnActivating(IAIMPUITabControl* Sender, INT32 TabIndex, BOOL* Allow) = 0;
		virtual void WINAPI OnActivated(IAIMPUITabControl* Sender, INT32 TabIndex) = 0;
  };

  /* IAIMPUITimeEdit */

  class IAIMPUITimeEdit: public IAIMPUIWinControl
  {
  };

  /* IAIMPUITreeListColumn */

  class IAIMPUITreeListColumn: public IAIMPPropertyList
  {
  };

  /* IAIMPUITreeListGroup */

  class IAIMPUITreeListGroup: public IAIMPPropertyList
  {
		public:
			virtual HRESULT WINAPI Get(INT32 Index, CONSTIID IID, void** Obj) = 0;
			virtual INT32 WINAPI GetCount() = 0;
  };

  /* IAIMPUITreeListNode */

  class IAIMPUITreeListNode: public IAIMPPropertyList
  {
	  public:
			// Nodes
			virtual HRESULT WINAPI Add(IAIMPUITreeListNode** Node) = 0;
			virtual HRESULT WINAPI ClearChildren() = 0;
			virtual HRESULT WINAPI FindByTag(DWORD_PTR Tag, BOOL Recursive, CONSTIID IID, void** Node) = 0;
			virtual HRESULT WINAPI FindByValue(INT32 ColumnIndex, IAIMPString* Value, BOOL Recursive, CONSTIID IID, void** Node) = 0;
			virtual HRESULT WINAPI Get(INT32 Index, CONSTIID IID, void** Obj) = 0;
			virtual INT32 WINAPI GetCount() = 0;

			// Values
			virtual HRESULT WINAPI ClearValues() = 0;
			virtual HRESULT WINAPI GetValue(INT32 Index, IAIMPString** Value) = 0;
			virtual HRESULT WINAPI SetValue(INT32 Index, IAIMPString* Value) = 0;

			// Groups
			virtual HRESULT WINAPI GetGroup(CONSTIID IID, void** Group) = 0;
  };

  /* IAIMPUITreeList */

  class IAIMPUITreeList: public IAIMPUIWinControl
  {
	  public:
			// Columns
			virtual HRESULT WINAPI AddColumn(CONSTIID IID, void** Obj) = 0;
			virtual HRESULT WINAPI ClearColumns() = 0;
			virtual HRESULT WINAPI DeleteColumn(INT32 Index) = 0;
			virtual HRESULT WINAPI GetColumn(INT32 Index, CONSTIID IID, void** Obj) = 0;
			virtual INT32 WINAPI GetColumnCount() = 0;

			// Nodes
			virtual HRESULT WINAPI Clear() = 0;
			virtual HRESULT WINAPI Delete(IAIMPUITreeListNode* Node) = 0;
			virtual HRESULT WINAPI GetPath(IAIMPUITreeListNode* Node, IAIMPString** S) = 0;
			virtual HRESULT WINAPI GetRootNode(CONSTIID IID, void** Obj) = 0;
			virtual HRESULT WINAPI MakeTop(IAIMPUITreeListNode* Node) = 0;
			virtual HRESULT WINAPI MakeVisible(IAIMPUITreeListNode* Node) = 0;
			virtual HRESULT WINAPI SetPath(IAIMPString* S) = 0;

			// Nodes - Absolute List
			virtual HRESULT WINAPI GetAbsoluteVisibleNode(INT32 Index, CONSTIID IID, void** Obj) = 0;
			virtual INT32 WINAPI GetAbsoluteVisibleNodeCount() = 0;

			// Nodes - Selection
			virtual HRESULT WINAPI DeleteSelected() = 0;
			virtual HRESULT WINAPI SelectAll() = 0;
			virtual HRESULT WINAPI SelectNone() = 0;
			virtual HRESULT WINAPI GetFocused(CONSTIID IID, void** Obj) = 0;
			virtual HRESULT WINAPI SetFocused(IUnknown* Obj) = 0;
			virtual HRESULT WINAPI GetSelected(INT32 Index, CONSTIID IID, void** Obj) = 0;
			virtual INT32 WINAPI GetSelectedCount() = 0;

			// Inplace Editing
			virtual HRESULT WINAPI GetEditingCell(INT32* ColumnIndex, INT32* RowIndex) = 0;
			virtual HRESULT WINAPI StartEditing(IAIMPUITreeListColumn* Column) = 0;
			virtual HRESULT WINAPI StopEditing() = 0;

			// Grouping
			virtual HRESULT WINAPI GroupBy(IAIMPUITreeListColumn* Column, BOOL ResetPrevGroupingParams) = 0;
			virtual HRESULT WINAPI GetGroup(INT32 Index, CONSTIID IID, void** Obj) = 0;
			virtual INT32 WINAPI GetGroupCount() = 0;
			virtual HRESULT WINAPI Regroup() = 0;
			virtual HRESULT WINAPI ResetGrouppingParams() = 0;

			// Sorting
			virtual HRESULT WINAPI ResetSortingParams() = 0;
			virtual HRESULT WINAPI Resort() = 0;
			virtual HRESULT WINAPI SortBy(IAIMPUITreeListColumn* Column, DWORD Flags, BOOL ResetPrevSortingParams) = 0;

			// Customized Settings
			virtual HRESULT WINAPI ConfigLoad(IAIMPConfig* Config, IAIMPString* Key) = 0;
			virtual HRESULT WINAPI ConfigSave(IAIMPConfig* Config, IAIMPString* Key) = 0;
  };

  /* IAIMPUITreeListDragSortingEvents */

  class IAIMPUITreeListDragSortingEvents: public IUnknown
  {
		public:
			virtual void WINAPI OnDragSorting(IAIMPUITreeList* Sender) = 0;
			virtual void WINAPI OnDragSortingNodeOver(IAIMPUITreeList* Sender, IAIMPUITreeListNode* Node, DWORD Flags, BOOL* Handled) = 0;
  };

  /* IAIMPUITreeListCustomDrawEvents */

  class IAIMPUITreeListCustomDrawEvents: public IUnknown
  {
		public:
			virtual void WINAPI OnCustomDrawNode(IAIMPUITreeList* Sender, HCANVAS Canvas, RECT R, IAIMPUITreeListNode* Node, BOOL* Handled) = 0;
			virtual void WINAPI OnCustomDrawNodeCell(IAIMPUITreeList* Sender, HCANVAS Canvas, RECT R, IAIMPUITreeListNode* Node, IAIMPUITreeListColumn* Column, BOOL* Handled) = 0;
			virtual void WINAPI OnGetNodeBackground(IAIMPUITreeList* Sender, IAIMPUITreeListNode* Node, DWORD* Color) = 0;
  };

  /* IAIMPUITreeListInplaceEditingEvents */

  class IAIMPUITreeListInplaceEditingEvents: public IUnknown
  {
		public:
			virtual void WINAPI OnEditing(IAIMPUITreeList* Sender, IAIMPUITreeListNode* Node, INT32 ColumnIndex, BOOL* Allow) = 0;
		    virtual void WINAPI OnEdited(IAIMPUITreeList* Sender, IAIMPUITreeListNode* Node, INT32 ColumnIndex, IAIMPString* Value) = 0;
  };

  /* IAIMPUITreeListDeleteEvents */

  class IAIMPUITreeListDeleteEvents: public IUnknown // v6.0
  {
		public:
			virtual void WINAPI OnDeleteSelected(IAIMPUITreeList* Sender, BOOL* Allow) = 0;
  };

  /* IAIMPUITreeListEvents */

  class IAIMPUITreeListEvents: public IUnknown
  {
		public:
			virtual void WINAPI OnColumnClick(IAIMPUITreeList* Sender, INT32 ColumnIndex) = 0;
			virtual void WINAPI OnFocusedColumnChanged(IAIMPUITreeList* Sender) = 0;
			virtual void WINAPI OnFocusedNodeChanged(IAIMPUITreeList* Sender) = 0;
			virtual void WINAPI OnNodeChecked(IAIMPUITreeList* Sender, IAIMPUITreeListNode* Node) = 0;
			virtual void WINAPI OnNodeDblClicked(IAIMPUITreeList* Sender, IAIMPUITreeListNode* Node) = 0;
			virtual void WINAPI OnSelectionChanged(IAIMPUITreeList* Sender) = 0;
			virtual void WINAPI OnSorted(IAIMPUITreeList* Sender) = 0;
			virtual void WINAPI OnStructChanged(IAIMPUITreeList* Sender) = 0;
  };

  /* IAIMPUICardView */

  class IAIMPUICardView: public IAIMPUITreeList // v6.0
  {
  };

  /* IAIMPUICardViewItem */

  class IAIMPUICardViewItem: public IAIMPUITreeListNode // v6.0
  {
  };

  /* IAIMPUICardViewEvents */

  class IAIMPUICardViewEvents: public IUnknown // v6.0
  {
		public:
			virtual void WINAPI OnItemSettings(IAIMPUICardView* Sender, IAIMPUICardViewItem* Item) = 0;
  };

  /* IAIMPUIPathChooser */

  class IAIMPUIPathChooser: public IAIMPUIWinControl // v6.0
  {
		public:
			virtual HRESULT WINAPI Add(IAIMPString* Path, BOOL Recursive) = 0;
			virtual HRESULT WINAPI Clear() = 0;
			virtual HRESULT WINAPI Delete(INT32 Index) = 0;
			virtual HRESULT WINAPI Get(INT32 Index, IAIMPString** Path, BOOL* Recursive) = 0;
			virtual INT32 WINAPI GetCount() = 0;
  };

  /* IAIMPUIRadioBox */

  class IAIMPUIRadioBox: public IAIMPUICheckBox
  {
  };

  /* IAIMPUIValidationLabel */

  class IAIMPUIValidationLabel: public IAIMPUILabel
  {
  };

/*----------------------------------------------------------------------------------------------------------------------*/
/* Top-Level Window Interfaces																						       */
/*----------------------------------------------------------------------------------------------------------------------*/
  
  /* IAIMPUIForm */

  class IAIMPUIForm: public IAIMPUIWinControl
  {
		public:
			virtual HRESULT WINAPI Close() = 0;
			virtual HRESULT WINAPI GetFocusedControl(IAIMPUIWinControl** Control) = 0;
			virtual HRESULT WINAPI Localize() = 0;
			virtual HRESULT WINAPI Destroy(BOOL Postponed) = 0;
			virtual INT32 WINAPI ShowModal() = 0;
  };

  /* IAIMPUIForm2 */

  class IAIMPUIForm2: public IAIMPUIForm // v6.0
  {
		public:
			virtual HRESULT WINAPI BringToTop() = 0;
			virtual HRESULT WINAPI ConfigLoad() = 0;
			virtual HRESULT WINAPI ConfigSave() = 0;
			virtual HRESULT WINAPI Hide() = 0;
			virtual HRESULT WINAPI Show() = 0;
			virtual HRESULT WINAPI ShowNoActivate() = 0;
  };

  /* IAIMPUIFormEvents */

  class IAIMPUIFormEvents: public IUnknown
  {
		public:
			virtual void WINAPI OnActivated(IAIMPUIForm* Sender) = 0;
			virtual void WINAPI OnDeactivated(IAIMPUIForm* Sender) = 0;
			virtual void WINAPI OnCreated(IAIMPUIForm* Sender) = 0;
			virtual void WINAPI OnDestroyed(IAIMPUIForm* Sender) = 0;
			virtual void WINAPI OnCloseQuery(IAIMPUIForm* Sender, BOOL* CanClose) = 0;
			virtual void WINAPI OnLocalize(IAIMPUIForm* Sender) = 0;
			virtual void WINAPI OnShortCut(IAIMPUIForm* Sender, WORD Key, WORD Modifiers, BOOL* Handled) = 0;
  };

  /* IAIMPUIFormEvents2 */

  class IAIMPUIFormEvents2: public IUnknown
  {
		public:
			virtual void WINAPI OnChangeScale(IAIMPUIForm* Sender, INT32 Multiplier, INT32 Divider) = 0;
  };

  /* IAIMPUIFormEvents3 */

  class IAIMPUIFormEvents3: public IUnknown
  {
		public:
			virtual void WINAPI OnStyleChanged(IAIMPUIForm* Sender, INT32 Style) = 0;
  };

/*----------------------------------------------------------------------------------------------------------------------*/
/* Dialogs																				 						        */
/*----------------------------------------------------------------------------------------------------------------------*/

  /* IAIMPUIAuthDialog */

  class IAIMPUIAuthDialog: public IUnknown // v5.40
  {
		public:
			virtual HRESULT WINAPI Execute(HWND OwnerWnd, IAIMPString* Title, IAIMPString* Text, IUnknown* EventsHandler, DWORD Flags) = 0;
  };

  /* IAIMPUIAuthDialogEvents */

  class IAIMPUIAuthDialogEvents: public IUnknown // v5.40
  {
		public:
			virtual HRESULT WINAPI OnParse(IAIMPString* Params, IAIMPString** ErrorText) = 0;
			virtual HRESULT WINAPI OnRequestUrl(IAIMPString** Url) = 0;
  };

  /* IAIMPUIBrowseFolderDialog */

  class IAIMPUIBrowseFolderDialog: public IUnknown
  {
		public:
			virtual HRESULT WINAPI Execute(HWND OwnerWnd, DWORD Flags, IAIMPString* DefaultPath, IAIMPObjectList** Selection) = 0;
  };

  /* IAIMPUIColorPickerDialog */

  class IAIMPUIColorPickerDialog: public IUnknown // v6.00
  {
		public:
			virtual HRESULT WINAPI Execute(HWND OwnerWnd, IAIMPString* Caption, DWORD Flags, DWORD* Color) = 0;
  };

  /* IAIMPUIFileDialogs */

  class IAIMPUIFileDialogs: public IUnknown
  {
		public:
			virtual HRESULT WINAPI ExecuteOpenDialog(HWND OwnerWnd,
				IAIMPString* Caption, IAIMPString* Filter, IAIMPString** FileName) = 0;
			virtual HRESULT WINAPI ExecuteOpenDialog2(HWND OwnerWnd,
				IAIMPString* Caption, IAIMPString* Filter, IAIMPObjectList** Files) = 0;
			virtual HRESULT WINAPI ExecuteSaveDialog(HWND OwnerWnd,
				IAIMPString* Caption, IAIMPString* Filter, IAIMPString** FileName, INT32* FilterIndex) = 0;
  };

  /* IAIMPUIFontPickerDialog */

  class IAIMPUIFontPickerDialog: public IUnknown // v6.00
  {
		public:
			virtual HRESULT WINAPI Execute(HWND OwnerWnd,
				IAIMPString* Caption, DWORD Flags, IAIMPUIFont** Color) = 0;
  };

  /* IAIMPUIInputDialog */

  class IAIMPUIInputDialog: public IUnknown
  {
		public:
			virtual HRESULT WINAPI Execute(HWND OwnerWnd, IAIMPString* Caption, 
				IUnknown* EventsHandler, IAIMPString* Text, OUTVARVALUE Value) = 0;
			virtual HRESULT WINAPI Execute2(HWND OwnerWnd, IAIMPString* Caption,
				IUnknown* EventsHandler, IAIMPObjectList* TextForValues,
				VarValue* Values, INT32 ValueCount) = 0;
  };

  /* IAIMPUIInputDialogEvents */

  class IAIMPUIInputDialogEvents: public IUnknown
  {
		public:
			virtual HRESULT WINAPI OnValidate(REFVARVALUE Value, INT32 ValueIndex) = 0;
  };

  /* IAIMPUIMessageDialog */

  class IAIMPUIMessageDialog: public IUnknown
  {
		public:
			virtual HRESULT WINAPI Execute(HWND OwnerWnd, IAIMPString* Caption, IAIMPString* Text, DWORD Flags) = 0;
  };

  /* IAIMPUIProgressDialog */

  class IAIMPUIProgressDialog: public IAIMPPropertyList
  {
		public:
			virtual HRESULT WINAPI Finished() = 0;
			virtual HRESULT WINAPI Progress(const INT64 Position, INT64 Total, IAIMPString* Text) = 0;
			virtual HRESULT WINAPI Started() = 0;
  };

  /* IAIMPUIProgressDialogEvents */

  class IAIMPUIProgressDialogEvents: public IUnknown
  {
		public:
		    virtual void WINAPI OnCanceled() = 0;
  };

/*----------------------------------------------------------------------------------------------------------------------*/
/* GUI Service																										       */
/*----------------------------------------------------------------------------------------------------------------------*/

const int AIMPUI_SERVICE_CREATEFORM_FLAGS_REGULAR = 0;
const int AIMPUI_SERVICE_CREATEFORM_FLAGS_CHILD   = 1;
const int AIMPUI_SERVICE_CREATEFORM_FLAGS_LAYERED = 2; // v6.00


  /* IAIMPServiceUI */

  class IAIMPServiceUI: public IUnknown
  {
		public:
			virtual HRESULT WINAPI CreateControl(IAIMPUIForm* Owner, IAIMPUIWinControl* Parent, 
				IAIMPString* Name, IUnknown* EventsHandler, CONSTIID IID, void** Control) = 0;
			virtual HRESULT WINAPI CreateForm(HWND OwnerWindow, DWORD Flags, 
				IAIMPString* Name, IUnknown* EventsHandler, IAIMPUIForm** Form) = 0;
			virtual HRESULT WINAPI CreateObject(IAIMPUIForm* Owner, 
				IUnknown* EventsHandler, CONSTIID IID, void** Obj) = 0;
  };

#endif // !apiGUIH
