这个问题把我弄郁闷了!高手进来帮我!!进来的都有分!!!谢谢!!!!!急!!!!!

jasonM2008 2008-10-01 11:37:17
在ListCtrl控件上我选择了OWNDRAWFIXED样式,所以不能用LVS_EX_CHECKBOXES来加上复选框了!
用什么方法加上复选框??

我自己用CButton创建了一个按钮,因为我是要在每一行的第一列来显示一个复选框,所以我用Listctrl的这个方法,GetSubItemRect来获取要绘制区域的矩形!


但是当获取第一列的时候,就是获取的整个一行的矩形!!!怎么来获取第一列的矩形区域????

还有,即使自己通过计算,获取到第一列的矩形,因为先前我的ListCtrl每行我设置了颜色,所以我把复选框的颜色也设置成了和ListCtl一样的颜色,但是出现 了个问题,创建后,看不到复选框,只有单击了那个区域才能看到,单击了其他区域后又看不到了!!
怎么解决这一问题??让复选框始终显示,并要和ListCtrl颜色一样!!!!!???????

急!!!!!!!!!!高手帮我!!!谢谢!!!!!!!!!!!!!
说详细点!很急!!!!
...全文
163 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
scq2099yt 2008-10-03
  • 打赏
  • 举报
回复
你做两个图标,分别作为选中和未选中两种状态的复选框,初始化时LoadIcon,在响应WM_DRAWITEM消息时,根据Item的状态选择图标DrawIcon。

用什么图标看自己的需求
11000000 2008-10-03
  • 打赏
  • 举报
回复
还不如去codeproject去下载一个高手做好的?
jia_xiaoxin 2008-10-02
  • 打赏
  • 举报
回复
m_ListCtrl.SetExtendedStyleCtrl(m_ListCtrl.GetExtendedStyle() | LVS_EX_CHECKBOXES);
luna52o 2008-10-02
  • 打赏
  • 举报
回复
这个问题我也遇到了,帮顶一下。
继续关注。。
冻结 2008-10-02
  • 打赏
  • 举报
回复
自定义控件。
jingtan 2008-10-02
  • 打赏
  • 举报
回复
同上.呵呵
阿呆_ 2008-10-02
  • 打赏
  • 举报
回复
进来看看有没有分
yjueqtd 2008-10-02
  • 打赏
  • 举报
回复
UP,看来楼主 要重绘了.
jasonM2008 2008-10-01
  • 打赏
  • 举报
回复
ItemData这个是什么数据结构???
jasonM2008 2008-10-01
  • 打赏
  • 举报
回复
好!我试一试哈!
xsc2001 2008-10-01
  • 打赏
  • 举报
回复
用我上面给你的函数吧,你在第几列绘制CheclBox,就在OnCustomDraw里调用我上面给你的函数就可以。
jasonM2008 2008-10-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 LBPeking 的回复:]
自己写一个类吧?
[/Quote]
写 了的,但是出现了问题!
创建后,看不到复选框,只有单击了那个区域才能看到,单击了其他区域后又看不到了!!
那你有没有这样的类可以供我参考哈?
jasonM2008 2008-10-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 LBPeking 的回复:]
自己写一个类吧?
[/Quote]
写 了的,但是出现了问题!
创建后,看不到复选框,只有单击了那个区域才能看到,单击了其他区域后又看不到了!!
那你有没有这样的类可以供我参考哈?
xsc2001 2008-10-01
  • 打赏
  • 举报
回复
这个你可以选用自绘制的方式来实现,在需要checkBox的单元格中进行绘制相应的checkBox,就可以,再根据Click事件将其选中或者不选中。
其实这个简单。在OnCustomDraw里实现,下面给你一点示例吧:

void CListEx::DrawText(int nItem,
int nSubItem,
CDC *pDC,
COLORREF crText,
COLORREF crBkgnd,
CRect &rect)
{
ASSERT(pDC);
pDC->FillSolidRect(&rect, crBkgnd);

CBrush brush(RGB(255,255,255));
CPen pen(PS_SOLID, 2, RGB(102, 102, 102));
CPen *pOldPen = pDC->SelectObject(&pen);
CBrush *pOldBrush = pDC->SelectObject(&brush);
// pDC->FillRect(&rect, &brush);
rect.DeflateRect(2,0,-2,1);
rect.right = rect.left + 25;
pDC->Rectangle(rect);
pDC->SelectObject(pOldPen);
pDC->SelectObject(pOldBrush);

CString str = "√";
// pDC->TextOut(rect.left + 2, rect.top, str);
ItemData* pid = reinterpret_cast<ItemData*>( CListCtrl::GetItemData( nItem ) );
if(pid == NULL)
return;
if(pid->bChecked)//选中
{
UINT nFormat = DT_VCENTER | DT_SINGLELINE | DT_CENTER;

pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(102, 102, 102));
// pDC->SetBkColor(RGB(120, 120, 0));
pDC->DrawText(str, &rect, nFormat);
}
/****************************************/
//写文字
char buffer[20];
memset(buffer, 0, 20);
GetItemText(nItem, nSubItem, buffer, 20);
pDC->TextOut(rect.right + 2, rect.top, buffer);
}
闪破风浪 2008-10-01
  • 打赏
  • 举报
回复
自己写一个类吧?
jasonM2008 2008-10-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 cnzdgs 的回复:]
你做两个图标,分别作为选中和未选中两种状态的复选框,初始化时LoadIcon,在响应WM_DRAWITEM消息时,根据Item的状态选择图标DrawIcon。
[/Quote]
那是不是要要把图标做成复选框样子??
cnzdgs 2008-10-01
  • 打赏
  • 举报
回复
你做两个图标,分别作为选中和未选中两种状态的复选框,初始化时LoadIcon,在响应WM_DRAWITEM消息时,根据Item的状态选择图标DrawIcon。
jasonM2008 2008-10-01
  • 打赏
  • 举报
回复
我知道,绘制了后,就出现了下述问题!

在ListCtrl控件上我选择了OWNDRAWFIXED样式,所以不能用LVS_EX_CHECKBOXES来加上复选框了!
用什么方法加上复选框??

我自己用CButton创建了一个按钮,因为我是要在每一行的第一列来显示一个复选框,所以我用Listctrl的这个方法,GetSubItemRect来获取要绘制区域的矩形!


但是当获取第一列的时候,就是获取的整个一行的矩形!!!怎么来获取第一列的矩形区域????

还有,即使自己通过计算,获取到第一列的矩形,因为先前我的ListCtrl每行我设置了颜色,所以我把复选框的颜色也设置成了和ListCtl一样的颜色,但是出现 了个问题,创建后,看不到复选框,只有单击了那个区域才能看到,单击了其他区域后又看不到了!!
怎么解决这一问题??让复选框始终显示,并要和ListCtrl颜色一样!!!!!???????
急!!!!!!!!!!高手帮我!!!谢谢!!!!!!!!!!!!!
说详细点!很急!!!!
phisherr 2008-10-01
  • 打赏
  • 举报
回复
要自己绘制复选框
douzexin1111 2008-10-01
  • 打赏
  • 举报
回复
楼主现在情况如何了??
自定义控件很多讲究的
加载更多回复(1)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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