判断ActiveX控件是Desgin Mode还是Runtime Mode

对于MFC

COleControl::AmbientUserMode

Determines if the Container is in design mode or user mode.

BOOL AmbientUserMode( );

Return Value

Nonzero if the container is in user mode; otherwise 0 (in design mode). If this property is not supported, this function returns 0.

Remarks

For example, a container might set this to FALSE in design mode.

 

根据当前ActiveX控件当前所处的模式,修改OnDraw函数:

BOOL bUserMode = FALSE;
bUserMode = AmbientUserMode();
if(bUserMode)
{
    LPCTSTR pszText = _T("MFC 3.0 : User Mode");

    TextOut(di.hdcDraw, 
        (rc.left + rc.right) / 2, 
        (rc.top + rc.bottom) / 2, 
        pszText, 
        lstrlen(pszText));
}
else
{
    LPCTSTR pszText = _T("MFC 3.0 : Design Mode");
    TextOut(di.hdcDraw, 
        (rc.left + rc.right) / 2, 
        (rc.top + rc.bottom) / 2, 
        pszText, 
        lstrlen(pszText));
}

 

对于ATL

CComControlBase::GetAmbientUserMode

Retrieves DISPID_AMBIENT_USERMODE, a flag indicating whether the container is in run-mode (TRUE) or design-mode (FALSE).

HRESULT GetAmbientUserMode(BOOL& bUserMode);

Parameters

bUserMode  : 

The property DISPID_AMBIENT_USERMODE.

Return Value : 

One of the standard HRESULT values.

OnDraw中判断

 

BOOL bUserMode = FALSE;
HRESULT hr = GetAmbientUserMode(bUserMode);
if(bUserMode)
{
    LPCTSTR pszText = _T("ATL 3.0 : User Mode");

    TextOut(di.hdcDraw, 
        (rc.left + rc.right) / 2, 
        (rc.top + rc.bottom) / 2, 
        pszText, 
        lstrlen(pszText));
}
else
{
    LPCTSTR pszText = _T("ATL 3.0 : Design Mode");
    TextOut(di.hdcDraw, 
        (rc.left + rc.right) / 2, 
        (rc.top + rc.bottom) / 2, 
        pszText, 
        lstrlen(pszText));
}

 

 

    

posted on 2017-05-23 13:28  我来乔23  阅读(577)  评论(0编辑  收藏  举报

导航