+ -
当前位置:首页 → 问答吧 → Web上的Active,如何得到Web窗体的CDC和CRect?

Web上的Active,如何得到Web窗体的CDC和CRect?

时间:2011-12-19

来源:互联网


MFC2010制作一个ActiveX;
通过xx.inf和makecert,cert2spc,cabarc,signtool制作成cab;
在Web上加载一个这个cab,成功安装后;

已经可以进入该这个函数里
//系统自动生在的WebC1Ctrl.cpp文件名除外)以下部份
//以上略... ...
STDAPI DllRegisterServer(void)
{
AFX_MANAGE_STATE(_afxModuleAddrThis);
if (!AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid))
return ResultFromScode(SELFREG_E_TYPELIB);
if (!COleObjectFactoryEx::UpdateRegistryAll(TRUE))
return ResultFromScode(SELFREG_E_CLASS);
//-------加入以下代码
HRESULT hr; 
//标记控件初始化安全. 
//创建初始化安全组件种类 
hr = CreateComponentCategory(CATID_SafeForInitializing, _T( "Controls safely initializable from persistent data!")); 
if (FAILED(hr)) 
return hr; 
//注册初始化安全 
hr = RegisterCLSIDInCategory(CLSID_Safeitem, CATID_SafeForInitializing); 
if(FAILED(hr)) 
{
::MessageBox(0, _T("RegisterCLSIDInCategory()-fail"), _T("kknd"), 0);
return hr; 
}

//标记控件脚本安全 
//创建脚本安全组件种类  
hr = CreateComponentCategory(CATID_SafeForScripting, _T("Controls safely scriptable!")); 
if (FAILED(hr)) 
{
::MessageBox(0, _T("CreateComponentCategory()-fail"), _T("kknd"), 0);
return hr; 
}
//注册脚本安全组件种类 
hr = RegisterCLSIDInCategory(CLSID_Safeitem, CATID_SafeForScripting); 
if (FAILED(hr)) 
{
::MessageBox(0, _T("RegisterCLSIDInCategory()-fail"), _T("kknd"), 0);
return hr; 
}
//-------
//A处
return NOERROR;
}
//以下略... ...


//系统自动生在的WebC1Ctrl.h(文件名除外)以下
#pragma once
class CWebC1Ctrl : public COleControl
{
DECLARE_DYNCREATE(CWebC1Ctrl)
public:
CWebC1Ctrl();
public:
virtual void OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid);
virtual void DoPropExchange(CPropExchange* pPX);
virtual void OnResetState();
protected:
~CWebC1Ctrl();
DECLARE_OLECREATE_EX(CWebC1Ctrl) // 类工厂和 guid
DECLARE_OLETYPELIB(CWebC1Ctrl) // GetTypeInfo
DECLARE_PROPPAGEIDS(CWebC1Ctrl) // 属性页 ID
DECLARE_OLECTLTYPE(CWebC1Ctrl) // 类型名称和杂项状态
DECLARE_MESSAGE_MAP()
DECLARE_DISPATCH_MAP()
DECLARE_EVENT_MAP()
public:
enum { };
};


//WebC1Ctrl.cpp部份
//以上略... ...
// CWebC1Ctrl::OnDraw - 绘图函数
void CWebC1Ctrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{
//only test
::MessageBox(0, _T("OnDraw()"), _T("kknd"), 0);


//
if (!pdc)
return;

// TODO: 用您自己的绘图代码替换下面的代码。
pdc->FillRect(rcBounds, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));
pdc->Ellipse(rcBounds);
}
//以下略... ...

//要在窗口中画图,但先要得到CDC与CRect,问如何得到Web窗口的CDC和CRect?
//是否是调用OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)?如果是,又是如何调用的?Web是并没有调用到OnDraw()

作者: xinqiao2008   发布时间: 2011-12-19

在里面调用AfxGetMainWnd()得到主窗口句柄,用GetParent()得到父窗口句柄,然后你想得到窗口的一些信息都可以了

作者: fishion   发布时间: 2011-12-19

热门下载

更多