生活杂感

MFC之使用 Windows 标准控件

2019-05-12  本文已影响2人  御承扬

使用 Windows 标准控件


一、Windows 标准控件

1、常用 Windows 控件

控件 MFC 类 说明
按钮控件 CButton 按钮控件,可以产生单击事件;也可以扩展为复选框、单选框按钮分组框
组合框 CComboBox 编辑框和列表框的组合
日期时间选择框 CDateTimeCtrl 可以选择日期或时间值
编辑控件 CEdit 文本输入框
扩展组合框 CComboBoxEx 可以显示图片的组合框
标题控件 CHeaderCtrl 列头按钮,用于控制文本的显示
热键控件 CHotKeyCtrl 用户热键控件
图像列表 CImageList 图像列表,用于管理一组图标或位图
列表视图控件 CListCtrl 显示带有图标的文本列表
列表控件 CListBox 显示带有字符串列表的控件
月历 CMonthCalCtrl 显示日期信息的控件
进度条控件 CProgressCtrl 指示操作过程进度的控件
控件工具栏 CRebarCtrl 包含子控件的工具栏
扩展编辑框 CRichEditCtrl 带有段落和字符格式的编辑框
滚动条 CScrollBar 对话框中用于滚动查看的滚动条
滑块控件 CSliderCtrl 用于定位选项位置的滑块控件
微调按钮 CSpinButtonCtrl 用于定量增加或定量减少的微调按钮
静态控件 CStatic 用于标记其他控件的文本控件
状态栏控件 CStatusBarCtrl 显示状态信息的状态栏
工具栏 CToolBarCtrl 包含命令按钮的工具栏
工具提示 CToolTipCtrl 小的弹出对话框,用于描述工具栏按钮或其他工具功能的控件
树形图控件 CTreeCtrl 显示树形列表项的属性视图控件

2、使用对话框编辑器创建控件

月历控件.PNG

3、控件基类 CWnd

4、控件的消息以及处理

控件消息处理测试.PNG

5、创建控件对象

控件成员变量.PNG

2)选择要增加变量的,单击添加变量按钮,打开添加变量的对话框:

添加控件变量.PNG

3)在添加变量对话框中的填上成员变量名以及必要的注释信息。

4)若要删除控件变量,则在类向导对话框的成员变量选项卡中选定要删除变量的控件,然后单击删除变量按钮。

6、按钮

6.1、按钮简介

6.2、按钮类 CButton

6.3、按钮的属性与消息

6.5、设定和获取按钮状态

二、静态控件和编辑控件

1、创建与使用静态控件

1.1、静态控件类 CStatic

2、创建编辑控件

2.1、编辑控件类 CEdit

3.编辑控件的消息

4、编辑控件应用实例

