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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28