查看自定义的控件子项填充
使用自定义绘制(NM_CUSTOMDRAW)绘制ListView子项的全部内容(在Report / Details视图中)时,能够在我的自定义绘制方法中应用相同的左侧和右侧填充控制自己的非自定义绘制项目。
有没有办法以编程方式检索此填充值? 它与特定字符(“”或“w”或其他?)的宽度有关还是它是固定值(左侧6px,右侧3px)或...?
编辑:澄清, 我想添加相同的填充到我的NM_CUSTOMDRAWn子项目,该控件添加到它绘制的项目 ,并且我正在寻找的度量,例如,第二列开始之间的空白和下面的截图中的“Siamese”一词(注意:MSDN添加的截图帮助解释我的问题):
请注意,“连体”一词与标题项目(“品种”)对齐。 我希望能够保证自定义绘制物品的相同路线。
使用ListView标题消息HDM_GETBITMAPMARGIN查看链接文本
ListView_GetSubItemRect(LVM_GETSUBITEMTECT)
http://msdn.microsoft.com/en-us/library/ms930172.aspx
尽管文档说我怀疑LVIR_LABEL只返回项目文本的边界矩形,按照ListView_GetItemRect返回。
(虽然我在使用NM_CUSTOMDRAW的时候实际上已经看到了某个地方的答案,但这只是让我一直很小心)。
编辑后评论2:
我想你已经看过NMLVCUSTOMDRAW,如果你愿意使用6.0版。 有rcText。 我不会因为我使用Win2K。
鉴于你找到了什么,我会回到使用ListView_GetItemRect获取LVIR_LABEL的建议,并将其与LVIR_BOUNDS进行比较并使用差异。
这样做的方法是使用ListView_GetColumn()检索相应列的格式,然后检查检索到的myLVCOLUMN.mask
LVCOLUMN myLVCOLUMN;
myLVCOLUMN.mask=LVCF_FMT;
ListView_GetColumn(hwnd,nCol,&myLVCOLUMN);
那么当我们绘制属于该列的相应标签时
if(myLVCOLUMN.fmt & LVCFMT_CENTER)
DrawText(x,x,x,x, DT_CENTER | DT_WORD_ELLIPSIS );
else if (myLVCOLUMN.fmt & LVCFMT_RIGHT)
DrawText(x,x,x,x, DT_RIGHT | DT_WORD_ELLIPSIS );
else
DrawText(x,x,x,x, DT_LEFT | DT_WORD_ELLIPSIS );
链接地址: http://www.djcxy.com/p/41767.html