/*--------------------------------------------------------------------------------
1cheaders.h
Данный файл предназначен для его включения в stdafx.h разнообразных проектов,
нуждающихся в доступе к 1С dll'кам.
--------------------------------------------------------------------------------*/

#ifndef _1C_HEADERS_H
#define _1C_HEADERS_H

#pragma once

// Стандартные заголовочные файлы
#include <afxcview.h> 
#include <comdef.h>
#include <afxctl.h>
#include <afxtempl.h>
#include <functional>
#include <set>
#include <vector>
#include <map>

/*
// kms
// нет CGetDoc77 - нет CHintStruct77

struct CHintStruct77
{
	int m_null;
	int m_CtrlNumber;
	char* m_HintText;
};
*/

// Состояние атрибутов формы
const long CS_EX_DONOTTAB         = 0x00000004L; //Пропускать при вводе
const long CS_EX_QUICKCHOICE      = 0x00000008L; //Быстрый выбор
const long CS_EX_USEDESCRIPTION   = 0x00000010L; //Использовать описание, как подсказку
const long CS_EX_HAVEBUTTON       = 0x00000020L; //Имеет кнопку выбора
const long CS_EX_FORMFONT         = 0x00000040L; //Шрифт по умолчанию
const long CS_EX_ACCEL            = 0x00000100L; //Выбран акселератор
const long CS_EX_VISIBLE          = 0x00002000L; //Видимость
const long CS_EX_READONLY         = 0x00004000L; //Доступность
const long CS_EX_TRANSPARENT      = 0x00010000L; //Прозрачный фон
const long CS_EX_NOTSTORE         = 0x01000000L; //Не сохранять при сохранении настройки
const long CS_EX_REDNEGATIVE      = 0x04000000L; //Отрицательное красным
const long CS_EX_DONOTEDIT        = 0x10000000L; //Запретить редактирование

//#define C_BROWSE_STYLE_EX_DONOT_VISIBLE        0x1000000L //Невидимость
const long C_BROWSE_STYLE_EX_DONOT_VISIBLE = 0x1000000L; //Невидимость artbear

// CControlID m_DependParam
const long DP_Unk4               = 0x00000004L;
const long DP_Unk8               = 0x00000008L;
const long DP_UseHelpString      = 0x00000010L;
const long DP_Invisble           = 0x00002000L;
const long DP_Unk00004000        = 0x00004000L;
const long DP_IS_TYPE_ASSIGNED	 = 0x00100000L; // у контрола задан тип - artbear
const long DP_Unk00200000        = 0x00200000L;
const long DP_ColumnInNewLine    = 0x00400000L;
const long DP_ColumnInSameCol    = 0x00800000L;
const long DP_RedNegativeDisplay = 0x04000000L;
const long DP_ShowPictograph     = 0x08000000L;
const long DP_Unk10000000        = 0x10000000L;

const long C_CCONTROLID_DEPENDPARAM_IS_TYPE_ASSIGNED = DP_IS_TYPE_ASSIGNED; // у контрола задан тип - artbear

// по умолчанию в ТЧ выравнивание всегда влево
// если первый бит стиля = 0, то выравнивание влево !!
const long ST_CenterAlignmentNotInTable	= 0x00000001L; //выравнивание по центру не в ТЧ
const long ST_RightAlignmentNotInTable	= 0x00000002L; //выравнивание вправо не в ТЧ
const long ST_RightAlignmentInTable		= 0x00000001L; //выравнивание вправо в ТЧ

// типы контролов - CContolID::GetCtrlType()
const int STATIC_CTRL_TYPE = 1;
const int EDIT_CTRL_TYPE = 2;
const int BUTTON_CTRL_TYPE = 3;
const int GROUPBOX_CTRL_TYPE = 4;

const int BROWSE_COLUMN_EDIT_TYPE = 5;
const int BROWSE_COLUMN_STATIC_TYPE = 9;

const int GROUP_TREE_TYPE = 8;

const int PICTURE_CTRL_TYPE = 10;
const int VALUES_LIST_CTRL_TYPE = 11;
const int CHECK_BOX_CTRL_TYPE = 12;
const int RADIO_BTN_CTRL_TYPE = 13;
const int LIST_FIELD_CTRL_TYPE = 14;
const int VALUES_TABLE_CTRL_TYPE = 15;

