程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 利用ATL(ActiveX模板庫)創建ActiveX控件

利用ATL(ActiveX模板庫)創建ActiveX控件

編輯:關於C語言

 

  ATL可以作為一個完整的控件開發框架,它的主要目標是提供方便的開發手段和生成更小的目標文件。由於ATL可以脫離開MFC所以它的執行速度和加載速度都比MFC開發的控件快。當然你也可以在ATL中使用MFC,但這樣就失去了ATL的優勢,因為利用MFC開發控件在目前來講還是要比ATL方便和快捷。由於在ATL中不使用MFC所以所有的的功能調用都是通過WIN32 API函數和C運行庫函數來完成。但利用ATL我們可以很方便的開發出COM對象,而這點是MFC較弱的地方,但這個問題已經超出了本章的內容。

在本節中通過一個例子來看看如何利用ATL創建一個工程並添加相應的功能,首先利用Class Wizard創建一個ATL工程,在創建時幾乎沒有什麼選項。所有的ATL接口都要在創建後才添加。在菜單Insert中選擇New ATL Object...,這時你需要選擇Control類中的Full Control項,然後輸入對象的名稱,並且為了添加容錯和事件支持你需要在Attributes選項中選中Support ISupportErrorInfo和Support Connection Points。

接下來我們為ATL接口添加方法,然後在對話框中輸入方法名稱和參數,你可以看到參數定義前可以利用中括號對參數的屬性進行定義,可用的指令有:

  • in 調用方傳入的參數
  • out 給調用方返回的值
  • in,out 既作為輸入參數有作為返回值


接下來我們添加兩個方法:SetCaption([in]BSTR pszCaption)和GetCaptionLength([out]long* lLen)其作用是設置標題和得到標題的字符串長度。相關代碼如下:

  STDMETHODIMP CATLSam::SetCaption(BSTR pszCaption)
{
USES_CONVERSION; //由於COM傳送字符時使用UNICODE所以在此要進行轉換,unicode->ansi
LPTSTR pTemp=W2A(pszCaption);
delete m_pszCaption; //刪除原來的數據
m_pszCaption = new char[strlen(pTemp)+1];
strcpy(m_pszCaption,pTemp);
return S_OK;
}
STDMETHODIMP CATLSam::GetCaptionLength(long *lLen)
{
*lLen=strlen(m_pszCaption);
return S_OK;
}

  接下來為了在界面上顯示出所做的改動,讓我們重寫OnDraw函數,相關代碼如下:

HRESUL

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved