CLISTCTRL 显示闪烁的问题。 我在CLISTCTRL窗口中显示的记录有117条,每次显示的时候闪的很厉害,请问什么原因,怎么解决?我在离开窗口时调用DeleteAllItems()和显示前调用DeleteAllItems()效果一样,都很闪。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 SetRedraw(FALSE);DeleteAllItems();SetRedraw(TRUE); SetRedraw(FALSE); // 更新前...SetRedraw(TRUE); // 更新后 显示的时候做了什么处理...SetRedraw(FALSE); 禁止刷新试试 我说漏了点,我这个窗口是继承CReportCtrl控件,对不住大家了。因为要对指定记录标色,CLISTCTRL又没有这个功能,所以用了CReportCtrl。我是对每条记录判断后调用SetItemTextColor(nIndex, -1, RGB(255, 0, 0));着色。void CReportCtrl::SetItemTextColor(int nItem, int nSubItem, COLORREF color, BOOL bRedraw){ if (color == COLOR_INVALID) color = ::GetSysColor(COLOR_WINDOWTEXT); const int ROWS = GetItemCount(); const int COLS = GetColumnCount(); BOOL bRowValid = nItem >= 0 && nItem < ROWS; BOOL bColValid = nSubItem >= 0 && nSubItem < COLS; if (bRowValid && bColValid) { // apply to individual grid CItemData* p = (CItemData*)(CListCtrl::GetItemData(nItem)); ASSERT(p != NULL); p->aTextColors[nSubItem] = color; } else if (bRowValid && !bColValid) { // apply to whole row for the existing item DWORD_PTR dPtr = CListCtrl::GetItemData(nItem); CItemData* p = (CItemData*)(dPtr); ASSERT(p != NULL); for (int i = 0; i < COLS; i++) p->aTextColors[i] = color; } else if (!bRowValid && bColValid) { // apply to whole column for all existing items for (int i = 0; i < ROWS; i++) { CItemData* p = (CItemData*)(CListCtrl::GetItemData(i)); ASSERT(p != NULL); p->aTextColors[nSubItem] = color; } } else { // apply to whole table for all existing items for (int i = 0; i < ROWS; i++) { CItemData* p = (CItemData*)(CListCtrl::GetItemData(i)); ASSERT(p != NULL); for (int j = 0; j < COLS; j++) p->aTextColors[j] = color; } } if (bRedraw) RedrawWindow();}估计是SetItemTextColor函数的RedrawWindow操作吧。 我去掉SetItemTextColor语句就不闪了。 问题点:就是CReportCtrl类写的不好!!!!!!! 重叠IO模型,使用完成例程,怎么使用TransmitFile发送文件? CTlFactory& TlFactory = CTlFactory::GetInstance();"&"符号 win32 API 该怎么入门啊? 高手推荐本教材浅显易懂的教材吧 如何判断已经到了文件的结尾?不用eof 在一个程序里怎么实现实时信息的接收,谁能给小弟讲讲? 小问题 请教一个简单问题 LoadIcon的问题 请问谁知道用文件格式来保存图片(BMP/JPEG)?? 关于 线程中加载dll 并在dll中创建 窗口问题 CreateFile的用法? 登录窗口
DeleteAllItems();
SetRedraw(TRUE);
SetRedraw(FALSE); // 更新前
...
SetRedraw(TRUE); // 更新后
SetRedraw(FALSE); 禁止刷新试试
SetItemTextColor(nIndex, -1, RGB(255, 0, 0));
着色。
void CReportCtrl::SetItemTextColor(int nItem, int nSubItem, COLORREF color, BOOL bRedraw)
{
if (color == COLOR_INVALID)
color = ::GetSysColor(COLOR_WINDOWTEXT);
const int ROWS = GetItemCount();
const int COLS = GetColumnCount();
BOOL bRowValid = nItem >= 0 && nItem < ROWS;
BOOL bColValid = nSubItem >= 0 && nSubItem < COLS; if (bRowValid && bColValid)
{
// apply to individual grid
CItemData* p = (CItemData*)(CListCtrl::GetItemData(nItem));
ASSERT(p != NULL);
p->aTextColors[nSubItem] = color;
}
else if (bRowValid && !bColValid)
{
// apply to whole row for the existing item
DWORD_PTR dPtr = CListCtrl::GetItemData(nItem);
CItemData* p = (CItemData*)(dPtr);
ASSERT(p != NULL);
for (int i = 0; i < COLS; i++)
p->aTextColors[i] = color;
}
else if (!bRowValid && bColValid)
{
// apply to whole column for all existing items
for (int i = 0; i < ROWS; i++)
{
CItemData* p = (CItemData*)(CListCtrl::GetItemData(i));
ASSERT(p != NULL);
p->aTextColors[nSubItem] = color;
}
}
else
{
// apply to whole table for all existing items
for (int i = 0; i < ROWS; i++)
{
CItemData* p = (CItemData*)(CListCtrl::GetItemData(i));
ASSERT(p != NULL);
for (int j = 0; j < COLS; j++)
p->aTextColors[j] = color;
}
} if (bRedraw)
RedrawWindow();
}
估计是SetItemTextColor函数的RedrawWindow操作吧。