控件自绘之CListBoxST

源代码及可执行文件下载地址:http://files.cnblogs.com/rainboy2010/CListBoxST.zip

CListBoxST是MFC CListBox的一个派生类,小巧实用,主要的功能特色有:

  • 易于使用
  • 可以禁用列表项
  • 可以显示多行文本
  • 可以移动列表项
  • 可以显示提示信息

 使用方法

1. 添加ListBoxST.h,ListBoxST.cpp文件到你的项目中

2. 添加List Box控件,名称为IDC_LIST1,设置相应的属性:

  • Owner Draw  ->Variable
  • Has Strings    ->True
  • Notify            ->True
  • Selection       ->Single
  • Sort              ->False

3. 添加图标资源到项目中,命名为IDI_Page01~IDI_Page06,并添加以下成员变量:

CListBoxST m_ListBox;
    CImageList m_ImageList;

4. 在OnInitDialog()方法里添加以下代码:

m_ListBox.SubclassDlgItem(IDC_LIST1,this);

HICON hIcon=NULL;
m_ImageList.Create(16,16,ILC_COLOR32|ILC_MASK,6,1);
hIcon=AfxGetApp()->LoadIcon(IDI_Page01);
m_ImageList.Add(hIcon);
hIcon=AfxGetApp()->LoadIcon(IDI_Page02);
m_ImageList.Add(hIcon);
hIcon=AfxGetApp()->LoadIcon(IDI_Page03);
m_ImageList.Add(hIcon);
hIcon=AfxGetApp()->LoadIcon(IDI_Page04);
m_ImageList.Add(hIcon);
hIcon=AfxGetApp()->LoadIcon(IDI_Page05);
m_ImageList.Add(hIcon);
hIcon=AfxGetApp()->LoadIcon(IDI_Page06);
m_ImageList.Add(hIcon);

m_ListBox.SetImageList(&m_ImageList);

m_ListBox.AddString(_T("Java is one of the most popular programming languages in the world"),0);
m_ListBox.AddString(_T("C++ is a classic,powerful programming language"),1);
m_ListBox.AddString(_T("C# is an object-oriented,high-level programming language"),2);
m_ListBox.AddString(_T("Python is a programming language that lets you work quickly and integrate systems more effectively"),3);
m_ListBox.AddString(_T("Delphi is famous Windows platform of rapid application development tools"),4);
m_ListBox.AddString(_T("VB is a Visual programming language"),5);

m_ListBox.EnableToolTips(TRUE);

运行效果如下图所示:

时间: 2024-10-21 05:10:41

控件自绘之CListBoxST的相关文章

深入Windows窗体原理及控件重绘技巧

之前有学MFC的同学告诉我觉得Windows的控件重绘难以理解,就算重绘成功了还是有些地方不明白,我觉得可能很多人都有这样的问题,在这里我从Windows窗体的最基本原理来讲解,如果你有类似的疑惑希望这篇文章可以帮你解惑. 1.Windows窗体原理 首先,如果看过Win32 SDK编程的都知道Windows的三大核心系统:负责窗口对象产生和消息分发的USER模块,负责图像显示绘制的GDI模块,负责内存.进程.IO管理的KERNEL模块.试想象一下如何在一个像素阵列上产生窗口对象,其实就是使用G

阻止控件重绘

//控件重绘 [DllImport("USER32.DLL ", CharSet = CharSet.Auto, SetLastError = true)] public static extern bool SendMessage( IntPtr hWnd, // 目标窗口句柄 int Msg, // 消息 bool wParam, // 第一个消息参数 false阻止 true不阻止 int lParam ); const int WM_GETTEXT =0x000B; SendM

WPF控件自绘——基础,Control类的定义

用于记录自己的学习WPF控件,大神请飘过... [WPF控件类继承关系图] 所有可以自定义模版的控件都是从Control继承,所以我们来看看Contorl类里面到底有些什么.为以后的控件自定义模版做好准备.废话少说先来看看WPF中Control类的定义 1 namespace System.Windows.Controls 2 { 3 public class Control : FrameworkElement 4 { 5 public static readonly DependencyPr

控件自绘DRAWITEMSTRUCT

转载自:http://blog.sina.com.cn/s/blog_83b3bb460100t8w9.html 来由:DRAWITEMSTRUCT 为需要自绘的控件或者菜单项提供了必要的信息.在需要绘制的控件或者菜单项对应的WM_DRAWITEM消息函数中得到一个指向该结构的指针. 例子: virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct); (.h中声明)  void CColorButton::DrawItem(LPDRAWIT

控件重绘

1. 设置控件DrawMode属性为OwnerDrawFixed,编辑控件DrawItem事件 重绘tabControl--选项卡控件 string text = ((TabControl)sender).TabPages[e.Index].Text; SolidBrush brush = new SolidBrush(Color.Black); StringFormat sf = new StringFormat(StringFormatFlags.DirectionRightToLeft);

MFC Button控件自绘

文章参考地址:  http://blog.csdn.net/yue7603835/article/details/6649458    VC下的界面着实难看 有时候我们不得不自己进行控件的绘制 以前 一直不理解最近再次看了学了一遍终于明白了一点   与大家分享下...       需要源代码的Q我 寻找一起学VC的朋友    比如说   我们要改变一个编辑框的背景 我们响应WM_CTLCOLOR函数 进行OnCtlColor进行修改但是对与 Button控件就不行了 ..   这时候我们要进行自

MFC控件重绘

MFC的一系列重绘控件: 如图所示: 示例下载地址:http://download.csdn.net/detail/qq_23992597/9510696

Button控件自绘

1. 派生CButton 2. 重写PreSubclassWindow函数,设置BS_OWNERDRAW属性 void CButtonEx::PreSubclassWindow() { // TODO: 在此添加专用代码和/或调用基类 UINT nStyle = GetButtonStyle(); SetButtonStyle(nStyle | BS_OWNERDRAW); CButton::PreSubclassWindow(); } 3. 重写DrawItem函数实现Button重绘 But

c#控件重绘的问题

1.当Panel有背景图像的时候,往Panel添加控件(带图像),画面会非常闪烁,所以,Panel尽量不要带背景图像 2.带背景图像可以参考designer.cs里面的写法... 添加Control之前 this.panelContainer.SuspendLayout();            this.panelBTL.SuspendLayout();            this.SuspendLayout(): .............添加控件代码 this.panelContai