VC6创建MFC视图模式封装第三方ocx VSFlexGrid例子
时间: 2023-10-07 21:09:09 浏览: 70
好的,下面是创建MFC视图模式封装第三方ocx VSFlexGrid的例子:
1. 首先,将VSFlexGrid.ocx文件复制到项目目录下的res文件夹中。
2. 在VC6中创建一个MFC应用程序,选择视图模式(View-based)。
3. 在资源视图中,右键单击资源文件夹,选择添加->资源,选择OCX文件类型,然后选择VSFlexGrid.ocx文件并将其添加到资源文件夹中。
4. 在类向导中添加一个新类,选择视图类型,名称为CVSFlexGridView,基类为CView。
5. 在CVSFlexGridView的头文件中添加以下代码:
```cpp
#include "afxwin.h"
#include "afxcmn.h"
#include "afxdisp.h"
class CVSFlexGridView : public CView
{
protected:
CVSFlexGridView();
DECLARE_DYNCREATE(CVSFlexGridView)
// Attributes
public:
COleDispatchDriver m_vsfg;
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CVSFlexGridView)
public:
virtual void OnDraw(CDC* pDC); // overridden to draw this view
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
protected:
virtual void OnInitialUpdate(); // called first time after construct
//}}AFX_VIRTUAL
// Implementation
protected:
virtual ~CVSFlexGridView();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
// Generated message map functions
protected:
//{{AFX_MSG(CVSFlexGridView)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
```
6. 在CVSFlexGridView的实现文件中添加以下代码:
```cpp
// CVSFlexGridView.cpp : implementation of the CVSFlexGridView class
//
#include "stdafx.h"
#include "VSFlexGrid.h"
#include "VSFlexGridView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CVSFlexGridView
IMPLEMENT_DYNCREATE(CVSFlexGridView, CView)
BEGIN_MESSAGE_MAP(CVSFlexGridView, CView)
//{{AFX_MSG_MAP(CVSFlexGridView)
ON_WM_CREATE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CVSFlexGridView construction/destruction
CVSFlexGridView::CVSFlexGridView()
{
// TODO: add construction code here
}
CVSFlexGridView::~CVSFlexGridView()
{
}
BOOL CVSFlexGridView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CVSFlexGridView drawing
void CVSFlexGridView::OnDraw(CDC* pDC)
{
CDocument* pDoc = GetDocument();
// TODO: add draw code here
}
/////////////////////////////////////////////////////////////////////////////
// CVSFlexGridView diagnostics
#ifdef _DEBUG
void CVSFlexGridView::AssertValid() const
{
CView::AssertValid();
}
void CVSFlexGridView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CVSFlexGridView message handlers
void CVSFlexGridView::OnInitialUpdate()
{
CView::OnInitialUpdate();
// Create OLE dispatch driver
m_vsfg.CreateDispatch(_T("VSFlexGrid.VSFlexGrid.7"));
// Set VSFlexGrid properties
m_vsfg.SetVisible(TRUE);
m_vsfg.SetBackColor(RGB(255, 255, 255));
m_vsfg.SetForeColor(RGB(0, 0, 0));
// Set VSFlexGrid position and size
CRect rect;
GetClientRect(&rect);
m_vsfg.MoveWindow(&rect);
// Set VSFlexGrid column headers
m_vsfg.SetCols(3);
m_vsfg.SetColWidth(0, 1000);
m_vsfg.SetColWidth(1, 1000);
m_vsfg.SetColWidth(2, 1000);
m_vsfg.SetTextMatrix(0, 0, _T("Column 1"));
m_vsfg.SetTextMatrix(0, 1, _T("Column 2"));
m_vsfg.SetTextMatrix(0, 2, _T("Column 3"));
// Set VSFlexGrid rows
m_vsfg.SetRows(3);
m_vsfg.SetTextMatrix(1, 0, _T("Row 1, Col 1"));
m_vsfg.SetTextMatrix(1, 1, _T("Row 1, Col 2"));
m_vsfg.SetTextMatrix(1, 2, _T("Row 1, Col 3"));
m_vsfg.SetTextMatrix(2, 0, _T("Row 2, Col 1"));
m_vsfg.SetTextMatrix(2, 1, _T("Row 2, Col 2"));
m_vsfg.SetTextMatrix(2, 2, _T("Row 2, Col 3"));
}
int CVSFlexGridView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
return 0;
}
```
7. 在MainFrm.h头文件中添加以下代码:
```cpp
#include "VSFlexGridView.h"
```
8. 在MainFrm.cpp文件中的Create函数中添加以下代码:
```cpp
m_wndVSFlexGridView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW,
CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL);
pContext->m_pNewViewClass = RUNTIME_CLASS(CVSFlexGridView);
```
9. 编译并运行程序,可以看到一个带有VSFlexGrid控件的视图。