Страница 6 из 7 AciveX Control Для этого примера нам понадобится любое оконное приложение. ActiveX Control'ы вставляются в диалог обычно через Components and Controls Gallery: Меню-Project-Add_To_Project-Components_and_Controls-Registered_ActiveX_Controls. Нам в качестве примера вполне подойдёт Microsoft FlexGrid Control. Нажмите кнопку Insert для добавления его в проект, в появившемся окне Confirm Classes оставьте галочку только возле элемента CMSFlexGrid и смело жмите OK. В результате будут сформированы два файла msflexgrid.h и msflexgrid.cpp, большую часть содержимого которых нам придётся удалить. После всех изменений эти файлы будут иметь следующий вид: msflexgrid.h // msflexgrid.h
#ifndef __MSFLEXGRID_H__ #define __MSFLEXGRID_H__
#if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000
#pragma warning(disable:4146) #import <MSFLXGRD.OCX>
class CMSFlexGrid : public CWnd { protected: DECLARE_DYNCREATE(CMSFlexGrid) public:
MSFlexGridLib::IMSFlexGridPtr I; // доступ к интерфейсу void PreSubclassWindow (); // инициализация I };
//{{AFX_INSERT_LOCATION}}
#endif msflexgrid.cpp // msflexgrid.cpp
#include "stdafx.h" #include "msflexgrid.h"
IMPLEMENT_DYNCREATE(CMSFlexGrid, CWnd)
void CMSFlexGrid::PreSubclassWindow () { CWnd::PreSubclassWindow();
MSFlexGridLib::IMSFlexGrid *pInterface = NULL;
if (SUCCEEDED(GetControlUnknown()->QueryInterface(I.GetIID(), (void**)&pInterface))) { ASSERT(pInterface != NULL); I.Attach(pInterface); } } Теперь вставим элемент в любой диалог, например CAboutDlg. В диалог добавим переменную связанную с классом CMSFlexGrid и метод OnInitDialog, текст которого приведён ниже. При вызове диалога в наш FlexGrid будут добавлены два элемента: BOOL CAboutDlg::OnInitDialog() { CDialog::OnInitDialog();
m_grid.I->AddItem("12345"); m_grid.I->AddItem("54321");
return TRUE; } |