天天看點

讓動态建立的ActiveX控件響應Windows消息

當我們通過

CWnd::CreateControl()

動态建立

ActiveX

控件時,

Windows

消息并不會被發送給我

們的由

CWnd

派生得控件類。例如,即使我們為

WM_KILLFOCUS

消息建立了句柄,這個句柄

也是不會被調用的。(不信你試試

:))

引起這個問題的原因時,

并不會使我控件的

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.

現在你就可以使用

為控件包容類添加消息映射和處理函數了。

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

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

m_pFlexGrid->Detach();