2024年4月19日发(作者:)
MFC自定义控件详细»
/3582077/blog/item/ 关
于Custom Control 自定义控件的介绍,有一篇文章感觉不错,不过是英文的,英语不好
的也没关系,不 是有“有道”吗?再说了,我们只要看代码就行了,而且步骤也就那么几
步,结合教程图片稍微猜一下也 就知道了。 原文地址:
/KB/static/ 接下来我把上面教程的
操作步骤简单描述一下: 1、首先往对话框添加一个“自定义控件”,然后右击该控件选
择“建立类向导”,在弹出的对话框点击 “”,选择“", 之后“Name"
项填CMyCustomControl, “Base Class"选择generic CWnd,点确定。 在
MyCustomControl.h
CMyCustomControl
添加函数声明
类添加如
BOOL
下函
RegisterWndClass();
数:
给
BOOL
CMyCustomControl::RegisterWndClass() { WNDCLASS windowclass; HINSTANCE
hInst=AfxGetInstanceHandle();
if(!::GetClassInfo(hInst,"MyDrawPad",&windowclass))
{ =CS_DBLCLKS; dProc=::DefWindowProc;
xtra=xtra=0;
nce=hInst; =NULL;
r=AfxGetApp()->LoadStandardCursor(IDC_ARROW);
kground=::GetSysColorBrush(COLOR_WINDOW);
nuName=NULL; assName="MyDrawPad";
if(!AfxRegisterClass(&windowclass)) { AfxThrowResourceException(); return
FALSE; } } return TRUE; } 在MyCustomControl 类构造函数中调用RegisterWndClass
函数,如下: CMyCustomControl::CMyCustomControl() { RegisterWndClass(); } 接
着右击对话框里“自定义控件”,选择属性,“种类”框里填上MyDrawPad(窗口类)。
给对话框类添 加一个CMyCustomControl 类对象(是在*Dlg.h)。如:
CMyCustomControl m_drawpad;(记得包含头文件)。 #include
"MyCustomControl.h" 对话框类的DoDataExchange 函数里添加如下语句: void
CThirdDlg::DoDataExchange(CDataExchange* pDX)
{ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CThirdDlg) // NOTE: the
ClassWizard will add DDX and DDV calls here //}}AFX_DATA_MAP
DDX_Control(pDX,IDC_CUSTOM1,m_drawpad);//IDC_CUSTOM1 为自定义控件的ID
号 } 到了这里,自定义控件的基本问题算是解决了。可自行给CMyCustomControl 类添
加消息响应函数,运行一 下吧。 自定义控件仿工具栏 标题名是仿工具栏控件,其实也只
是仿下工具栏那个模式而已,想一下,工 具栏类里有那么多个函数,能仿得过来吗?如果
有谁觉得用自定义控件模仿这个 太麻烦的话,也可直接从按钮控件(CButton)派生出类
来代替“自定义控件”类。 我这里就直接以上面工程的CMyCustomControl 类为例。
1、首先往工程里引三张图片如下: 2、再引入六个图标,用于项显示图标,ID 号保持默
认不变, 3、CMyCustomControl 添加如下成员变量(私有变量) 4、响应自定义控件
(CMyCustomControl) WM_ERASEBKGND、WM_LBUTTONDOWN、
WM_LBUTTONUP、WM_MOUSEMOVE、WM_PAINT、WM_TIMER 消息 5、添加如
下成员函数 6、构造函数中初始化部分成员变量(私有变量初始化) 7、添加各函数代码
8、成员函数要在.h 中的public 中声明 void SetBitmapIDs(UINT BKID,UINT
itemMOverID,UINT itemPushID); BOOL SetItemSize(int Width,int Height,int
itemSpacing=5); BOOL SetImageList(CImageList *pImageList); BOOL
AddItem(UINT nID); 9、在*Dlg.h 中定义一个需要用到的变量 CImageList
m_ImageList; 10、在*.cpp 中添加初始化响应函数
m_(32,32,ILC_COLOR32|ILC_MASK,1,0);
m_(AfxGetApp()->LoadIcon(IDI_ICON1+i));
m_geList(&m_ImageList);
for(int i=0;i<6;i++)


发布评论