我想用c/sdk listview得到下面的效果,有人说做表头需要自绘,创建时还要加LVS_OWNERDRAWFIXED类型,然后处理父窗口的WM_DRAWITEM消息。哪位能帮帮忙给个例子代码? 最好是C/SDK的。我需要得到这样的表格:(相当于合并第一行第2列到最后一列的单元格。)
__________________________________________________________
|__标题_|_结论___________________________________________|
|___1___|______|______|______|______|______|______|______|
|___2___|______|______|______|______|______|______|______|
|___3___|______|______|______|______|______|______|______|
|___4___|______|______|______|______|______|______|______|
|___5___|______|______|______|______|______|______|______|
|___6___|______|______|______|______|______|______|______|
|___7___|______|______|______|______|______|______|______|
|___8___|______|______|______|______|______|______|______| 顺便问问,怎么动态的改变表格的列?
删除列的消息有没有?
__________________________________________________________
|__标题_|_结论___________________________________________|
|___1___|______|______|______|______|______|______|______|
|___2___|______|______|______|______|______|______|______|
|___3___|______|______|______|______|______|______|______|
|___4___|______|______|______|______|______|______|______|
|___5___|______|______|______|______|______|______|______|
|___6___|______|______|______|______|______|______|______|
|___7___|______|______|______|______|______|______|______|
|___8___|______|______|______|______|______|______|______| 顺便问问,怎么动态的改变表格的列?
删除列的消息有没有?
现在应该很少有人涉及这个了吧 不太会
自己派生一个 CheaderCtrl
然后 subclass
响应Cheaderctrl 的 WM_PAINT 消息,直接绘制
这种方法要比自绘HeaderCtrl 要来的方便
{
LPDRAWITEMSTRUCT lps = (LPDRAWITEMSTRUCT)lParam;
RECT rc;
if(lps->CtlType == ODT_LISTVIEW && lps->CtlID == IDC_listview)
{
//如果需要不同颜色,可以事先创建画笔和画刷然后选入设备
SelectObject(lps->hDC,GetStockObject(BLACK_PEN));
if(lps->itemAction == ODA_SELECT)
{
//选入高亮颜色画刷
//...
}
else
SelectObject(lps->hDC,GetStockObject(WHITE_BRUSH));
SetBkMode(lps->hDC,TRANSPARENT);
//画表格行的框
RectAngle(lps->hDC,lps->rcItem.left,lps->rcItem.top,lps->rcItem.right,lps->rcItem.bottom);
//画第一列右边的竖线
ListView_GetItemRect(lps->hwndItem,lps->itemID,&rc,LVIR_BOUNDS);
MoveToEx(lps->hDC,rc.right,rc.top);
LineTo(lps->hDC,rc.right,rc.bottom);
//ListView_GetItemText获取单元格文字然后DrawText或TextOut
//...
if(lps->itemID != 0)
{
//不是第一行,依次获取各单元格矩形画出单元格
//...
}
}
return TRUE;
}只是一个大致示例,需要很多细节调整,自己补充完整吧。