如何实现使用LVS_ICON风格的CListCtrl自绘

simon_186 2007-03-12 11:52:35
已试过重载DrawItem函数,并设置LVS_OWNERDRAWFIXED,但没用,后来查到是LVS_OWNERDRAWFIXED只支持列表风格LVS_REPORT,所以DrawItem函数在LVS_ICON风格下没有被调用.
请问:要使用LVS_ICON,怎样实现CListCtrl的自绘
...全文
2367 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwt861103 2010-05-16
  • 打赏
  • 举报
回复
我之前试过,好像用CustomDraw和DrawItem都无法实现,
我是通过在OnPaint中自己绘制的,有需要可以到我的空间中去看一下!
simon_186 2007-07-25
  • 打赏
  • 举报
回复
To ghl3005(), 谢谢
结帖
lyg_zy 2007-07-03
  • 打赏
  • 举报
回复
关注中!我也考虑重新做一窗口算了.
ghl3005 2007-05-10
  • 打赏
  • 举报
回复
已经实现,
void CCAGENT::OnCustomdrawList ( NMHDR* pNMHDR, LRESULT* pResult )
{NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( pNMHDR );

*pResult = 0;

// Request item-specific notifications if this is the
// beginning of the paint cycle.

if ( CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage )
{
*pResult = CDRF_NOTIFYITEMDRAW;
}
else if ( CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage )
{
// This is the beginning of an item's paint cycle.
LVITEM rItem;
int nItem = static_cast<int>( pLVCD->nmcd.dwItemSpec );
CDC* pDC = CDC::FromHandle ( pLVCD->nmcd.hdc );
COLORREF crBkgnd;
BOOL bListHasFocus;
CRect rcItem;
CRect rcText;
CString sText;
UINT uFormat;

bListHasFocus = ( m_agentList.GetSafeHwnd() == ::GetFocus() );

// Get the image index and selected/focused state of the
// item being drawn.
ZeroMemory ( &rItem, sizeof(LVITEM) );
rItem.mask = LVIF_IMAGE | LVIF_STATE;
rItem.iItem = nItem;
rItem.stateMask = LVIS_SELECTED | LVIS_FOCUSED;
m_agentList.GetItem ( &rItem );

// Get the rect that holds the item's icon.
m_agentList.GetItemRect ( nItem, &rcItem, LVIR_ICON );

// Draw the icon.
uFormat = ILD_TRANSPARENT;

if ( ( rItem.state & LVIS_SELECTED ) && bListHasFocus )
uFormat |= ILD_FOCUS;

m_listImage.Draw ( pDC, rItem.iImage, rcItem.TopLeft(), uFormat );


// Get the rect that bounds the text label.
m_agentList.GetItemRect ( nItem, rcItem, LVIR_LABEL ); //把这行去掉就没有文字.


// Draw the background of the list item. Colors are selected
// according to the item's state.

if ( rItem.state & LVIS_SELECTED )
{
if ( bListHasFocus )
{
crBkgnd = GetSysColor ( COLOR_HIGHLIGHT );
pDC->SetTextColor ( GetSysColor ( COLOR_HIGHLIGHTTEXT ));
}
else
{
crBkgnd = GetSysColor ( COLOR_BTNFACE );
pDC->SetTextColor ( GetSysColor ( COLOR_BTNTEXT ));
}
}
else
{
crBkgnd = GetSysColor ( COLOR_WINDOW );
pDC->SetTextColor ( GetSysColor ( COLOR_BTNTEXT ));
}

// Draw the background & prep the DC for the text drawing. Note
// that the entire item RECT is filled in, so this emulates the full-
// row selection style of normal lists.
pDC->FillSolidRect ( rcItem, crBkgnd );
pDC->SetBkMode ( TRANSPARENT );


// Tweak the rect a bit for nicer-looking text alignment.
rcText = rcItem;
// Draw the text.
sText = m_agentList.GetItemText ( nItem, 0 );

pDC->DrawText ( sText, CRect::CRect(rcText.left+3,rcText.top,rcText.right,rcText.bottom+60), DT_VCENTER );



// Draw a focus rect around the item if necessary.
if ( bListHasFocus && ( rItem.state & LVIS_FOCUSED ))
{
pDC->DrawFocusRect ( rcItem );
}

*pResult = CDRF_SKIPDEFAULT; // We've painted everything.
}
}




m_agentList.SetIconSpacing(150, 150);
用他来调整图标距离 qq:1600564
simon_186 2007-03-20
  • 打赏
  • 举报
