做个小程序,可将图标(ICON)拖入到列表框中然后显示,也就是用到了自制列表框在重写PreCreateWindow的时候
cs.dwExStyle |= WS_EX_CLIENTEDGE;
cs.style &= ~(LBS_OWNERDRAWVARIABLE | LBS_SORT);
cs.style |= LBS_OWNERDRAWFIXED;
最后那一行写成cs.style |= LBS_OWNERDRAWVARIABLE ;
于是当添加图标到列表框的时候不能显示图标的样子了,添加之后只是一条蓝色亮线查了MSDN知道LBS_OWNERDRAWFIXED是使图标高度一样且只发送一次WM_MEASUREITEM,而LBS_OWNERDRAWVARIABLE是使图标高度变化且对每个图标都要发送WM_MEASUREITEM另外,重新MeasureItem时设定了图标的高度lpMeasureItemStruct->itemHeight=36;这是不是说自制列表框已经设定了图标高度,所以选择列表框样式的时候只能选择LBS_OWNERDRAWVARIABLE ,那什么情况下选择LBS_OWNERDRAWVARIABLE呢不大明白这两种区别的意思,和我那种错误(不能显示图标)有什么联系,请详细讲解一下,谢谢

解决方案 »

  1.   

    写错了一个地方这是不是说自制列表框已经设定了图标高度,所以选择列表框样式的时候只能选择LBS_OWNERDRAWFIXED
      

  2.   

    VARIABLE就是可变的意思,如果你的列表控件需要项目具有不同的高度,就采用LBS_OWNERDRAWVARIABLE方式的自绘;否则就采用LBS_OWNERDRAWFIXED方式的自绘
      

  3.   

    那为什么我先选择了LBS_OWNERDRAWVARIABLE就不能显示拖进列表的图标了呢