在 MFC 库之前链接 Link C 运行时库时出现 LNK2005 错误- -| 回首页 | 2005年索引 | - -已锁定

列表控件设置- -

                                      

列表功能是最常用的控制功能之一,所以实现它的定制技巧也具有很大的现实意义。其实现步骤如下:

 


  1、首先利用资源编辑器建立一个包含列表控件的对话框,并利用类向导ClassWizard为对话框生成新类CColorListBox,其头文件为custlist.cpp,实现文件不设置;
  2、在实现文件custlist.cpp中完善其类代码:
   class CColorListBox:public CListBox
   {//完善列表控制类代码
   public://类成员函数
  void AddColorItem(COLORREF color);
  virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMIS);
  virtual void DrawItem(LPDRAWITEMSTRUCT lpDIS);
   };
  3、在实现文件custlist.cpp中完善各成员函数;
   void CColorListBox::AddColorItem(COLORREF color)
   { //增加表项,其为一个颜色值
   AddString((LPCTSTR) color);
   }
   #define COLOR_ITEM_HEIGHT 20 //表的高度
   void CColorListBox::MeasureItem(LPMEASUREITEMSTRUCT lpMIS)
   {//设置自绘表项的高度
   lpMIS->itemHeight = COLOR_ITEM_HEIGHT;
   }
   void CColorListBox::DrawItem(LPDRAWITEMSTRUCT lpDIS)
   { //绘制列表的表项函数
   CDC* pDC=CDC::FromHandle(lpDIS->hDC);
   COLORREF cr=(COLORREF)lpDIS->itemData;
   if (lpDIS->itemAction&ODA_DRAWENTIRE){
   CBrush br(cr);//绘制正常色彩条
   pDC->FillRect(&lpDIS->rcItem,&br);
   }
   if ((lpDIS->itemState&ODS_SELECTED) &&
      (lpDIS->itemAction&(ODA_SELECT|ODA_DRAWENTIRE)))
   { //绘制选中项色彩条
   COLORREF crHilite=RGB(255-GetRValue(cr),
   255-GetGValue(cr),255-GetBValue(cr));
   CBrush br(crHilite);
   pDC->FrameRect(&lpDIS->rcItem,&br);
   }
   if (!(lpDIS->itemState&ODS_SELECTED)&&
   (lpDIS->itemAction&ODA_SELECT))
   { file://清除前次选中项的框
   CBrush br(cr);
   pDC->FrameRect(&lpDIS->rcItem, &br);
   }
   }
  4、在实现文件custlist.cpp中可以像使用其它类一样使用新生成的定制列表类,其方法是首先设置类的控制成员变量m_colors,并设置相应的消息映射,最后完善其初始化函数:
   BOOL CCustListDlg::OnInitDialog()
   {//完善初始化函数,与子类控制连接
   VERIFY(m_colors.SubclassDlgItem(IDC_LISTBOX1,this));
   for(int red=0;red<=255;red+=255)//增加彩色条8项
   for(int green=0;green<=255;green+=255)
   for(int blue=0;blue<=255;blue+=255)
   m_colors.AddColorItem(RGB(red,green,blue));
   return TRUE;
   }
  

- 作者: lgs0540 2005年04月20日, 星期三 10:18 加入博采

Trackback

你可以使用这个链接引用该篇文章 http://publishblog.blogchina.com/blog/tb.b?diaryID=1253902

回复

评论内容: