共用方式為


非現用時提供滑鼠互動

如果您的控制項未立即啟動,您可能仍希望它處理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的 實 IPointerInactive 作會在適當地調整滑鼠座標之後,透過控制項的訊息對應分派訊息。 您可以將對應的專案新增至訊息對應,以像一般視窗訊息一樣處理訊息。 在這些訊息的處理常式中,請避免使用 m_hWnd 成員變數(或任何使用它的成員函式),而不先檢查其值是否為 Null

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

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

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

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

另請參閱

MFC ActiveX 控制項:最佳化