//首先在菜单栏添加一个菜单命令用来弹出测试对话框
//接着在主程序的.h文件,增加一个菜单命令消息映射
afx_msg void OnTestDlg();
//其次在主程序的.cpp文件
ON_COMMAND(IDM_ABOUTBOX, OnTestDlg)
//接下来编写测试对话框的实现代码
//静态控件和编辑控件测试
class CStaticAndEditSampleDlg :public CDialog  //对话框类声明
{
public:
    void WriteLog(CString message, CString title);//记录日志函数声明
    CStaticAndEditSampleDlg(CWnd* pParent = NULL);//标准构造函数
    //{{AFX_DATA(CStaticAndEditSampleDlg)
    enum 
    {
        IDD = IDD_STATICANDEDITSAMPLE_DIALOG
    };
    CEdit m_editTestScroll; //带滚动条的编辑控件对应的对象
    CEdit m_editTest; //测试编辑控件对应的对象
    CStatic m_staticLog; //日志静态框
    //}}AFX_DATA
    //{{AFX_VIRTUAL(CStaticAndEditSampleDlg)
protected:
    virtual void DoDataExchange(CDataExchange* pDX); //DDX/DDV 支持
    //}}AFX_VIRTUAL
protected:
    HICON m_hIcon;  //图标变量
    //{{AFX_MSG(CStaticAndEditSampleDlg)//消息映射
    virtual BOOL OnTestInitDialog(); //初始化对话框函数声明
    afx_msg void OnSysCommand(UINT nID, LPARAM lParam);//系统命令函数声明
    afx_msg void OnPaint(); //重绘函数声明
    afx_msg HCURSOR OnQueryDragIcon(); //查询拖放图标函数声明
    afx_msg void OnChangeEditTest();  //改变编辑框内容函数声明
    afx_msg void OnErrspaceEditTest();  //擦除编辑框内容函数声明
    afx_msg void OnKillfocusEditTest();  //编辑框失去焦点函数声明
    afx_msg void OnMaxtextEditTest();   //编辑框内容达到最大值函数声明
    afx_msg void OnSetfocusEditTest();  //设置编辑框检点函数声明
    afx_msg void OnUpdateEditTest();  //更新编辑框函数声明
    afx_msg void OnHscrollEditTestScroll();  //水平滚动条滚动事件函数声明
    afx_msg void OnVscrollEditTestScroll();  //垂直滚动条滚动事件函数声明
    afx_msg void OnButtonGetedittext();  //获取文本内容时间函数声明
    afx_msg void OnButtonSetedittext(); //设置文本内容事件函数声明
    afx_msg void OnButtonGetline(); //获取文本行内容事件函数声明
    afx_msg void OnButtonGetsel();  //获取选择的文本内容事件函数声明
    afx_msg void OnButtonSetsel();  //设置选择的文本内容事件函数声明
    afx_msg void OnButtonReplacesel();  //替换选择的文本内容事件函数声明
    afx_msg void OnStaticTest();  //静态控件测试事件函数声明
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()  //结束消息映射
public:
    /*DECLARE_MESSAGE_MAP()
    afx_msg void OnEnChangeEditTest();
    afx_msg void OnBnClickedButtonGetline();
    afx_msg void OnEnChangeEditTestscroll();*/
    /*afx_msg void OnAboutbox();
    afx_msg void OnStnClickedStaticLog();*/
};


//对话框初始化函数
CStaticAndEditSampleDlg::CStaticAndEditSampleDlg(CWnd* pParent/*=NULL*/) :CDialog(CStaticAndEditSampleDlg::IDD, pParent)
{
    //{{AFX_DATA_INIT(CStaticAndEditSampleDlg)
    //}}AFX_DATA_INIT
    m_hIcon = AfxGetApp()->LoadIconW(IDR_MAINFRAME); //装载应用程序图标
}

//数据交换函数
void CStaticAndEditSampleDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX); //执行基类的数据交换函数
    //{{AFX_DATA_MAP(CStaticAndEditSampleDlg) //控件和数据映射对应关系
    DDX_Control(pDX, IDC_EDIT_TESTSCROLL, m_editTestScroll);
    DDX_Control(pDX, IDC_EDIT1_TEST, m_editTest);
    //日志静态框变量声明
    DDX_Control(pDX, IDC_STATIC_LOG, m_staticLog);
    //}}AFX_DATA_MAP
}BEGIN_MESSAGE_MAP(CStaticAndEditSampleDlg, CDialog) //消息映射表开始
//{{AFX_MSG_MAP(CStaticAndEditSampleDlg)

