zoukankan      html  css  js  c++  java
  • 用ActiveX 创建自己的comboBox 控件(一)

    1. 新建ActiveX工程ActiveXcomboBox

          

    Ok->next->next->next, create control based on 选择combobox, 点击finish创建成功.

    2.添加方法

    打开类视图,在类视图中找到ActiveXcomboBoxLib,打开旁边的“+”号展开,在_DActiveXcomboBox 上右键 Add-->Add Method

    在弹出的对话框中,method name 输入函数名:AddString ,internal name 自动添加。返回值类型选择 void ;添加参数:parameter name : strData ,parameter type : BSTR,点击Add 添加参数成功。

    Finish.完成,在类视图中可出现了刚添加的函数:

    接下来要实现函数体。打开solution explorer , 双击打开ActiveXcomboBoxCtrl.cpp , 找到刚刚添加的函数AddString,在函数里添加代码:

    ASSERT(::IsWindow(m_hWnd));

    ::SendMessage(m_hWnd, CB_ADDSTRING, 0, (LPARAM)strData); 

    2.2利用ActiveX container测试函数:

    运行程序,弹出对话框,在executable file name 中选择:ActiveX Control Test Container 

    点击OK,打开了ActiveX Control Test Container ,在空白处右键,弹出菜单,选择Insert New Control

     

    在弹出的对话框中选择ActiveXcomboBox Control  :

    OK 创建的控件被添加进来了:

    接下来测试函数:选中控件,然后点击工具栏上红色的小方块:

    在invoke method 对话框中,method name 选择Addstring , parameter value 中输入要加入到combobox  的字符串,这里输入“aaaa”,点击“set value”给参数赋值成功。

     

    点击“Invoke”调用函数。此时可以看到,comboBox 中下拉列表多了一行字符串,说明添加成功。

    重复此操作添加多行:

    2.3 修改comboBox 的外观

    上面添加进来的comboBox 不是下拉列表可隐藏的,要想改变ComboBox 的外观可在

    ActiveXcomboBoxCtrl.cpp 文件中,找到函数PreCreateWindow 。

    在函数中添加 cs.style |= CBS_DROPDOWNLIST; 

    comboBox 有三种显示样式:CBS_SIMPLE –-- 始终显示列表框

    CBS_DROPDOWN  ---类似于 CBS_SIMPLE,只不过只有当用户选择编辑控件旁的图标时,才会显示该列表框。

    CBS_DROPDOWNLIST---  类似于 CBS_DROPDOWN,只不过编辑控件无法编辑,只能显示列表框中当前选择的文本。

    用户可根据需要更改combbox的显示样式:

    如:

    cs.style |= WS_VSCROLL 是在列表长度不够时显示垂直的滚动条。

    (这里的或运算(|) 是为了保证原来的设置被保留)

     

    再运行程序,变成了下拉列表的样子:

     

    如果把comboBox拉的比较短,弹出下拉列表框会带有滚动条:

      2.4 添加函数DeleteItem

    按照上面添加函数的方法再添加一个函数void DeleteItem(LONG nIndex);

    (该函数用于删除一项,nIndex 是要删除的项的索引号)

    在ActiveXcomboBoxCtrl.cpp 文件中添加函数实现:

    void CActiveXcomboBoxCtrl::DeleteItem(LONG nIndex)

    {

             AFX_MANAGE_STATE(AfxGetStaticModuleState());

     

             // TODO: Add your dispatch handler code here

             SendMessage(CB_DELETESTRING, nIndex, 0);

    }

    2.5添加函数Getcount

    2.6    添加函数GetCurSel

    LONG GetCurSel(void); 用来获得当前选中的项目的索引。

    2.7    添加函数SetCurSel

    void  SetCurSel(LONG nSelect); 设置当前选中的项。--nSelect 选中项的索引。

    Next-->finish.

    2.8  添加函数GetListTextLen

    LONG GetListTextLen(LONG nIndex);该函数用来获得指定索引项的字符串长度。

    LONG CactiveXComboBoxCtrl::GetListTextLen(LONG nIndex)

    {

    AFX_MANAGE_STATE(AfxGetStaticModuleState());

     

    // TODO: Add your dispatch handler code here

     

    ASSERT(::IsWindow(m_hWnd));

    return (int)::SendMessage(m_hWnd, CB_GETLBTEXTLEN, nIndex, 0);

     

    return 0;

    }

    2.9添加函数GetText

    BSTR GetText(LONG nIndex); 获得指定索引nIndex 的内容。

    BSTR CactiveXComboBoxCtrl::GetText(LONG nIndex)

    {

    AFX_MANAGE_STATE(AfxGetStaticModuleState());

     

    CString strResult;

     

    // TODO: Add your dispatch handler code here

     ::SendMessage(m_hWnd, CB_GETLBTEXT, nIndex, (LPARAM)strResult.GetBufferSetLength(GetListTextLen(nIndex)));

     

     strResult.ReleaseBuffer();

    return strResult.AllocSysString();

    }

  • 相关阅读:
    字符串和编码
    Python基础
    输入和输出
    Python代码运行助手
    使用文本编辑器
    第一个Python程序
    pycharm中创建并设置docker解释器
    docker 在windows上的使用
    Python time datetime模块
    Linux安装字体文件
  • 原文地址:https://www.cnblogs.com/small-lazybee/p/7070243.html
Copyright © 2011-2022 走看看