代码之家  ›  专栏  ›  技术社区  ›  Brett Hall

为什么我的电子邮箱没有检查?

  •  4
  • Brett Hall  · 技术社区  · 15 年前

    我在打开电视复选框样式的对话框中插入了一个MFC控件。我的所有树项目旁边都有复选框。在OnInitDialog中,我使用ctreectrl::setcheck设置了某些项的选中状态,但是当显示树时,树中的任何项都不会被选中。setcheck返回true。用鼠标检查项目可以正常工作。以前有人遇到过这个吗?

    3 回复  |  直到 7 年前
        1
  •  10
  •   Brett Hall    15 年前

    找出问题所在。我在Visual Studio资源编辑器中设置了“电视”复选框样式。很明显,这导致了我最初检查的问题。相反,你必须这样做

    
       m_nodeTree.ModifyStyle (TVS_CHECKBOXES, 0);
       m_nodeTree.ModifyStyle (0, TVS_CHECKBOXES);
    
    

    在OnInitDialog中填充树之前。一旦我这样做了,一切都很好。

        2
  •  2
  •   Shadow Wizard    13 年前

    我用以下代码创建了MyTreeCtrl:

    myTreeCtrl.Create(WS_CHILD|TVS_HASBUTTONS|TVS_CHECKBOX|, CtrlRect, this, IDC_TREECTRL);
    

    我想托运一些东西 OnInitialDialog() 也有同样的问题。
    我试过:

    myTreeCtrl.ModifyStyle(TVS_CHECKBOXES, 0);
    myTreeCtrl.ModifyStyle(0, TVS_CHECKBOXES);
    

    现在一切正常。

    更重要的是,如果项目不在窗口的可见部分,它不会检查项目。我得扣上扳机 OnVScroll() .

        3
  •  0
  •   IInspectable    7 年前

    树视图控件中的复选框很奇怪。作为 documented :

    如果要使用此样式,必须将“电视”复选框样式设置为 SetWindowLong 创建TreeView控件后 在填充树之前。否则,根据时间问题,复选框可能未选中。

    换句话说,您不能设置 TVS_CHECKBOXES 控件创建时的树视图样式。在Visual Studio的资源编辑器中设置的控件样式(它只是.rc脚本的图形前端)在控件创建时使用。

    解决方案相当简单:创建不带 TVSX复选框 样式,并在代码中打开它,然后填充控件:

    ::SetWindowLong( hwndTreeView, GWL_STYLE,
                     ::GetWindowLong( hwndTreeView, GWL_STYLE ) | TVS_CHECKBOXES );
    

    在MFC中,可以使用

    m_treeView.ModifyStyle( 0x0, TVS_CHECKBOXES );
    

    哪里 m_treeView 是树视图控件实例变量。


    背景信息:

    复选框不是初始树视图控件实现的一部分。随后,随着方案开发人员在可用之前使用了所需的复选框,它们被添加:通过使用状态图像列表并在树视图项上设置状态项索引。

    需要解决的问题之一是确定复选框的大小。如果树视图控件指定了图像列表(“普通图像列表”),则复选框应与这些图像的大小匹配。否则,复选框应使用系统小图标大小。这的一个推论是,如果使用“普通图像列表”,则需要启用 TVSX复选框 风格 之后 设置图像列表。

    另一个奇怪之处是,状态图像索引 0 表示“无状态图像”( 1 指“未选中”状态项图像)。如果将项添加到具有 TVSX复选框 样式集,控件将状态项索引设置为 (即使您指定 )这就是当您设置 TVSX复选框 创建时的样式。这也意味着,如果您想要一个没有状态图像的树视图项,您必须添加树视图项,然后手动重置状态项索引。

    这应该是足够的信息,能够理解和解决问题。树视图实现还有很多,但我将把它留给有更好装备的人来编写。请参阅 参考文献 下面。


    参考文献:

    Raymond Chen The Old New Thing )已发布了一个涵盖树视图控制特性的广泛系列。不是所有的条目都与这个问题直接相关,但是每一个条目都是有洞察力和价值的,不管怎样,所以我将列出所有条目: