Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Инициализация переменных / 5 сообщений из 5, страница 1 из 1
24.08.2004, 15:22
    #32663254
Us
Us
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициализация переменных
Незнаю сюда ли вопрос.. но может кто чего знает..
Пишется внешняя компонента для 1С. Состоит из AddIn.dll и активного документа на базе MFC. AddIn.dll ответсвенна за создание окна внутри 1С, загрузку туда активного документа, передачу параметров из 1С в активный документ.
Вот код создания такого окна:
RECT rct = { 10,10,800,400 };
CString csProgID = "AddIn.Gdoc";
CString csTitle = "Окно внешней компоненты";
HWND hWnd;
IDispatch *pDisp;
//создаем окно 1С и загружаем туда документ по его ID
//Документ создается с значениями по умолчанию
m_iExtWndsSupport->CreateAddInWindow(csProgID.AllocSysString(),
csTitle.AllocSysString(),
0,0,
&rct,
0,
&hWnd,
&pDisp);
//После выполнения CreateAddInWindow pDisp указывает на созданный активный документ.
//Вызываем метод активного документа SetFileName, котрый допустим просто присваивает переданное значение какой-то переменной например cFile, а та просто отображается в окне.

COleDispatchDriver drvMain(pDisp,FALSE);
DISPID id;
BYTE bTypes[2] = { VT_BSTR,0 };
BSTR bscFName = T2OLE(m_csFileName);
BSTR bcs = T2OLE("SetFileName");
BSTR *arNames = &bcs;
pDisp->GetIDsOfNames(IID_NULL,arNames,1,MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),SORT_DEFAULT),&id);
drvMain.InvokeHelper(id,DISPATCH_METHOD,VT_EMPTY,NULL,bTypes,bscFName);

Проблема вот в чем: Выполнять методы документа, присваивать его свойствам какие либо значения получается можно только после его отображения. В случае с сFile мне не трудно вызвать ondraw() для перерисовки окна с новыми уже значениями. Но как быть с размерами пользовательского окна? Они определяются при создании документа и остаются равными значениями по умолчанию.
Отсюда вопрос
1. Как передать значения до CreateAddInWindow()
2. Можно ли программно переопределить значения пользовательского окна.
void CGdocView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
CSize sizeTotal;
// TODO: calculate the total size of this view
sizeTotal.cx = sizeTotal.cy = 100*nStr;
SetScrollSizes(MM_TEXT, sizeTotal);
}
...
Рейтинг: 0 / 0
25.08.2004, 07:41
    #32663962
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициализация переменных
Есть функция у CWnd, PreCreateWindow, туда передаётся сруктура, котороая помимо прочего содержит размер и положение окна.
...
Рейтинг: 0 / 0
25.08.2004, 15:02
    #32664974
Us
Us
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициализация переменных
Да нет, само окно меня устраивает. Меня не устраивает размер клиентской части окна. Она изменяется в зависимости от размера документа и если нужно появляется скролинг. Тут все оказалось достаточно просто
nStr=NewValue;
sizeTotal.cx = sizeTotal.cy = 1000*nStr;
SetScrollSizes(MM_TEXT, sizeTotal);
Invalidate(TRUE);
типа того что-то..
Только теперь вопрос в том КОГДА это делать.. Нужно чтобы окно перерисовывалось при изменении значения CSaphDoc->nStr (переменная класса CSaphDoc, в которую передается значение из 1С)
Выглядеть все должно так
- 1С создает документ со значениями по умолчанию
- Присваивает значения всем переменным, свойсвам, выполняет методы и т.д. в результате чего в классе CSaphDoc собираются все измененные ей данные.
- Когда 1С все заполнила допустим выполняет какой-то метод, которые должен перерисовать окна и содержимое по требованию.
Вот как вызвать из CSaphDoc перерисовку окна я чет туплю..

И еще хотелось бы, чтобы до выполнения этой функции вообще ничего не рисовалось, а ожидалось заполнения данных и команды отрисовки..
...
Рейтинг: 0 / 0
25.08.2004, 15:25
    #32665041
Us
Us
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициализация переменных
точно туплю
UpdateAllViews(NULL);
...
Рейтинг: 0 / 0
25.08.2004, 16:29
    #32665225
Sie
Sie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициализация переменных
Ну, эээ...
если проблемы с клиентской частью - это вам ловить WM_NCCALCSIZE
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Инициализация переменных / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]