VC ListControl/TreeControl失去焦点后,所选择行仍然高亮显示
来源:互联网 发布:ubuntu启动不了wine 编辑:程序博客网 时间:2024/05/07 15:04
CTreeCtrl和CListCtrl失去焦点时高亮选中项
设置CTreeCtrl的Always Show Selection:True
CListCtrl的Always Show Selection:False
在NM_CUSTOMDRAW事件中添加如下代码:
{
LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
*pResult = 0;
LPNMTVCUSTOMDRAW pDraw=(LPNMTVCUSTOMDRAW)pNMHDR;
DWORD dwDrawStage=pDraw->nmcd.dwDrawStage;
UINT uItemState =pDraw->nmcd.uItemState;
*pResult=CDRF_NOTIFYITEMDRAW;
//|CDRF_NOTIFYPOSTPAINT|CDRF_NOTIFYSUBITEMDRAW|CDRF_NOTIFYPOSTERASE;
CDC* pdc=CDC::FromHandle(pDraw->nmcd.hdc);
CRect rc;
HTREEITEM hItem=(HTREEITEM) pDraw->nmcd.dwItemSpec;
m_tree.GetItemRect(hItem,&rc,TRUE);//FALSE);text only
CString txt=m_tree.GetItemText(hItem);
if((dwDrawStage & CDDS_ITEM) && (uItemState & CDIS_SELECTED))
{
pdc->FillSolidRect(&rc,RGB(49,106,197));//clr);
pdc->SetTextColor(RGB(255,255,255));//white
pdc->SetBkColor(RGB(49,106,197));//clr);
CFont* pfnt=pdc->GetCurrentFont();
pdc->TextOut(rc.left+2,rc.top+2,txt);
pdc->SelectObject(pfnt);
*pResult |= CDRF_SKIPDEFAULT;
// afxDump << "1\n";
}
else // without these ,1st blue !
{
pdc->FillSolidRect(&rc, GetSysColor(COLOR_WINDOW));
pdc->SetTextColor(GetSysColor(COLOR_WINDOWTEXT));
pdc->TextOut(rc.left+2, rc.top+2, txt);
// afxDump << "2\n";
}
}
void CMFCApplicationDlg::OnNMCustomdrawlist(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
*pResult = 0;
//This code based on Michael Dunn's excellent article on list control custom draw at http://www.codeproject.com/listctrl/lvcustomdraw.asp
NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR);
// Take the default processing unless we set this to something else below.
*pResult = CDRF_DODEFAULT;
// First thing - check the draw stage. If it's the control's prepaint stage, then tell Windows we want messages for every item.
if (CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage)
{
*pResult = CDRF_NOTIFYITEMDRAW;
}
else if (CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage)
{
// This is the notification message for an item. We'll request notifications before each subitem's prepaint stage.
*pResult = CDRF_NOTIFYSUBITEMDRAW;
}
else if ((CDDS_ITEMPREPAINT | CDDS_SUBITEM) == pLVCD->nmcd.dwDrawStage)
{
COLORREF clrNewTextColor, clrNewBkColor;
int nItem = static_cast<int>(pLVCD->nmcd.dwItemSpec);
BOOL bSelect = FALSE;
POSITION pos = ((CListCtrl*)(GetDlgItem(IDC_DeviceInfoDeviceList)))->GetFirstSelectedItemPosition();
while (pos)
{
int index = ((CListCtrl*)(GetDlgItem(IDC_DeviceInfoDeviceList)))->GetNextSelectedItem(pos);
if (index == nItem)
{
bSelect = TRUE;
break;
}
}
if (bSelect)
{
//clrNewTextColor = RGB(255,0,0); //Set the text to red
clrNewTextColor = RGB(0, 255, 0); //Set the text to red
clrNewBkColor = RGB(0, 0, 255); //Set the bkgrnd color to blue
}
else
{
clrNewTextColor = RGB(0, 0, 0); //Leave the text black
clrNewBkColor = RGB(255, 255, 255); //leave the bkgrnd color white
}
pLVCD->clrText = clrNewTextColor;
pLVCD->clrTextBk = clrNewBkColor;
// Tell Windows to paint the control itself.
*pResult = CDRF_DODEFAULT;
}
}
0 0
- VC ListControl/TreeControl失去焦点后,所选择行仍然高亮显示
- vc listctr失去焦点,仍然高亮
- 如何使得clist ctrl 失去焦点后,仍然高亮
- MFC listCtrl选中某一项,LIST失去焦点时,该项仍然显示高亮
- 也谈Wpf DataGrid选择行失去焦点后保持高亮的问题
- 如何使得CTreeCtrl 失去焦点后,选中项的颜色仍然保持不变,怎么实现?高亮
- C# TreeView树控件,失去焦点仍然高亮显示,右击节点时才弹出右键菜单,空白处右击不弹出菜单
- Winform中Treeview控件失去焦点,将选择的节点设置为高亮显示
- listview控件(在listview失去焦点的情况下仍然保持item高亮)
- C#如何在ListView失去焦点的情况下仍然保持Item高亮
- C#如何在ListView失去焦点的情况下仍然保持Item高亮
- CListCtrl非激活状态,失去焦点依然高亮显示
- select标签选择后失去焦点
- ListView失去焦点选中行不能高亮显示的问题解决
- C#ListView失去焦点选中行不能高亮显示的问题解决
- Treeview失去焦点高亮度显示
- 录入单号失去焦点后显示货款
- ListControl自动高亮显示下一行
- 一念永恒 > 第535章 名单
- 前端必会的知识点
- Ceph相关
- 查表指令:XLAT
- 欢迎使用CSDN-markdown编辑器
- VC ListControl/TreeControl失去焦点后,所选择行仍然高亮显示
- Hibernate.cfg.xml常用配置总结
- Vue.js高仿饿了么外卖App
- java保存输出二叉树所有路径
- ubuntu14.04安装dnw
- scala 关于Array,List,Tuple的区别
- 小甲鱼 双向循环链表实践
- 深入理解React Native页面构建渲染原理
- DFS初级剪枝及心得