自定义控件,winapi

自定义控件,winapi,winapi,Winapi,有人能告诉我,在winapi中将progressbar作为treeView控件的一部分现实吗?我用GTK制作了一个GUI,并使用progressbar作为单元格的元素,效果很好,如图所示 我没有开发自定义控件的经验,所以我想知道,能够像使用winapi使用GTK那样做是现实的,还是浪费时间?如果您想在非树型数据表中显示进度条,您不必使用自定义控件。典型的解决方案是在报告模式下使用标准的Windows API列表视图控件,该控件提供GtkTreeView提供的表格视图,在提供进度信息的列中使用“

有人能告诉我,在winapi中将progressbar作为treeView控件的一部分现实吗?我用GTK制作了一个GUI,并使用progressbar作为单元格的元素,效果很好,如图所示


我没有开发自定义控件的经验,所以我想知道,能够像使用winapi使用GTK那样做是现实的,还是浪费时间?

如果您想在非树型数据表中显示进度条,您不必使用自定义控件。典型的解决方案是在报告模式下使用标准的Windows API列表视图控件,该控件提供GtkTreeView提供的表格视图,在提供进度信息的列中使用“所有者绘图”。如何做到这一点已经有很好的文档记录,但它涉及到在其父窗口的窗口过程中从列表视图中侦听
WM\u NOTIFY
,查找
NM\u CUSTOMDRAW
通知。
NM_CUSTOMDRAW
通知附带了绘制列表视图中单个单元格甚至整行所需的所有内容。只需确定这是要绘制的列,绘制它,然后让系统绘制其他所有内容

然而,如果你打算使用一棵树,而不仅仅是一张平桌子,那么你将有更多的工作要做。GtkTreeView允许您拥有多列树,但Windows API库存控件仅允许您拥有多列表(列表视图)或单列树(树视图)。有一些像mCtrl这样的软件包,如果您需要的话,可以为您提供一个多列树控件,它们的工作方式与列表视图控件类似,因此您也可以使用上面的自定义绘制方法

(您可以将列表视图想象为GtkTreeViewColumns的GtkTreeView,其中GtkCellArea最多包含一个GtkCellRenderPixbuf和一个GTKCellrenderText,第一列最多也可以包含一个GTKCellrenderToggle。同样,您可以将树视图想象为只有一个GtkTreeViewColumn和不可见colu的GtkTreeViewmn头,最多有一个GtkCellArea,每个头最多有一个GTKCellRenderToggle、GTKCellRenderImage和GTKCellRenderText。)


我不熟悉任何已经存在的、模仿GtkTreeView使用的单元渲染器系统的预构建自定义控件。列表视图和树视图控件没有做到这一点,这是因为这些控件的编写(资源管理器)缺乏必要性和增加了复杂性。(我一直在自己做一个,但我一直很忙,所以不知道什么时候能完成。)

非常感谢,@andlabs!你已经发布了我想知道的所有信息!我应该在报告模式下使用ListVew。谢谢!Win32中可以使用多列树,只需简单。@Remylebou-hmm…如果你想同时拥有一个标题控件,树视图是否也很好?我没有看到任何消息,比如更改树视图区域的顶部像素。@andlabs标准树状视图不像ListView那样具有内置的标题控件。但您可以在树状视图上方创建单独的标题控件,并让标题列定义树状视图图形的边界。