共用方式為


在不活躍時提供滑鼠互動

如果您的控件未立即啟動,您可能仍希望它處理WM_SETCURSOR和WM_MOUSEMOVE訊息,即使控件沒有自己的視窗。 這可以藉由啟用 COleControlIPointerInactive 介面實作來完成,而該介面預設為停用。 (如需此介面的描述,請參閱 ActiveX SDK 。若要啟用它,請在 COleControl::GetControlFlags 所傳回的旗標集合中包含 pointerInactive 旗標:

DWORD CMyAxOptCtrl::GetControlFlags()
{
   DWORD dwFlags = COleControl::GetControlFlags();
// The control can receive mouse notifications when inactive.
dwFlags |= pointerInactive;
return dwFlags;
}

如果您在使用 MFC ActiveX 控制項精靈建立控制項時,選取 [控制項設定] 頁面上的 [游標在不活躍時顯示通知] 選項,就會自動產生包含此旗標的程式代碼。

IPointerInactive介面被啟用時,容器會將WM_SETCURSOR和WM_MOUSEMOVE訊息的處理委派給該介面。 COleControl的實作方式會在適當調整滑鼠座標之後,透過控件的訊息映射分派訊息。 您可以將對應的條目新增至訊息映射表,以像一般的視窗訊息一樣處理訊息。 在這些訊息的處理程式中,請避免使用 m_hWnd 成員變數(或任何使用它的成員函式),而不先檢查其值是否為 NULL

您也可以讓非使用中的控制件成為 OLE 拖放作業的目標。 這需要在使用者將物件拖曳到控件上方時啟動控件,以便將控件的窗口註冊為置放目標。 若要在拖曳期間啟用,請覆寫 COleControl::GetActivationPolicy,並傳回POINTERINACTIVE_ACTIVATEONDRAG旗標:

DWORD CMyAxOptCtrl::GetActivationPolicy()
{
   return POINTERINACTIVE_ACTIVATEONDRAG;
}

啟用 IPointerInactive 介面通常表示您希望控件能夠隨時處理滑鼠訊息。 若要在不支援 IPointerInactive 介面的容器中取得此行為,您必須在可見時一律啟動控件,這表示控件應該在其其他旗標中包含OLEMISC_ACTIVATEWHENVISIBLE旗標。 不過,若要防止此旗標在支援的 IPointerInactive容器中生效,您也可以指定OLEMISC_IGNOREACTIVATEWHENVISIBLE旗標:

static const DWORD BASED_CODE _dwMyOleMisc =
OLEMISC_ACTIVATEWHENVISIBLE |
OLEMISC_IGNOREACTIVATEWHENVISIBLE |
OLEMISC_SETCLIENTSITEFIRST |
OLEMISC_INSIDEOUT |
OLEMISC_CANTLINKINSIDE |
OLEMISC_RECOMPOSEONRESIZE;

另請參閱

MFC ActiveX 控件:優化