ON_WM_SYSCOMMAND()  //系统命令消息
ON_WM_PAINT() //重绘消息
ON_WM_QUERYDRAGICON()  //查询拖动图标消息
//编辑框内容改变消息映射
ON_EN_CHANGE(IDC_EDIT1_TEST, &CStaticAndEditSampleDlg::OnChangeEditTest)
//编辑框内容擦除消息映射
ON_EN_ERRSPACE(IDC_EDIT1_TEST, &CStaticAndEditSampleDlg::OnErrspaceEditTest)
//编辑框失去焦点消息映射
ON_EN_KILLFOCUS(IDC_EDIT1_TEST, &CStaticAndEditSampleDlg::OnKillfocusEditTest)
//编辑框内容改变消息映射
ON_EN_MAXTEXT(IDC_EDIT1_TEST, &CStaticAndEditSampleDlg::OnMaxtextEditTest)
//编辑框获得焦点消息映射
ON_EN_SETFOCUS(IDC_EDIT1_TEST, &CStaticAndEditSampleDlg::OnSetfocusEditTest)
//编辑框内容更新消息映射
ON_EN_UPDATE(IDC_EDIT1_TEST, &CStaticAndEditSampleDlg::OnUpdateEditTest)
//水平滚动消息映射
ON_EN_HSCROLL(IDC_EDIT_TEST_SCROLL, &CStaticAndEditSampleDlg::OnHscrollEditTestScroll)
//垂直滚动消息
ON_EN_VSCROLL(IDC_EDIT_TEST_VSCROLL, &CStaticAndEditSampleDlg::OnVscrollEditTestScroll)
//获取文本消息
ON_BN_CLICKED(IDC_BUTTON_GETEDITTEXT, &CStaticAndEditSampleDlg::OnButtonGetedittext)
//设置文本消息
ON_BN_CLICKED(IDC_BUTTON_SETEDITTEXT, &CStaticAndEditSampleDlg::OnButtonSetedittext)
ON_BN_CLICKED(IDC_BUTTON_GETLINE, &CStaticAndEditSampleDlg::OnButtonGetline) //获取行
//获取选择内容
ON_BN_CLICKED(IDC_BUTTON_GETSEL, &CStaticAndEditSampleDlg::OnButtonGetsel)
//设置选择内容
ON_BN_CLICKED(IDC_BUTTON_SETSEL, &CStaticAndEditSampleDlg::OnButtonSetsel)
//文本替换
ON_BN_CLICKED(IDC_BUTTON_REPLACESEL, &CStaticAndEditSampleDlg::OnButtonReplacesel)
ON_BN_CLICKED(IDC_STATIC_TEST, &CStaticAndEditSampleDlg::OnStaticTest)
//}}AFX_MSG_MAP

END_MESSAGE_MAP()

void CMFCApplication1App::OnTestDlg()
{
    CStaticAndEditSampleDlg aboutDlg;
    aboutDlg.DoModal();
}
//初始对话框
BOOL CStaticAndEditSampleDlg::OnTestInitDialog()
{
    //调用基类对话框初始化函数
    CDialog::OnInitDialog();
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);  //判断是否关于命令
    ASSERT(IDM_ABOUTBOX < 0xF000);
    CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu != NULL)
    {
        //定义存放菜单名称的字符串变量
        CString strAboutMenu;
        strAboutMenu.LoadStringW(IDD_STATICANDEDITSAMPLE_DIALOG); //装载对话框的菜单
        if (!strAboutMenu.IsEmpty())
        {
            pSysMenu->AppendMenu(MF_SEPARATOR);//增加分隔符
            //增加“关于”菜单命令
            pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
        }
    }
    SetIcon(m_hIcon, TRUE); //设置大图标
    SetIcon(m_hIcon, FALSE); //设置小图标
    return TRUE;
}

void CStaticAndEditSampleDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
    if ((nID & 0xFFF0) == IDM_ABOUTBOX)  //判断单击选择的命令是否为“关于”命令
    {
        CAboutDlg dlgAbout; //定义关于对话框
        dlgAbout.DoModal();  //显示“关于”对话框
    }
    else
        CDialog::OnSysCommand(nID, lParam);  //如果不是“关于”命令,则处理命令消息
}

void CStaticAndEditSampleDlg::OnPaint()  //对话框绘制函数
{
    if (IsIconic())  //判断是否是图标状态
    {
        CPaintDC dc(this);  //进行绘制的设备上下文
        //发送图标背景绘制消息
        SendMessage(WM_ICONERASEBKGND, (WPARAM)dc.GetSafeHdc(), 0);
        //将图标放置在客户端矩形中间
        int cxIcon = GetSystemMetrics(SM_CXICON);//获取小图标的x长度
        int cyIcon = GetSystemMetrics(SM_CYICON);//获取小图标的y高度
        CRect rect; //定义矩形区域
        GetClientRect(&rect);  //获取客户区矩形
        int x = (rect.Width() - cxIcon + 1) / 2;  //计算客户区中心点的X值
        int y = (rect.Height() - cyIcon + 1) / 2;  //计算客户区中心点y值
        dc.DrawIcon(x, y, m_hIcon);  //绘制图标
    }
    else
        CDialog::OnPaint();
}

//获取拖动图标消息处理函数
HCURSOR CStaticAndEditSampleDlg::OnQueryDragIcon()
{
    return (HCURSOR)m_hIcon;
}

