Win32列表视图控件子项填充自定义子项?
当使用自定义绘制(NM_CUSTOMDRAW)绘制ListView子项的全部内容(在"报表/详细信息"视图中)时,最好能够左右套用相同的内容
我的自定义绘画方法中的填充,该方法由控件本身应用于非自定义绘制的项目。
有没有办法以编程方式检索此填充值?是吗
与特定字符的宽度有关(""或者" w"或者其他?)或者
它是一个固定值(左侧为6px,右侧为3px或者其他值)还是...?
编辑:为澄清起见,我想向控件添加到它绘制的项目的NM_CUSTOMDRAWn SubItems中添加相同的填充,例如,我要查找的指标是第二列开头之间的空白在以下屏幕截图中显示" Siamese"一词(注意:添加了MSDN的屏幕截图以帮助解释我的问题):
请注意,单词" Siamese"与标题项(" Breed")对齐。我希望能够保证自定义项目的对齐方式。
解决方案
回答
我假设我们需要查看GetSystemMetrics()。我认为SM_CXEDGE和SM_CYEDGE可能是我们想要的值,但请不要在此引用我。 ;-)
回答
只能猜测而看不到输出。
一些建议:如果我们正在使用DrawTextEx函数,我们是否已经尝试过DT_INTERNAL等?
我们是否不小心放入了空白图像/图标。
在经典屏幕模式下看起来还可以吗?如果是这样,我将查看XP Theme函数以查看是否正在发生某些事情。
在第一个评论后进行后期编辑:
我想知道矩形的大小是否与文本周围的LVN_ENDLABELEDIT编辑框所需的空间匹配,以使文本不会移动(或者焦点矩形)?
我猜我们可以将LVM_GETITEMRECT的结果与第一列的LVIR_LABEL进行比较,并使用差异作为左边界。
回答
ListView_GetSubItemRect(LVM_GETSUBITEMTECT)
http://msdn.microsoft.com/en-us/library/ms930172.aspx
尽管文档中说了什么,但我怀疑LVIR_LABEL根据ListView_GetItemRect返回的只是项文本的边界矩形。
(这让我一直gg之以鼻,尽管我在使用NM_CUSTOMDRAW时确实在某个地方看到了答案)。
在评论2之后编辑:
我想如果我们愿意使用6.0版,我们会看到NMLVCUSTOMDRAW。有rcText。因为使用Win2K,所以我不会。
给定我们发现的内容,我将回到使用的建议。
ListView_GetItemRect获取LVIR_LABEL并将其与LVIR_BOUNDS进行比较并使用差异。
回答
使用ListView标头消息HDM_GETBITMAPMARGIN
见链接文字