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()
解决方案 »
- List Box 在显示数据的时候,在行与行之间能显示虚线么...
- Clistcontrol里的CEdit的内容在回车后 的处理的问题 (响应PreTranslateMessage)
- 求购<<directinput原理与api参考>>这本书,纸书好像没见有卖的了,谁有电子版传我,可以付费,有的或知道的帮个忙吧。(详细见帖内)
- 显示信息和聊天内容的是普通的单文本么
- 一个关于access里ole对象(word)读取和在vc界面(dialog)中显示的问题(十万火急)
- 郁闷啊郁闷啊,怎么也取不到OnDraw里的DC
- 潘爱民在北大的《组件技术讲义》下载! up有分!
- 苦思两个月不得结果,高手请进,菜鸟顶啊!
- 请问:如何在mfc程序运行时,打开一控制台窗口,用于输出数据
- 指针问题?
- 如何才能避免缓冲区溢出的错误呢?
- FileSpy中对GPT分区进行IOCTL_STORAGE_QUERY_PROPERTY返回0xC00000010
Wnd = AfxGetMainWnd();
const HWND hWnd = GetParent(Wnd->m_hWnd);
const HDC hDC=::GetDC(hWnd);
CDC cdc;
cdc.Attach(hDC);
if (cdc)
{
CRect r1, r2;
r1.SetRectEmpty();
//r1.left = 200;
//r1.top = 100;
r1.bottom = 60;
r1.right = 200;
cdc.FillRect(r1, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));
cdc.Ellipse(r1);
}
//已经可以画出圆了,不过另外的问题是,不在本浏览器内画,好像是在桌面上画,而且得不到CRect