您的位置:首页 > 其它

用ATL开发复合控件

2015-10-16 14:57 218 查看

转载:http://www.vckbase.com/index.php/wv/1110

本文讲述了如何用ATL建立复合控件,以及如何响应连接点事件。考虑到代码很简单,程序中没有加注释,如有不清楚请参看MSDN,代码仓促中完成,不免有疏漏,见谅。

声明:本文仅适合初级中的初级读者。



步骤一:建立ATL项目,取名为AtlSample



步骤二:选择默认选项,点击Finish







步骤三:插入复合控件,名称为AtlComp,选择支持错误信息,支持连接点。



步骤四:在对话框模板上添加列表控件和进度条控件。在AtlComp.h中添加头文件

view source

print?

1.
#include< CommCtrl.h >


在类中添加私有成员变量:

view source

print?

1.
private
:

2.
    HIMAGELIST m_hImlIcons;

3.
    
HWND

m_hListCtrl;




步骤五:添加WM_INITDIALG消息响应事件,并在事件处理函数中添加如下代码:

view source

print?

01.
SendDlgItemMessage(IDC_PROGRESS1,PBM_SETBARCOLOR,0,(
LPARAM
)RGB(0,128,0));

02.
    
SendDlgItemMessage(IDC_PROGRESS1,PBM_SETPOS,0,0);

03.
    
m_hListCtrl = GetDlgItem(IDC_LIST1);

04.
    
m_hImlIcons = ImageList_Create(16, 16, ILC_MASK | ILC_COLOR32, 2, 0);

05.
    
HICON

hicon;          
// handle to icon   

06.
    
hicon = LoadIcon(_Module.m_hInstResource,MAKEINTRESOURCE(IDI_ICON_LIST));

07.
    
ImageList_AddIcon(m_hImlIcons,hicon);

08.
    
ListView_SetImageList(m_hListCtrl,m_hImlIcons,LVSIL_SMALL);

09.
 
10.
    
ListView_SetExtendedListViewStyle(m_hListCtrl,LVS_EX_FULLROWSELECT);

11.
    
//::GetWindowLong(m_hListCtrl,GWL_EXSTYLE | GWL_EXSTYLE) & LVS_EX_FULLROWSELECT);

12.
    
LV_COLUMN lvCol;

13.
    
lvCol.mask = LVCF_TEXT | LVCF_WIDTH;

14.
    
lvCol.fmt = LVCFMT_LEFT;

15.
    
lvCol.iSubItem = 0;

16.
 
17.
    
//添加表头

18.
    
lvCol.cx = 200;

19.
    
lvCol.pszText =
"文件名称"
;

20.
    
ListView_InsertColumn(m_hListCtrl,0,&lvCol);

21.
    
lvCol.cx = 80;

22.
    
lvCol.pszText =
"文件大小"
;

23.
    
ListView_InsertColumn(m_hListCtrl,1,&lvCol);


步骤六:添加WM_ DESTROY消息响应事件,并在事件处理函数中添加如下代码:

view source

print?

1.
ImageList_Destroy(m_hImlIcons);




步骤七:加入控件方法,名称为Atl,参数为空,并在方法实现中添加如下代码:

view source

print?

01.
ListView_DeleteAllItems(m_hListCtrl);

02.
LVITEM lvItem;

03.
lvItem.mask = LVIF_TEXT | LVIF_IMAGE;

04.
lvItem.state = 0;

05.
lvItem.iItem = 0;

06.
lvItem.iSubItem = 0;

07.
lvItem.pszText =
"我爱VC.C++"
;

08.
lvItem.iImage = 0;

09.
ListView_InsertItem(m_hListCtrl, &lvItem);

10.
ListView_SetItemText(m_hListCtrl,0,1,
"1024"
);

11.
SendDlgItemMessage(IDC_PROGRESS1,PBM_SETPOS,50,0);




步骤八:添加接口连接点AtlEven,参数为[in]long lState,[in]char * lpszInfo



步骤九:编译AtlSample.idl文件





步骤十:实现连接点,并在Atl()方法开始处添加:

view source

print?

1.
Fire_AtlEven(0,
"方法开始"
);


结尾处添加:

view source

print?

1.
Fire_AtlEven(1,
"方法结束"
);


步骤十一:建立测试程序TestAtlDlg。

在测试程序中接收连接点事件:

1.在头文件中添加宏 DECLARE_EVENTSINK_MAP()

2.在实现文件中添加宏

view source

print?

1.
BEGIN_EVENTSINK_MAP(CTestAtlDlg, CDialog)

2.
    
ON_EVENT(CTestAtlDlg, IDC_ATLCOMP1, 1
/*

3.
        
Atl */
, OnAtlEvent, VTS_I4  VTS_BSTR)
//step 2

4.
    
//}}AFX_EVENTSINK_MAP

5.
END_EVENTSINK_MAP()


3.建立事件函数OnAtlEvent(long state,char * buf),并在实现中添加相关处理代码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: