zoukankan      html  css  js  c++  java
  • 树ComboBox控件

    介绍 最近,我需要一 个树控件在一个组合框内,在我搜索谷歌期间,我发现了一些东西,但它比我需要的稍微复杂一点。我开始自己起草,并与您分享结果。 使用的代码 一切都基于CTreeComboBox,它是从标准的CComboBox派生出来的。这里我有一个CComboTreeCtrl变量成员和树控件的方法特征。在CTreeComboBox::PreSubclassWindow中,我创建和初始化m_Tree并在combobox下拉列表上拉伸。

    void CTreeComboBox::PreSubclassWindow() 
    {
        // TODO: Add your specialized code here and/or call the base class
    
        CComboBox::PreSubclassWindow();
    
        CRect rect(0, 0, 0, 0);
        DWORD dwStyle =  WS_POPUP | WS_BORDER | TVS_DISABLEDRAGDROP | 
        TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS | TVS_FULLROWSELECT | 
        TVS_CHECKBOXES;
        m_Tree.CreateEx(0, WC_TREEVIEW, NULL, dwStyle, rect, GetParent(), 0, NULL);
        m_Tree.Init(this);
    
        GetClientRect(rect);
        SetDroppedWidth(rect.Width());
        SetDroppedHeight(m_droppedHeight);
    
        dwStyle = 0x03 & GetStyle();
        ASSERT(dwStyle == CBS_DROPDOWNLIST);
    }

    首先点击,或按下箭头键,树窗口将打开。

    void CTreeComboBox::OnLButtonDown(UINT nFlags, CPoint point) 
    {
        // TODO: Add your message handler code here and/or call default
    
        m_bTree = ! m_bTree;
        if(m_bTree)DisplayTree();
    
    //    CComboBox::OnLButtonDown(nFlags, point);
    }

    和:

    BOOL CTreeComboBox::PreTranslateMessage(MSG* pMsg) 
    {
        // TODO: Add your specialized code here and/or call the base class
    
        if(pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_DOWN)
        {
            DisplayTree();
            return TRUE;
        }
    
        return CComboBox::PreTranslateMessage(pMsg);
    }

    但树窗口应该关闭在第二次点击,escape键,Enter键,或失去焦点。我尝试了几种方法,但都失败了,所以我的解决方案是发送给父(CTreeComboBox)一个消息来关闭。

    LRESULT CTreeComboBox::OnCloseControl(WPARAM wParam, LPARAM lParam)
    {
        TreeCtrlDone();
        m_Tree.ShowWindow(SW_HIDE);
        m_bTree = FALSE;
    
        return 1;
    }

    ComboBox必须用CBS_DROPDOWNLIST设置,否则将断言:) 为了使用这个控件,您需要#include“TreeComboBox”。h”,并进一步将combobox处理为树形控件(您可以在示例项目中看到如何处理)。 享受它! 历史 2011年4月26日:初始版本。2012年2月20日:将CTreeCtrl和GetTreeCtrl()方法添加到CTreeComboBox类中,因此现在它具有对树控件的完全访问权。2013年5月10日:更新控制档案。2014年10月16日:按屏幕位置下降(下降或上升);下拉键不能被Alt+F4关闭。2014年11月14日:为了在更新版本的Visual Studio(例如VS2008)上使用,我更新了代码。2014年11月18日:我增加了combobox可以通过F4下降的可能性。我添加了CComboTreeCtrlExt类,以便自定义树控件的combobox没有混乱的CComboTreeCtrl类。 本文转载于:http://www.diyabc.com/frontweb/news374.html

  • 相关阅读:
    每天一个JavaScript实例-从一个div元素删除一个段落
    Ewebeditor最新漏洞及漏洞大全
    WebKit历史项管理的实现
    C# 字符串处理
    Handler具体解释系列(四)——利用Handler在主线程与子线程之间互发消息
    (linux shell)第一章--小试牛刀(上)
    关于如何使用three.js的小教程<一>
    Readprocessmemory使用方法
    CentOS 6.4 U盘启动盘制作、安装及遇到的问题解决
    poj 2774 Long Long Message,后缀数组,求最长公共子串 hdu1403
  • 原文地址:https://www.cnblogs.com/Dincat/p/13443924.html
Copyright © 2011-2022 走看看