vc++6.0中的win32 app编程中可以通过resource编辑器创建list view控件。但是,这个控件和vb中的list view控件相比好像太简单了。请问大家:怎么才能在vc++win32 app中的适用一个像vb中那样的list view控件呢??

解决方案 »

  1.   

    是吗?那真是不好意思。我却是不太了解vc++里面的这个控件。确定是list control吗?能在给出一点详细介绍吗?或者提供一些这方面的资料???谢谢!
      

  2.   

    接上面,
    我想在list control的每行加以个check box(就像vb中那样)。有什么方法吗?
      

  3.   

    转自VCK
    在ListControl中使用检查框闻怡洋翻译 http://vchelp.yeah.net  --------------------------------------------------------------------------------
     
    This article was contributed by Eran Yariv. 
    List Control/View给了界面设计者更多的选择,开发者可以方便的显示列表。下面我们介绍一中带有检查框的ListCtrl,其中你可以得到用户的点击情况以改变选择状态。我们将利用一个CListCtrl的派生类CCheckListBox来实现。你可以使用OWNER_DRAW风格来自己绘制检查框(我以前翻译过一篇文章是利用改变状态来显示不同IMG,有兴趣可以查查 译者),还有一种简单的方法是利用IE3中带有的新风格。 本文介绍一些新的风格,这些可以在VC5或更高版本上使用。首先我们需要更改CONTROL的风格。ListView_SetExtendedListViewStyle (m_lvTestList.m_hWnd, LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT);
    下面介绍一些新的风格: LVS_EX_CHECKBOXES 使用检查框 
    LVS_EX_FULLROWSELECT 选择整行 
    LVS_EX_GRIDLINES 在REPORT中画出分隔线 
    LVS_EX_HEADERDRAGDROP LVS_REPORT时可以利用drag-and-drop重新排序 
    LVS_EX_SUBITEMIMAGES 允许在子项中显示image 
    LVS_EX_TRACKSELECT 当鼠标指到某一项时便自动选择该项 
    映射下面的消息:ON_NOTIFY(LVN_ITEMCHANGED, IDC_MYLIST, OnItemchangedLinksList)
    得到检查状态void DemoDlg::OnItemchangedLinksList(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
    *pResult = 0;
    if (pNMListView->uOldState == 0 && pNMListView->uNewState == 0)
    return; // No change
    BOOL bPrevState = (BOOL)(((pNMListView->uOldState & LVIS_STATEIMAGEMASK)>>12)-1);   // Old check box state
    if (bPrevState < 0) // On startup there's no previous state 
    bPrevState = 0; // so assign as false (unchecked) // New check box state
    BOOL bChecked=(BOOL)(((pNMListView->uNewState & LVIS_STATEIMAGEMASK)>>12)-1);   
    if (bChecked < 0) // On non-checkbox notifications assume false
    bChecked = 0; 
    if (bPrevState == bChecked) // No change in check box
    return; // Now bChecked holds the new check box state
    // ....
    }
    设置检查框状态
    void SetLVCheck (WPARAM ItemIndex, BOOL bCheck)
    {
    ListView_SetItemState (m_lvTestList.m_hWnd, ItemIndex, 
    UINT((int(bCheck) + 1) << 12), LVIS_STATEIMAGEMASK);
    }
    得到检查框状态
    使用在commctl.h中定义的宏 ListView_GetCheckState(hwndLV,i);hwndLV为CONTROL的句柄,i为位置索引。 
      

  4.   

    多谢rushinger,这篇文章太好了。根据它,我已经能在mfc里得到有checkbox的list control了。但是,如果我要使用Win32 Application直接开发而没用mfc库时怎么办呢?我查了(vc++)win32 api里没有ListView_SetExtendedListViewStyle这些函数和LVS_EX_CHECKBOXES等这些风格。这样还能实现有checkbox的list control吗?最后,如果Win32 Application直接不行,那么,我能不能在Win32 Application里直接使用访问mfc的类库呢?