//文本内容改变消息处理函数
void CStaticAndEditSampleDlg::OnChangeEditTest()
{
    // TODO:  如果该控件是 RICHEDIT 控件,它将不
    // 发送此通知,除非重写 CDialog::OnInitDialog()
    // 函数并调用 CRichEditCtrl().SetEventMask(),
    // 同时将 ENM_CHANGE 标志“或”运算到掩码中。
    WriteLog(L"接收到ON_EN_CHANGE消息", CString("左边的编辑控件"));
    // TODO:  在此添加控件通知处理程序代码
}
//文本内容擦除消息处理函数
void CStaticAndEditSampleDlg::OnErrspaceEditTest()
{
    WriteLog(L"接收到ON_EN_ERRSPACE消息", CString("左边的编辑控件"));
}
//失去焦点消息处理函数
void CStaticAndEditSampleDlg::OnKillfocusEditTest()
{
    WriteLog(L"接收到ON_EN_KILLFOCUS消息", CString("左边的编辑控件"));
}
//达到最大文本数消息处理函数
void CStaticAndEditSampleDlg::OnMaxtextEditTest()
{
    WriteLog(L"接收到ON_EN_MAXTEXT消息", CString("左边的编辑控件"));
}
//获取焦点 消息处理函数
void CStaticAndEditSampleDlg::OnSetfocusEditTest()
{
    WriteLog(L"接收到ON_EN_SETFOCUS消息", CString("左边的编辑控件"));
}
//更新消息处理函数
void CStaticAndEditSampleDlg::OnUpdateEditTest()
{
    WriteLog(L"接收到ON_EN_UPDATE消息", CString("左边的编辑控件"));
}
//水平滚动消息处理函数
void CStaticAndEditSampleDlg::OnHscrollEditTestScroll()
{
    WriteLog(L"接收到ON_EN_HSCROLL消息", CString("右边的编辑控件"));
}
//垂直滚动消息处理函数
void CStaticAndEditSampleDlg::OnVscrollEditTestScroll()
{
    WriteLog(L"接收到ON_EN_VSCROLL消息", CString("右边的编辑控件"));
}
//显示日志函数
void CStaticAndEditSampleDlg::WriteLog(CString message, CString title)
{
    //获取当前日志静态框的文本内容
    m_staticLog.SetWindowText(title + "--" + message);
}
//获取编辑框内容处理函数
void CStaticAndEditSampleDlg::OnButtonGetedittext()
{
    CString content; //定义编辑框内容字符串
    m_editTest.GetWindowText(content);
    //在弹出对话框中显示获取的编辑内容
    MessageBox(content, L"获取左边编辑框的内容");
}
//设置编辑框内容处理函数
void CStaticAndEditSampleDlg::OnButtonSetedittext()
{
    m_editTest.SetWindowText(L"你好,这是在测试");
}
//获取编辑框指定行内容处理函数
void CStaticAndEditSampleDlg::OnButtonGetline()
{
    TCHAR content[256]; //存放内容的字符串变量
    memset(content, 0x00, sizeof(content));//初始化字符串数组
    int iCount = m_editTest.GetLine(1, content, sizeof(content));//获取第二行的内容
    if (iCount > 0)
        MessageBox(content, L"GETLINE 获取第二行内容");
    else
        MessageBox(L"失败", L"GETLINE 获取第二行内容");
}
//获取选择的内容
void CStaticAndEditSampleDlg::OnButtonGetsel()
{
    int iStart = 0, iEnd = 0;  //定义开始位置和结束位置的变量
    //获取选择的内容所在的开始位置和结束位置
    m_editTest.GetSel(iStart, iEnd);
    CString log;  //日志字符串
    log.Format(L"选择的内容从%d个字符到第%d个字符", iStart, iEnd);//格式化信息提示
    MessageBox(log, L"GetSel");
}
//设置选择的内容
void CStaticAndEditSampleDlg::OnButtonSetsel()
{
    m_editTest.SetSel(5, 10, TRUE);//设置选择第6~11个字符
    MessageBox(L"选择第6个字符到第11个字符", L"SetSel");//显示提示信息
}
//文本替换命令
void CStaticAndEditSampleDlg::OnButtonReplacesel()
{
    m_editTest.ReplaceSel(L"若道天涯无回路,漫漫黄沙掩枯骨");
}
//静态控件处理函数
void CStaticAndEditSampleDlg::OnStaticTest()
{
    MessageBox(L"如果使用 SS_NOTIFY 创建静态控件, \n则可以接收单击事件,\n此处就是  例子。", L"静态控件");
}

