使用VC6创建MFC视图模式封装第三方ocx VSFlexGrid例子
时间: 2023-12-24 17:04:29 浏览: 90
以下是在 VC6 中创建 MFC 视图模式封装 VSFlexGrid 控件的示例:
1. 在 VC6 中创建一个 MFC 应用程序项目。
2. 添加 VSFlexGrid 控件。方法是:在“工具”菜单中选择“组件和控件”命令,找到并勾选 VSFlexGrid 控件。
3. 在资源视图中添加 VSFlexGrid 控件。方法是:在“工具”菜单中选择“自定义工具栏”,在弹出的对话框中选择“控件”选项卡,找到并选择 VSFlexGrid 控件,然后在自定义工具栏中点击“插入”按钮。接着,在资源视图中找到“Dialog”文件夹,双击打开“Dialog.rc”资源文件,将 VSFlexGrid 控件从自定义工具栏中拖拽到对话框中。
4. 创建一个新的类 CMyFlexGrid,用于封装 VSFlexGrid 控件。方法是:在“类向导”对话框中选择“MFC 类”选项卡,点击“添加类”按钮,选择“MFC ActiveX 控件”模板,命名为 CMyFlexGrid,选择“从现有控件类创建”选项,从列表中选择 VSFlexGrid 控件类(例如“VSFlexGrid50Ctl”),然后按照向导提示完成类的创建。
5. 在 CMyFlexGrid 类中添加必要的成员变量和成员函数。例如:
```c++
class CMyFlexGrid : public COleControl
{
public:
CMyFlexGrid();
public:
VSFlexGrid50Ctl m_flexGrid; // VSFlexGrid 控件
public:
// 属性
long m_rows;
long m_cols;
public:
// 方法
void SetCellText(long row, long col, LPCTSTR text);
LPCTSTR GetCellText(long row, long col);
void SetRows(long rows);
void SetCols(long cols);
void SetColWidth(long col, long width);
void SetRowHeight(long row, long height);
protected:
// 消息映射
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
DECLARE_MESSAGE_MAP()
};
```
以上代码中,m_flexGrid 成员变量用于存储 VSFlexGrid 控件对象,m_rows 和 m_cols 属性用于设置控件的行数和列数,SetCellText 和 GetCellText 方法用于设置和获取单元格的文本,SetRows 和 SetCols 方法用于设置控件的行数和列数,SetColWidth 和 SetRowHeight 方法用于设置单元格的宽度和高度。
6. 在 CMyFlexGrid 类中添加消息映射。方法是:在类的声明中添加 DECLARE_MESSAGE_MAP 宏,然后在类的实现中添加 ON_WM_CREATE 消息映射。例如:
```c++
BEGIN_MESSAGE_MAP(CMyFlexGrid, COleControl)
ON_WM_CREATE()
END_MESSAGE_MAP()
int CMyFlexGrid::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (COleControl::OnCreate(lpCreateStruct) == -1)
return -1;
// 创建 VSFlexGrid 控件
if (!m_flexGrid.Create(NULL, WS_CHILD | WS_VISIBLE, CRect(0, 0, 0, 0), this, 0))
return -1;
return 0;
}
```
以上代码中,OnCreate 方法用于创建 VSFlexGrid 控件,并将其作为子窗口添加到当前控件中。
7. 在资源视图中找到对话框的类,双击打开对话框的头文件,添加 CMyFlexGrid 对象作为类的成员变量。例如:
```c++
class CMyDialog : public CDialog
{
public:
CMyDialog(CWnd* pParent = NULL);
public:
CMyFlexGrid m_flexGrid; // VSFlexGrid 控件
protected:
virtual void DoDataExchange(CDataExchange* pDX);
DECLARE_MESSAGE_MAP()
};
```
8. 在对话框的 OnInitDialog 函数中创建 CMyFlexGrid 对象,并设置其属性和内容。例如:
```c++
BOOL CMyDialog::OnInitDialog()
{
CDialog::OnInitDialog();
// 创建 CMyFlexGrid 对象
if (!m_flexGrid.Create(NULL, NULL, WS_CHILD | WS_VISIBLE, CRect(0, 0, 0, 0), this, 0))
return FALSE;
// 设置控件属性
m_flexGrid.SetRows(5);
m_flexGrid.SetCols(3);
// 设置单元格内容
m_flexGrid.SetCellText(0, 0, _T("姓名"));
m_flexGrid.SetCellText(0, 1, _T("性别"));
m_flexGrid.SetCellText(0, 2, _T("年龄"));
m_flexGrid.SetCellText(1, 0, _T("张三"));
m_flexGrid.SetCellText(1, 1, _T("男"));
m_flexGrid.SetCellText(1, 2, _T("20"));
m_flexGrid.SetCellText(2, 0, _T("李四"));
m_flexGrid.SetCellText(2, 1, _T("女"));
m_flexGrid.SetCellText(2, 2, _T("22"));
m_flexGrid.SetCellText(3, 0, _T("王五"));
m_flexGrid.SetCellText(3, 1, _T("男"));
m_flexGrid.SetCellText(3, 2, _T("24"));
m_flexGrid.SetCellText(4, 0, _T("赵六"));
m_flexGrid.SetCellText(4, 1, _T("女"));
m_flexGrid.SetCellText(4, 2, _T("26"));
return TRUE;
}
```
以上代码中,OnInitDialog 函数用于创建 CMyFlexGrid 对象,并设置其属性和内容。
9. 运行程序,可以看到 VSFlexGrid 控件中显示了设置的数据。
阅读全文