提示://假设你现在有一个窗体类 CPosition
先给童鞋补一个重写窗体函数的小技巧,以防产生无谓的疑惑:
·打开你的ClassView
·Add Windows Message Handler
·根据你的需要添加tiemr、paint、size、close ……
·有的童鞋可能删除了某些编译器给你自动生成的配置文件导致以上行为无法实现,不用担心,
那就打开你的ResourceView,打开你的对话框,右键添加类向导,选择添加全部即可恢复。
一、设置CListCtrl单元格的颜色
MFC中CListCtrl默认的颜色是屎灰色,有时候我们需要表格有不同的颜色表示不同的数据,
让数据有不同的状态或者有其他不同的特性。为了达到这个目的,我们只需要重写函数OnCustomdrawMyList。
废话不多说,直接看代码,废话都在代码中的注释里面。
//表格颜色的重绘是按照一次只重绘每一行的每一列来进行的 void CPosition::OnCustomdrawMyList ( NMHDR* pNMHDR, LRESULT* pResult ) { NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( pNMHDR ); *pResult = CDRF_DODEFAULT; //第一件事-检查画阶段。如果是控制阶段,返回,我们希望的是每一行列的消息。 if ( CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage ) { *pResult = CDRF_NOTIFYITEMDRAW; } else if ( CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage ) {
//这是一个行的通知消息。
*pResult = CDRF_NOTIFYSUBITEMDRAW; } else if ( (CDDS_ITEMPREPAINT | CDDS_SUBITEM) == pLVCD->nmcd.dwDrawStage ) { //用例表示字体颜色和背景颜色 COLORREF crText, crBkgnd; CString strTemp; //判断买卖 int nItem = static_cast<int>( pLVCD->nmcd.dwItemSpec); CHeaderCtrl* pHeaderCtrl = m_tradelist.GetHeaderCtrl();
//定义五个状态,分别用来判断五列是否存在 int dir =-1; //方向 int hold =-1; //状态1 int holdbyday =-1; //状态2 int holdbytick =-1; //状态3 //!!!!!!!!!!!!!!!!!!!!!!重要!!!!!!!!!!!!!!!!!!!!! //这个地方是你需要做的,你需要自己定义上面四个状态,即自己的四列值是否存在, //如果确定是存在的,就把这四个值设为对应的列数 1 2 3 4 //!!!!!!!!!!!!!!!!!!!!!!重要!!!!!!!!!!!!!!!!!!!!!
if(dir != -1&&pLVCD->iSubItem ==dir) //如果存在这一列并且正在绘制这一列 { strTemp =m_tradelist.GetItemText(nItem,dir); if(strcmp(strTemp,"多") ==0) { |