5、单选按钮和复选框

5.1、单选按钮控件创建

1)在工具箱中选择 “Group Box” 添加分组框。

2)在工具箱中选择 “Radio Button” 向分组框中添加单选按钮。

3)将组合框里的第一个单选按钮的 Group 属性、Tab stop 属性和 Auto 属性都设置为 True;其余的单选按钮将 Tab stop 属性和 Auto 属性设置为 True 就可以了。

5.2 单选控件的消息

5.3 复选框的创建

1)在工具箱中选择 “Group Box” 添加分组框。

2)在工具箱中选择 “Chick Box” 向分组框添加复选框。

5.4 单选按钮和复选框示例

afx_msg void OnButtoGetstate();
ON_BN_CLICKED(IDC_BUTTON_CH, &CStaticAndEditSampleDlg::OnButtoGetstate)

//单选按钮和复选框测试
void CStaticAndEditSampleDlg::OnButtoGetstate()
{
    //颜色选择
    UINT iColor[] = { IDC_RADIO_RED,IDC_RADIO_GREEN,IDC_RADIO_BLUE };
    CString sColor[] = { L"红色",L"绿色",L"蓝色" };
    CString sResualtColor;
    CButton *pBtn = NULL;
    for (int i = 0; i < 3; i++)
    {
        pBtn = (CButton*)GetDlgItem(iColor[i]);
        if (!pBtn)
            continue;
        if (pBtn->GetCheck() == 1)
            sResualtColor = L"颜色选择:" + sColor[i];
    }

    //性别选择
    UINT iSex[] = { IDC_RADIO_BOY,IDC_RADIO_GIRL };
    CString sSex[] = { L"男",L"女" };
    CString sResualtSex;
    for (int i = 0; i < 2; i++)
    {
        pBtn = (CButton*)GetDlgItem(iSex[i]);
        if (!pBtn)
            continue;
        if (pBtn->GetCheck() == 1)
            sResualtSex = L"\n性别选择:" + sSex[i];
    }

    //喜好选择
    UINT iLike[] = { IDC_CHECK_BOOK,IDC_CHECK_MUSIC,IDC_CHECK_SPORT,IDC_CHECK_DANCE };
    CString sLike[] = { L"读书",L"听音乐",L"运动",L"跳舞" };
    CString sResualtLike = L"\n爱好:";
    for (int i = 0; i < 4; i++)
    {
        pBtn = (CButton*)GetDlgItem(iLike[i]);
        if (!pBtn)
            continue;
        if (pBtn->GetCheck() == 1)
            sResualtLike = sResualtLike + sLike[i] + L"、";
    }

    //总结输出
    MessageBox(sResualtColor + sResualtSex + sResualtLike, L"选择结果");
}
选择按钮示例.PNG

三、列表框和组合框

1、创建列表框

2、列表框消息

3、列表框示例

// MFCDiaLog 消息处理程序
BOOL MFCDiaLog::OnInitDialog()
{
    CDialog::OnInitDialog();
    CString items[5] = { L"地名",L"北京",L"上海",L"广州",L"肇庆" };
    for (int i = 0; i < 5; i++)
    {
        m_listTest.AddString(items[i]);
    }
    return TRUE;
}
void MFCDiaLog::OnSelChangeTest()
{
    int index = m_listTest.GetCurSel();
    CString result;
    m_listTest.GetText(index, result);
    MessageBox(result, L"当前列表框选择的内容");
}

4、创建组合框

5、组合框消息

6、组合框示例

CComboBox m_combotest;
    afx_msg void OnSelChangeCombotest();
BEGIN_MESSAGE_MAP(MFCDiaLog, CDialog)
    ON_CBN_SELCHANGE(IDC_COMBO,OnSelChangeCombotest)
END_MESSAGE_MAP()
BOOL MFCDiaLog::OnInitDialog()
{
    CDialog::OnInitDialog();
    m_combotest.AddString(L"汉族");
    m_combotest.AddString(L"回族");
    m_combotest.AddString(L"满族");
    m_combotest.AddString(L"白族");
    m_combotest.AddString(L"其他");
    return TRUE;
}
void MFCDiaLog::OnSelChangeCombotest()
{
    CString result;
    m_combotest.GetLBText(m_combotest.GetCurSel(),result);
    MessageBox(result, L"当前组合框选择的内容");
}

