mall 发表于 2013-11-10 19:04:37

CListCtrl使用技巧汇总【3】

本帖最后由 mall 于 2013-11-10 19:06 编辑

33.在ListCtrl中OnTimer只响应两次的问题Q200054:
PRB: OnTimer() Is Not Called Repeatedly for a List Control
http://support.microsoft.com/kb/200054/en-us

34.以下为一些为实现各种自定义功能的listctrl派生类         (1)   拖放      
                  http://www.codeproject.com/listctrl/dragtest.asp
                  在CListCtrl和CTreeCtrl间拖放
                  http://support.microsoft.com/kb/148738/en-us

         (2)   多功能listctrl
                  支持subitem可编辑,图标,radiobutton,checkbox,字符串改变颜色的类
                  http://www.codeproject.com/listctrl/quicklist.asp

                  支持排序,subitem可编辑,subitem图标,subitem改变颜色的类
                  http://www.codeproject.com/listctrl/ReportControl.asp
         (3)   subitem中显示超链接
                  http://www.codeproject.com/listctrl/CListCtrlLink.asp
         (4)   subitem的tooltip提示
                  http://www.codeproject.com/listctrl/ctooltiplistctrl.asp
         (5)   subitem中显示进度条   
                  http://www.codeproject.com/listctrl/ProgressListControl.asp
                  http://www.codeproject.com/listctrl/napster.asp
                  http://www.codeguru.com/Cpp/controls/listview/article.php/c4187/
         (6)   动态改变subitem的颜色和背景色
                   http://www.codeproject.com/listctrl/highlightlistctrl.asp
                http://www.codeguru.com/Cpp/controls/listbox/colorlistboxes/article.php/c4757/

         (7)   类vb属性对话框
            &bsp;      http://www.codeproject.com/listctrl/propertylistctrl.asp
                   http://www.codeguru.com/Cpp/controls/listview/propertylists/article.php/c995/
                   http://www.codeguru.com/Cpp/controls/listview/propertylists/article.php/c1041/

         (8)   选中subitem(只高亮选中的item)
                   http://www.codeproject.com/listctrl/SubItemSel.asp
                   http://www.codeproject.com/listctrl/ListSubItSel.asp

         (9)   改变行高
                   http://www.codeproject.com/listctrl/changerowheight.asp

         (10)   改变行颜色
                   http://www.codeproject.com/listctrl/coloredlistctrl.asp

         (11)   可编辑subitem的listctrl
                   http://www.codeproject.com/listctrl/nirs2000.asp
                   http://www.codeproject.com/listctrl/editing_subitems_in_listcontrol.asp

         (12)   subitem可编辑,插入combobox,改变行颜色,subitem的tooltip提示
                   http://www.codeproject.com/listctrl/reusablelistcontrol.asp

         (13)   header 中允许多行字符串
                   http://www.codeproject.com/listctrl/headerctrlex.asp

         (14)   插入combobox
                   http://www.codeguru.com/Cpp/controls/listview/editingitemsandsubitem/article.php/c979/

         (15)   添加背景图片
                   http://www.codeguru.com/Cpp/controls/listview/backgroundcolorandimage/article.php/c4173/
                   http://www.codeguru.com/Cpp/controls/listview/backgroundcolorandimage/article.php/c983/
                   http://www.vchelp.net/vchelp/archive.asp?type_id=9&class_id=1&cata_id=1&article_id=1088&search_term=
   
         (16)自适应宽度的listctrl
                   http://www.codeproject.com/useritems/AutosizeListCtrl.asp

      (17) 改变ListCtrl高亮时的颜色(默认为蓝色)
            处理 NM_CUSTOMDRAW
          http://www.codeproject.com/listctrl/lvcustomdraw.asp
//2009-05-06
35. 隐藏滚动条
voidCListView_ScrollBarView::OnSize(UINT   nType,int   cx,int   cy)   
{
CListCtrl   &ctrl   =this->GetListCtrl   ();
if   (ctrl)
{
                      //隐藏垂直滚动条
         ::ShowScrollBar(ctrl.m_hWnd,   SB_VERT,FALSE);
}
CListView::OnSize(nType,   cx,cy);
}
//2009-05-07
36.处理键盘,循环滚动,不要在对话框中处理该消息,否则WListCtrlEx会产生两次按键事件
BOOL WListCtrlEx::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/orcall the base class
if (pMsg->message ==WM_KEYDOWN)
{
if (pMsg->wParam== VK_DOWN)
{
   int nSel =GetNextItem(-1, LVNI_SELECTED);
   if (nSel ==-1)
    returnFALSE;
   if (nSel ==GetItemCount()-1)
   {
    EnsureVisible(0,FALSE);//滚动条自动滚动到第80行
    SetItemState(0,LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
    returnTRUE;
   }
}
if (pMsg->wParam== VK_UP)
{   
   int nSel =GetNextItem(-1, LVNI_SELECTED);
   if (nSel ==-1)
    returnFALSE;
   if (nSel ==0)
   {
    EnsureVisible(GetItemCount()-1,FALSE);//滚动条自动滚动到第80行
    SetItemState(GetItemCount()-1,LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
    returnTRUE;
   }
}
}

returnCListCtrl::PreTranslateMessage(pMsg);
}

本文摘自:http://blog.sina.com.cn/s/blog_4171e80d0100ynch.html


页: [1]
查看完整版本: CListCtrl使用技巧汇总【3】