在VC中,讓動態建立的ActiveX控制項響應Windows訊息

來源:互聯網
上載者:User

 在VC中,讓動態建立的ActiveX控制項響應Windows訊息。
 
 
作者:未知 來源:月光軟體站 加入時間:2005-2-28 月光軟體站
 
-
當我們通過CWnd::CreateControl()動態建立ActiveX控制項時,Windows訊息並不會被發送給我們的由CWnd派生得控制項類。例如,即使我們為WM_KILLFOCUS訊息建立了控制代碼,這個控制代碼也是不會被調用的。(不信你試試 :))

引起這個問題的原因時,CWnd::CreateControl()並不會使我控制項的HWND子類化。

知道了原因,要解決問題就不難了。我們只要在控制項建立之後使它子類化就行了。通過一下步驟可以實現:

1.當然是添加控制項啦,先產生控制項的C++包容類。

2.再要建立控制項的類中聲明成員變數,此成員變數是包容類的指標對象。

3.在包容類的標頭檔中添加:

//{{AFX_MSG(CMyClass)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()

CMyClass是實際的類名。

4.在包容類的CPP檔案的#include段下面添加:

BEGIN_MESSAGE_MAP(CMyClass, CWnd)
    //{{AFX_MSG_MAP(CMyClass)
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

5.刪除工程目錄下的.clw檔案,在工程中開啟ClassWizard,先選yes,在選Add All。

6.現在你就可以使用ClassWizard為控制項包容類添加訊息映射和處理函數了。

完成這些修改後,你必須建立控制項並且使它子類化,下面是個例子:

void CSDIApp2View::OnInitialUpdate()
{
CView::OnInitialUpdate();

m_pFlexGrid = new CMSFlexGrid;

CRect rect;
GetClientRect(&rect);
m_pFlexGrid->Create(NULL, WS_CHILD | WS_VISIBLE, rect, this, IDC_FLEXGRID);
HWND hWnd = m_pFlexGrid->Detach();
m_pFlexGrid->SubclassWindow(hWnd);
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.