自绘标准CTreeCtrl的实现(NM_CUSTORMDRAW方法)
来源:互联网 发布:淘宝产品推广 编辑:程序博客网 时间:2024/06/05 13:24
自绘树CTreeCtrl可以自己用子类化在派生类里的OnPaint里绘制也可以响应
NM_CUSTORMDRAW这个反射消息,然后绘制,NM_CUSTORMDRAW里有个什么绘画周期的概念,他可以在不同的绘画段
绘制不同的内容,这里具体细节不再赘述,读者可以参考MSDN,这里主要阐述NM_CUSTORMDRAW的绘制方式:
- void CSkinTreeCtrl::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)
- {
- LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
- LPNMTVCUSTOMDRAW lpnmcd = (LPNMTVCUSTOMDRAW) pNMCD;
- if (lpnmcd ->nmcd.dwDrawStage == CDDS_PREPAINT)
- {
- *pResult = CDRF_NOTIFYITEMDRAW;
- return;
- }
- else if (lpnmcd->nmcd.dwDrawStage == CDDS_ITEMPREPAINT)
- {
- CRect rcItem(pNMCD->rc); // Item的区域
- POINT ptItem ;
- ptItem.x = rcItem.left + 1 ;
- ptItem.y = rcItem.top + 1 ;
- UINT uFlags;
- HTREEITEM hItem = HitTest(ptItem, &uFlags); // Item 句柄
- if(!hItem)
- {
- *pResult = CDRF_DODEFAULT;
- return;
- }
- CRect rcClient;
- GetClientRect(&rcClient);
- rcItem.left=0;
- rcItem.right=rcClient.right;
- rcItem.NormalizeRect();
- HDC hdcItem = pNMCD->hdc ; // Item的dc
- CDC dc;
- dc.Attach(hdcItem);
- int nSave = dc.SaveDC();
- dc.FillSolidRect(&rcItem,RGB(234, 237, 242));
- //draw something
- CString strText;
- strText=GetItemText(hItem);
- if (GetItemState(hItem, TVIS_SELECTED) == TVIS_SELECTED)
- {
- CImage img;
- if (GetFocus() == this)
- {
- img.LoadFromResource(AfxGetResourceHandle(), IDB_TREE_SELECT_BKG);
- }
- else
- {
- img.LoadFromResource(AfxGetResourceHandle(), IDB_TREESELECT_NOFOCUS_BKG);
- }
- img.Draw(dc,rcItem);
- img.Destroy();
- }
- rcItem.left += 30;
- dc.SetTextColor(RGB(0,0,0));
- dc.SetBkMode(TRANSPARENT);
- CFont font;
- font.CreateFont(12, // nHeight
- 0, // nWidth
- 0, // nEscapement
- 0, // nOrientation
- FW_NORMAL, // nWeight
- FALSE, // bItalic
- FALSE, // bUnderline
- 0, // cStrikeOut
- ANSI_CHARSET, // nCharSet
- OUT_DEFAULT_PRECIS, // nOutPrecision
- CLIP_DEFAULT_PRECIS, // nClipPrecision
- DEFAULT_QUALITY, // nQuality
- DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily
- TEXT("宋体"));
- dc.SelectObject(&font);
- dc.DrawText(strText, strText.GetLength(), &rcItem, DT_LEFT | DT_SINGLELINE | DT_VCENTER);
- rcItem.left -= 30;
- dc.RestoreDC(nSave);
- dc.Detach();
- *pResult = CDRF_SKIPDEFAULT;
- return;
- }
- *pResult = CDRF_DODEFAULT;
- return;
- }
- BOOL CSkinTreeCtrl::OnEraseBkgnd(CDC* pDC)
- {
- CRect rcClient;
- GetClientRect(&rcClient);
- pDC->FillSolidRect(&rcClient,RGB(234, 237, 242));
- return TRUE;
- }
ui demo:
转帖:http://blog.csdn.net/hurryboylqs/article/details/5548605
- 自绘标准CTreeCtrl的实现(NM_CUSTORMDRAW方法)
- 自绘标准CTreeCtrl的实现(NM_CUSTORMDRAW方法)
- 一步一步教你实现CTreeCtrl 自绘
- 一步一步教你实现CTreeCtrl 自绘
- 一步一步教你实现CTreeCtrl 自绘
- 一步一步教你实现CTreeCtrl 自绘
- 一步一步教你实现CTreeCtrl 自绘
- 一步一步教你实现CTreeCtrl 自绘
- 一步一步教你实现CTreeCtrl 自绘
- 一步一步教你实现CTreeCtrl 自绘
- CTreeCtrl 自绘
- CTreeCtrl自绘
- CtreeCtrl的常用方法
- CTreeCtrl---树控件自绘
- 简单的自绘CListBox(三)(类似CTreeCtrl Expand效果)
- MFC常用控件CListCtrl 、CSliderCtrl、CToolTipCtrl、CTreeCtrl的自绘
- MFC常用控件CListCtrl 、CSliderCtrl、CToolTipCtrl、CTreeCtrl的自绘
- MFC常用控件CListCtrl、CSliderCtrl、CToolTipCtrl、CTreeCtrl的自绘
- 在Windows下压缩成tar.gz格式的方法
- 多线程中使用Invoke函数防止资源访问冲突
- Java堆内存的10个要点
- v$fast_start_servers
- Axure RP与快速原型(MARK下)
- 自绘标准CTreeCtrl的实现(NM_CUSTORMDRAW方法)
- Spring---搭建开发环境和第一个简单实例
- zoj 2539 Energy Minimization
- 建站学习笔记之百度不收录内页的六大原因和对策
- Struts2 基础笔记
- CppWebBrowser学习笔记四判断网页加载完成
- STL中List,Vector,Map,Set的理解
- 分享8个帮助你学习快速编程的实用网站
- IE bug整理