在win32 SDK下,单击listview控件的时候只有第一列(主项目)可以被高亮显示,而其它列(子项目)没有高亮显示。查看一些文章说是用ListView_SetItemState函数可以解决,我测试这个函数,可是还是没有解决到。
我的代码如下,想让第二行全高这显示case WM_CREATE:
{
hlistview = CreateWindowEx(NULL,_T("SysListView32"),NULL,LVS_REPORT | WS_CHILD |WS_VISIBLE,
            0,0,200,200,hwnd,NULL,instance,NULL);
            InsertColumn();
            InitListView();                        ListView_SetItemState(hlistview,1,LVIS_SELECTED ,LVIS_SELECTED); return (0);
} break;请指教。

解决方案 »

  1.   

    ListView_SetExtendedListViewStyle(....,LVS_EX_FULLROWSELECT)
      

  2.   

    DWORD dwStyle = list1.GetExtendedStyle();
        dwStyle |= LVS_EX_FULLROWSELECT;//选中某行使整行高亮(只适用与report风格的listctrl)
    dwStyle |= LVS_EX_GRIDLINES;//网格线(只适用与report风格的listctrl)
    //dwStyle |= LVS_EX_CHECKBOXES;//item前生成checkbox控件
    list1.SetExtendedStyle(dwStyle); 
    直接在CListCtrl中设置
      

  3.   

    2楼,我是在SDK中做的,不是用MFC的
      

  4.   

    1楼,使用你说的ListView_SetExtendedListViewStyle(),运行后只是增加了网格线,没有使第二行全选中并高亮显示。我现在想程序一运行,LISTVIEW中第二行就处于被选中状态,并是高亮显示的。
    以下我的全部代码,请高手运行一下。
    #define WIN32_LEAN_AND_MEAN
    #include <windows.h>
    #include <windowsx.h>
    #include "tchar.h"
    #include "commctrl.h"
    #pragma  comment(lib,"comctl32.lib")#define WINDOW_CLASS_NAME "WINCLASS"HWND hlistview;
    HINSTANCE instance;TCHAR listindex[] = _T("%d");
    TCHAR listcont1[]  =_T("房间%d");
    TCHAR listcont2[]  =_T("电器%d");
    TCHAR listcont3[]  =_T("汽车%d");
    TCHAR listcont4[]  =_T("飞机%d");void InsertColumn()
    {
    LV_COLUMN lvc;
        lvc.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_FMT;
    lvc.fmt=LVCFMT_CENTER;
        lvc.pszText ="序号";
        lvc.cx = 100;
        SendMessage(hlistview,LVM_INSERTCOLUMN,0,(LPARAM)&lvc);    
        lvc.pszText = "实例1";
        lvc.cx = 150;
        SendMessage(hlistview,LVM_INSERTCOLUMN,1,(LPARAM)&lvc); lvc.pszText = "实例2";   
        SendMessage(hlistview,LVM_INSERTCOLUMN,2,(LPARAM)&lvc); lvc.pszText = "实例3";
        SendMessage(hlistview,LVM_INSERTCOLUMN,3,(LPARAM)&lvc); lvc.pszText = "实例4";
        SendMessage(hlistview,LVM_INSERTCOLUMN,4,(LPARAM)&lvc);
    }void InitListView()
    {

    int i=0;
    int j=0;
    CHAR buffer[20]; for(i=5;i>0;i--)
    {
    LV_ITEM lvi;
        lvi.mask = LVIF_TEXT;
            lvi.iItem = 0;
            lvi.iSubItem = 0;
    wsprintf(buffer,listindex,(i));
            lvi.pszText =buffer;        SendMessage(hlistview,LVM_INSERTITEM,0,(LPARAM)&lvi);
           
    lvi.iSubItem++;
            wsprintf(buffer,listcont1,(i));
            lvi.pszText =buffer;
            SendMessage(hlistview,LVM_SETITEM,0,(LPARAM)&lvi); lvi.iSubItem++;
    wsprintf(buffer,listcont2,(i));
            lvi.pszText =buffer;
            SendMessage(hlistview,LVM_SETITEM,0,(LPARAM)&lvi); lvi.iSubItem++;
    wsprintf(buffer,listcont3,(i));
            lvi.pszText =buffer;
            SendMessage(hlistview,LVM_SETITEM,0,(LPARAM)&lvi); lvi.iSubItem++;
    wsprintf(buffer,listcont4,(i));
            lvi.pszText =buffer;
            SendMessage(hlistview,LVM_SETITEM,0,(LPARAM)&lvi);

    }}LRESULT CALLBACK WindowProc(HWND,UINT,WPARAM,LPARAM);int WINAPI WinMain (HINSTANCE hinstance, HINSTANCE hprevinstance,                   PSTR szcmdLine, int icmdshow){

    HWND       hwnd;
    MSG        msg;
    WNDCLASSEX winclass;
    InitCommonControls();
    instance=hinstance;
        
    winclass.cbSize       = sizeof(WNDCLASSEX);
    winclass.style        = CS_DBLCLKS|CS_OWNDC|CS_HREDRAW|CS_VREDRAW;
    winclass.lpfnWndProc  = WindowProc;
    winclass.cbClsExtra   = 0;
    winclass.cbWndExtra   = 0;
    winclass.hInstance    = hinstance;
    winclass.hIcon        = LoadIcon(NULL,IDI_APPLICATION);
    winclass.hCursor      = LoadCursor(NULL,IDC_ARROW);
    winclass.hbrBackground= GetStockObject(WHITE_BRUSH);
    winclass.lpszMenuName = NULL;
    winclass.lpszClassName= WINDOW_CLASS_NAME;
    winclass.hIconSm      = LoadIcon(NULL,IDI_APPLICATION); if(!RegisterClassEx(&winclass))
    return (0); if(!(hwnd = CreateWindowEx(NULL,
                           WINDOW_CLASS_NAME,
       "WinFormPrj",
       WS_OVERLAPPEDWINDOW|WS_VISIBLE,
                                   240,262,
       800,500,
                                   NULL, 
       NULL, 
       hinstance, 
       NULL)))
    return (0); while(GetMessage(&msg,NULL,0,0))
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    } return(msg.wParam);}
    LRESULT CALLBACK WindowProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam)
    { switch(msg)
    {
        case WM_CREATE:
    {
    hlistview = CreateWindowEx(NULL,_T("SysListView32"),NULL,LVS_REPORT | WS_CHILD |WS_VISIBLE,
                0,0,200,200,hwnd,NULL,instance,NULL);
                InsertColumn();
                InitListView();            //SendMessage(hlistview,LVM_SETTEXTCOLOR,0,(LPARAM)RGB(0,0,0));
                //SendMessage(hlistview,LVM_SETBKCOLOR,0,(LPARAM)RGB(0,0,0));
                //SendMessage(hlistview,LVM_SETTEXTBKCOLOR,0,(LPARAM)RGB(0,0,0));                  //ListView_SetItemState(hlistview,1,LVIS_SELECTED ,LVIS_SELECTED); ListView_SetExtendedListViewStyle(hlistview,1,LVIS_SELECTED ,LVS_EX_FULLROWSELECT); return (0);
    } break; case WM_SIZE:
    {
    MoveWindow(hlistview,0,0,LOWORD(lparam),HIWORD(lparam),TRUE);  
    //调用MoveWindow来改变列表视图控件的大小使得它覆盖整个的客户区
    } break;
            case WM_DESTROY:
    {
    PostQuitMessage(0);
    return (0);
    } break; default:break;
    }
    return (DefWindowProc(hwnd,msg,wparam,lparam));
    }
      

  5.   

    LVN_ITEMACTIVATE
    #if (_WIN32_IE >= 0x0400)
        lpnmia = (LPNMITEMACTIVATE)lParam;
    #else
        lpnm = (LPNMHDR)lParam;
    #endif在初始化的时候处理这个消息看看
      

  6.   

    使用该方法可行ListView_SetExtendedListViewStyle(hlistview,LVS_EX_FULLROWSELECT);现在想知道为什么用
    ListView_SetItemState(hlistview,1,LVIS_SELECTED ,LVIS_SELECTED);
    却不行呢????
      

  7.   

    解决了...
    SetFocus(hlistview);   //获得焦点
                
    ListView_SetItemState(hlistview,0,LVIS_SELECTED,LVIS_SELECTED);       //使第一行处于选择中状态ListView_SetExtendedListViewStyle(hlistview,LVS_EX_FULLROWSELECT);      //设置整行选择风格