四、微调控件、滑块控件和进度条控件

1、微调控件的创建和使用

2、创建和使用滑块控件

3、创建和使用进度条控件

5、示例

// 微调控件测试
    CSpinButtonCtrl m_spin;
    // 滑块控件测试
    CSliderCtrl m_slider;
    // 进度条测试
    CProgressCtrl m_progress;
    afx_msg void OnReleasedcaptureSliderPercent(NMHDR* pNMHDR, LRESULT* pResult);
    afx_msg void OnButtonTimer();
    afx_msg void OnTimer(UINT nIDEvent);
    // 微调控件所附的编辑控件
    CEdit m_editPrecent;
void MFCDiaLog::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_SPIN1, m_spin);
    DDX_Control(pDX, IDC_SLIDER1, m_slider);
    DDX_Control(pDX, IDC_PROGRESS1, m_progress);
    DDX_Control(pDX, IDC_EDIT2, m_editPrecent);
}
BEGIN_MESSAGE_MAP(MFCDiaLog, CDialog)
    ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER1, OnReleasedcaptureSliderPercent)
    ON_BN_CLICKED(IDC_BUTTON1,OnButtonTimer)
    ON_WM_TIMER(IDC_PROGRESS1,OnTimer)
END_MESSAGE_MAP()
    
void MFCDiaLog::OnReleasedcaptureSliderPercent(NMHDR* pNMHDR, LRESULT* pResult)
{
    CString text;  //定义字符串变量
    //获取滑块控件当前位置
    text.Format(L"%d", m_slider.GetPos());
    //在编辑控件中显示当前选择值
    m_editPrecent.SetWindowText(text);
    *pResult = 0;
}
//定时器按钮
void MFCDiaLog::OnButtonTimer()
{
    m_progress.SetPos(0);
    SetTimer(100, 100, NULL);
}
//定时器处理函数
void MFCDiaLog::OnTimer(UINT nIDEvent)
{
    //如果定时器是滑块滑动定时器
    if (nIDEvent == 100)
    {
        int pos = m_progress.GetPos();//获取进度条位置
        if (pos < 100)
            m_progress.SetPos(m_progress.GetPos() + 1);
        else
            KillTimer(100);//关闭计时器
    }
    CDialog::OnTimer(nIDEvent);
}

五、列表视图控件和树形视图控件

1、创建列表视图控件

2、CListCtrl 类

3、CTreeCtrl 类

4、树形视图控件的消息

5、示例:

BOOL MFCDiaLog::OnInitDialog()
{
    //列表视图控件
    m_listview.InsertItem(0, L"张三", 0);
    m_listview.InsertItem(1, L"李四", 1);
    m_listview.InsertItem(2, L"王五", 2);
    //树形视图
    HTREEITEM hProvince = m_filectrl.InsertItem(L"广东省", 0, 0);
    HTREEITEM hcity1 = m_filectrl.InsertItem(L"肇庆市", 1, 1, hProvince);
    m_filectrl.InsertItem(L"端州区", 2, 2, hcity1);
    m_filectrl.InsertItem(L"星湖区", 2, 2, hcity1);
    m_filectrl.InsertItem(L"鼎湖区", 2, 2, hcity1);
    m_filectrl.InsertItem(L"高要区", 2, 2, hcity1);
    hcity1 = m_filectrl.InsertItem(L"汕尾市", 1, 1, hProvince);
    HTREEITEM city2 = m_filectrl.InsertItem(L"陆丰市", 2, 2, hcity1);
    m_filectrl.InsertItem(L"海丰县", 2, 2, hcity1);
    m_filectrl.InsertItem(L"城区", 2, 2, hcity1);
    m_filectrl.InsertItem(L"陆河县", 2, 2, hcity1);
    m_filectrl.InsertItem(L"河西街道", 3, 3, city2);
    return TRUE;
}

树形视图.PNG

六、ActiveX 控件

1、使用 ActiveX 控件

2、ActiveX 控件的结构

3、包装类

上一篇 下一篇

猜你喜欢

热点阅读