解决方案 »
- 快当叔叔了,散分求祝福~
- XP中本地连接数据包包含范围
- 一个对话框,有什么快捷键可以 从他的 .h文件切换到 资源视图 界面?
- 请教关于操作系统的页表
- 瑞星杀毒经常占用100%系统资源,瑞星公司没有能力解决它,我们大家一起来分析解决
- 怪事=>无法建立对象
- 如何在DIALOG里显示一段FALSH或者AVI呢!
- 多线成问题:请看为什么错误???
- 关于状态栏
- 我不小心买了张汉化的VC6,不能用。请把MSDEV.EXE E-mail给我好吗
- 回调函数调用非静态成员函数问题,请问如何强制转化指针的类型?
- 问个关于TreeView::SelectItem的简单问题,能知道的人 也不多把,求解答,来着散分。
不熟悉呃~~~咱通常都是完全自绘重载WM_PAINT和WM_ERASEBKGND来做的,前者用CDC一点一线慢慢画(真的是从几何形状到文字格式啥的都一点一点自己做,外加双缓冲),后者直接返回。据咱所知,所有想把界面做的炫点却又得使用幼儿园级别基本控件的MFC的人都有过一些超麻烦的回忆!
我之前在CListCtrl里面一个Item就create一个button,button类型是checkbox,然后这些button里面添加事件,当时ClistCtrl风格是list,然后刷新的话用movewindow就行;后来我改ClistCtrl风格为report,滚动条滚动,表头拖动啊什么的都不行了。然后我这次做修改一下,风格report,drawitem自绘,双缓冲,表头自绘,checkbox的话用图标加载,最后说明下使用Unicode编码。
在OnEraseBkgnd里,clientrect 抠掉item所在的区域,绘制背景
这样既没有闪烁 也没有残影
//刷新背景
BOOL CListCtrlEx::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CRect rcClient;
CRect rcItem;
CRect rcFill;
//获取位置
GetClientRect(&rcClient);
GetItemRect(1, rcItem, LVIR_BOUNDS); if ((rcFill.left = rcItem.right) < rcClient.right)
{
rcFill.right = rcClient.right;
rcFill.top = rcClient.top;
rcFill.bottom = rcClient.bottom;
//填充颜色
BufferCDC BufferDC(pDC, &rcFill);(注意BufferCDC是双缓冲的一个类)
BufferDC->FillSolidRect(&rcFill, m_BackCorlor);//m_BackCorlor是背景颜色
//不用缓冲可直接
//pDC->FillSolidRect(&rcFill, m_BackCorlor);
} return TRUE;
}
结贴给分