回复
没有人回了吗?分不够的话可以再加
simon_186 2007-03-19
  • 打赏
  • 举报
回复
关于这个问题,我开了个相关的帖子,大家有兴趣的话,可以去看看
http://community.csdn.net/Expert/topic/5401/5401723.xml?temp=.3764002
长尾巴的悟空 2007-03-17
  • 打赏
  • 举报
回复
加油,UP一下.
simon_186 2007-03-16
  • 打赏
  • 举报
回复
我试过了OnCustomDraw,但是还是存在问题。
已用方法:
在OnCustomDraw中只绘制图标,而不绘制文字。
结果:
文字是没有出现,但文字区域依然存在,项之间的间隙很大,而且鼠标左键单击该区域就选中了项。
我希望的效果是去掉文字区域,使各项紧密排列为一行,listctrl控件的高度就等于图标的高度。
菜牛 2007-03-13
  • 打赏
  • 举报
回复
不如自己重新做个窗口简单了。
happyness44 2007-03-13
  • 打赏
  • 举报
回复
LVS_REPORT经过重绘能达到LVS_ICON风格的效果
simon_186 2007-03-12
  • 打赏
  • 举报
回复
没有人知道怎样做吗?
代码转载自:https://pan.quark.cn/s/8ce4326d996e 对于在 CentOS 7 系统中修改网卡配置文件后无法使设置生效的情况,经过实践验证,可以通过使用 nmcli 命令来进行调整。完成修改之后,需要重新启动虚拟机以使更改生效,这样操作流程即告完成。如果设置仍然无法生效,则表明虚拟机在启动过程中所获取的 IP 地址配置并非针对 eth0,此时可以对其它网卡的配置文件进行修改或将其移除。在 CentOS 7 系统中,网络配置的管理机制与早期版本存在差异,主要体现为采用了 Network Manager 服务来负责网络接口的管理。在某些情形下,尽管修改了 `/etc/sysconfig/network-scripts` 目录下的 `ifcfg-eth0` 文件,但网络配置却未能即时生效。此类问题的发生通常源于 CentOS 7 采用了不同于以往的配置读取方法。接下来将具体阐述如何借助 nmcli 命令来处理这一挑战。 以 root 用户身份登录系统并打开终端界面。nmcli 是 Network Manager 提供的命令行界面工具,它支持在命令行环境下执行网络连接的建立、编辑、查询及管理任务。针对修改 eth0 网卡配置的需求,可以遵循以下步骤进行操作: 1. 导航至 `/etc/sysconfig/network-scripts` 目录: ``` cd /etc/sysconfig/network-scripts ``` 2. 检查该目录内是否存在 `ifcfg-eth0.bak` 文件,该备份文件可能是先前调整配置时遗留下来的,若存在可能造成冲突。若发现该文件,可以选择将其删除: ``` [root@localhost netw...
代码转载自:https://pan.quark.cn/s/46fd08fb879c 网管教程 从入门到精通软件篇 ★一。★详尽的xp修复控制台指令及其应用!!! 放入xp(2000)的光盘,安装时选择R,执行修复! Windows XP(涵盖 Windows 2000)的控制台指令是在系统遭遇某些意外状况时的一种极具效用的诊断、检测以及恢复系统功能的工具。笔者确实一直期望能够将这方面的指令进行归纳,此次由老范辛苦整理了这份极具价值的秘籍。 Bootcfg bootcfg 命令用于启动配置与故障恢复(对大多数计算机而言,即 boot.ini 文件)。 带有特定参数的 bootcfg 命令仅在运用故障恢复控制台时方可使用。能够在命令行界面下运用带有不同参数的 bootcfg 命令。 用法: bootcfg /default 设定默认引导选项。 bootcfg /add 向引导清单中增添 Windows 安装。 bootcfg /rebuild 重复整个 Windows 安装流程并让用户选择需添加的项目。 注意:运用 bootcfg /rebuild 之前,应先借助 bootcfg /copy 命令备份 boot.ini 文件。 bootcfg /scan 探查用于 Windows 安装的全部磁盘并展示结果。 注意:这些结果被静态存储,并用于当前会话。若在当前会话期间磁盘配置发生变动,为获取更新的探查结果,必须先重启计算机,然后再次探查磁盘。 bootcfg /list 列示引导清单中已有的项目。 bootcfg /disableredirect 在启动引导程序中禁用重定向。 bootcfg /redirect [ PortBaudRrate] |[ useBio...

15,976

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