各位高手大神,你们好:
我现在有一个问题:利用ADO读取一个文件(其实本质上是ACCSESS数据库),但是在读取的过程中,比如通过判断“状态”这个字段的值(其实这个字段只保存了两个不同的字符,不是‘E’就是‘N’),来决定这一行(不是一个单元格)显示的背景颜色,这个功能如何实现?
通过消息NM-CUSTOMDRAW?
本人菜鸟一个,不知道有没有说清楚,希望水平高的程序员帮我解解惑,不胜感激!
贴上部分代码:
在类内最开始的位置定义了一个全局变量 int型的flag=1,读取数据库的代码如下
while(!m_pRecordset->adoEOF)
{ m_Grid.InsertItem(0,"");
CString str= (char*)(_bstr_t)m_pRecordset->GetCollect("valid");
if("E"==str)
{
str="有效";
flag=1;
}
else
{
str="无效";
flag=0;
}
m_Grid.SetItemText(0,0,str);//设置无效和有效
}
消息响应函数的代码如下:
void CDBDlg::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)
{
NMLVCUSTOMDRAW* pLVCD = reinterpret_cast( pNMHDR );
// Take the default processing unless we set this to something else below.
*pResult = 0;
// 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 )
{
switch (flag)
{
case 0:
//MessageBox("3");
pLVCD->clrTextBk=RGB(0,0,100);
pLVCD->clrText=RGB(100,0,0);
break;
case 1:
// MessageBox("2");
pLVCD->clrTextBk=RGB(100,0,0);
pLVCD->clrText=RGB(0,100,0);
break;
}
*pResult = CDRF_DODEFAULT;
}
}
代码运行的结果显示flag恒为1,不知道为什么