struct  CFormCtrlSet // это CControlID
{
public:
	int m_ID;
	int m_TypeCtrl;
	int buf1[2];
	int m_Kind; // Вид объекта
	int m_Type; // Тип объекта
	int m_Left;
	int m_Top;
	int m_Right;
	int m_Bottom;
	char* m_Caption;
	char* m_Label;
	char* m_Formula;
	DWORD m_Style;
	int buf2[2];
	DWORD m_StyleEx; // Битовая маска (видимость, доступность и т.д.)
	int m_ListFormID; // Внутренний идентификатор формы для выбора реквизита
	char* m_Mask;
	char* m_Hint;
	char* m_Description;
	int buf3[21];
	char* m_LayerName;
	int buf4[5];
};

class CGetDoc7; // artbear
class IMPORT_1C CFormCtrl:public CObject // это CGetField
{
public:
	int m_Flag1;
	int m_Flag2;
	int m_Flag3;
	//CGetDoc77* m_GetDoc; // АльФ - указатель на атрибуты класса GetDoc7
	CGetDoc7* m_GetDoc; // АльФ - указатель на атрибуты класса GetDoc7 // artbear

	int m_ID;
	CFormCtrlSet* m_Set;
	int buf[26];
	int m_RefFlag;
	int m_Flag4;
	int m_ReadOnly;
	int m_Visible;
};

// Добавим хедеры 1С классов
#define IMPORT_1C __declspec(dllimport)
#include "type32.h"
#include "types.h"
#include "br32.h"
#include "bkend.h"
#include "frame.h"
#include "blang.h"
#include "seven.h"
#include "editr.h"
#include "basic.h"
#include "dbeng32.h"
#include "moxel.h"
#include "rgproc.h"
#include "txtedt.h"
#include "userdef.h"

#include "ext_header.h"

using namespace std;

// Объявим несколько полезных глобальных объектов
__declspec(selectany) CApp7*			pApp		= NULL;
__declspec(selectany) CBkEndUI*			pBkEndUI		= NULL;
__declspec(selectany) CMetaDataCont*	pMetaDataCont	= NULL;
//__declspec(selectany) SECMDIFrameWnd*	pMainFrame		= NULL;
__declspec(selectany) CMainFrame*		pMainFrame		= NULL;
__declspec(selectany) CDataBase7*		pDataBase7		= NULL;
__declspec(selectany) HINSTANCE			h1CResource		= NULL;
__declspec(selectany) HINSTANCE			hDllInstance			= NULL;

void Init1CGlobal(HINSTANCE hInst);

// И несколько полезных функций

// Вывод текста в окно сообщений (Сообщить)
void DoMsgLine(LPCSTR format, MessageMarker marker = mmNone, ...);

// Вывод текста в строку состояния (Состояние)
void DoStsLine(LPCSTR format, ...);

// Получить описание ошибки Windows по ее коду. При err==0, вернет описание для GetLastError
CString GetErrorDescription(DWORD err = 0);

//Формироване рантайм-исключения
void RuntimeError(LPCSTR format, ...);
void RuntimeErrorRes(UINT nID);

// КаталогПрограммы()
__forceinline const CString& BinDir()		{return pApp->GetProps()->GetStringProp(0);}
// КаталогИБ()
__forceinline const CString& IBDir()		{return pApp->GetProps()->GetStringProp(1);}
// КаталогПользователя()
__forceinline const CString& UserDir()		{return pApp->GetProps()->GetStringProp(2);}
// КаталогВременныхФайлов()
__forceinline const CString& TempDir()		{return pApp->GetProps()->GetStringProp(3);}
// Имя базы
__forceinline const CString& IBName()		{return pApp->GetProps()->GetStringProp(0x0C);}
// ИмяПользователя()
__forceinline const CString& UserName()		{return pApp->GetProps()->GetStringProp(0x0D);}
// ПолноеИмяПользователя()
__forceinline const CString& FullUserName()	{return pApp->GetProps()->GetStringProp(0x0E);}
// НазваниеНабораПрав()
__forceinline const CString& RightsName()	{return pApp->GetProps()->GetStringProp(0x10);}
// НазваниеИнтерфейса()
__forceinline const CString& GUIName()		{return pApp->GetProps()->GetStringProp(0x11);}

#endif