Страница 1 из 2
пользовательский ActiveX Control (MFC, Visual Studio 2005, VC++)
Добавлено: 01 июн 2010, 23:09
FloyDos
Можно ли на форме пользовательского ActiveX Control'a разместить стандартные элементы управления?
Re: пользовательский ActiveX Control (MFC, Visual Studio 2005, VC++)
Добавлено: 01 июн 2010, 23:44
Romeo
В смысле пользовательского? Ты сам пишешь этот ActiveX или он чужой? Вообще, на самом деле, всё можно

Re: пользовательский ActiveX Control (MFC, Visual Studio 2005, VC++)
Добавлено: 02 июн 2010, 00:09
FloyDos
Сам создаю.
Размещаю на форме контол'а элементы, а при использовании контрол'a в приложении они не отображаются. В чем может быть причина?
Там судя по всему нужно функцию OnDraw ковырять? а как например отрисовать кнопку? иначе что ли никак?
Re: пользовательский ActiveX Control (MFC, Visual Studio 2005, VC++)
Добавлено: 02 июн 2010, 10:57
WinMain
Вот как выглядит подобный ActiveX внутри веб-страницы...
Вложение AxPage.jpg больше недоступно
Метод OnDraw() здесь не нужен (по крайней мере для отображения кнопки).
Чтобы твой ActiveX мог содержать другие элементы управления, его нужно создать как Composite control. Тогда этот контрол будет являться окном диалога (только без бордера и без заголовка), в котором ты сможешь разместить любые стандартные (и даже нестандартные) элементы.
Как создать такой контрол?
При создании нового проекта в окне визарда укажи
ATL Project.
В опциях проекта укажи тип модуля
Dynamic-link library (DLL). Можешь ещё включить опцию поддержки MFC (если тебе это нужно).
После создания нового проекта в него нужно добавить класс самого ActiveX-контрола.
Для этого через меню
Project->Add class... вызывается окно визарда, в котором нужно выбрать шаблон
ATL Control. В окне диалога визарда нужно указать опцию
Composite control.
После добавления в проект этого класса открываешь закладку ресурсов и находишь там окно диалога. В это окно диалога с помощью редактора можешь добавлять нужные элементы.
Re: пользовательский ActiveX Control (MFC, Visual Studio 2005, VC++)
Добавлено: 02 июн 2010, 12:04
FloyDos
WinMain
огромное вам спасибо, я уже неделю эти мучаюсь.... что только не перепробовал! выручили!

Re: пользовательский ActiveX Control (MFC, Visual Studio 2005, VC++)
Добавлено: 02 июн 2010, 13:18
FloyDos
а не подскажете, где динамически создавать элементы на контрол'е?
ну хотя бы - это возможно? или только статически можно?
Re: пользовательский ActiveX Control (MFC, Visual Studio 2005, VC++)
Добавлено: 03 июн 2010, 06:45
Decoder
Создать новый элемент на окне диалога можно с помощью функции CreateWindow().
Делать это нужно при обработке сообщения WM_INITDIALOG.
Тебе нужно перейти в закладку Class View и выделить там тот класс, который является классом твоего контрола. А в панели свойств (Properties) этого класса нужно найти сообщение WM_INITDIALOG и указать ему метод обработки OnInitDialog(). Visual C++ автоматически добавит в программный код этот метод.
Re: пользовательский ActiveX Control (MFC, Visual Studio 2005, VC++)
Добавлено: 03 июн 2010, 14:13
FloyDos
ого, спасибо!
А еще вопрос тогда - в функции CreateWindow нужен HWND родительского окна - как его заполучить?
Re: пользовательский ActiveX Control (MFC, Visual Studio 2005, VC++)
Добавлено: 03 июн 2010, 16:16
WinMain
У класса твоего контрола (т.е. у класса окна диалога) есть внутренняя переменная m_hWnd, которая имеет значение HWND окна диалога.
Re: пользовательский ActiveX Control (MFC, Visual Studio 2005, VC++)
Добавлено: 04 июн 2010, 00:19
FloyDos
спасибо. а регистрировать, показывать же тоже надо?
а то если так то не отображается
Код: Выделить всё
HWND btn=CreateWindowW(L"BUTTON",
L"but",
BS_ICON,
0, 0, 10, 20,
this->m_hWnd,
0,
(HINSTANCE)this->m_hWnd,
0
);