控件调试方法
控件编译生成的是OCX文件,无法进行单步Debug调试。OCX需要运行环境,VS自带的plant调试环境不好使用,而且不好传递参数。或者说我不会用,这个方面介绍的资料十分少。我的调试方法如下:
1. 创建一个.html文件,在该文件中引用这个OCX,需要知道CLASSID,可以在.html文件中传入给OCX的参数
2. 利用regsvr32命令 安装和卸载 OCX,每次编译生成新的OCX都需要进行新的安装,然后利用IE打开上面生成的.html文件就可以运行OCX了。
Regsvr32 xx.ocx 安装控件
Regsvre32 –u xx.ocx 卸载控件
从页面向控件中传递参数
下面以类CUpFileActiveXCtrl进行说明,应为该类是进行参数传递的关键
功能描述:
负责从控件嵌入页面得到参数,然后将参数传递给控件主操作界面一个Dialog对话框。
属性描述:
CUpLoadDialog m_uploadDialog 绘制主操作界面
CString m_upIp 上传IP
CString m_upPage 上传页面
CString m_upFileNameUseByForm 上传Form中file变量名
CString m_upParamName 上传变量名
CString m_upParamValue 上传变量值
LONG m_sigFileSize 单个文件到小
LONG m_tolFileSize 总文件大小
SHORT m_tolFileNum 总文件个数
方法描述:
DoPropExchange(CPropExchange* pPX) 完成从嵌入页面得到数据写入上面的属 性
OnCreate() 完成给m_uploadDialog设置属性值,显示m_uploadDialog对话框。
OnDraw() 调用m_uploadDialog的重绘方法完成窗口绘制。
1. 在UpFileActiveX.idl文件中增加
[ uuid(318F3BB1-EF8B-4D4D-82CF-F5458EDE9F0A),
helpstring("UpFileActiveX Control 的调度接口")]
dispinterface _DUpFileActiveX
{
properties:
[id(24) , helpstring("属性strCurUpFolder")] BSTR strCurUpFolder; //增加的页面属性
methods:
};
2. 在UpFileActiveXCtrl.h中增加2处
a) 调度和事件ID
// 调度和事件ID
public:
enum {
dispidstrCurUpFolder = 24,
}
b) 增加类变量和方法
void OnstrCurUpFolderChanged(void);
CString m_strCurUpFolder;
3. 在UpFileActiveXCtrl.CPP文件的修改
a) 实现增加的方法
//无需具体的实现,保留空方法就行
void CUpFileActiveXCtrl::OnstrCurUpFolderChanged(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// TODO: 在此添加属性处理程序代码
SetModifiedFlag();
}
b) 添加调度映射
BEGIN_DISPATCH_MAP(CUpFileActiveXCtrl, COleControl)
DISP_PROPERTY_NOTIFY_ID(CUpFileActiveXCtrl, "strCurUpFolder", dispidstrCurUpFolder, m_strCurUpFolder, OnstrCurUpFolderChanged, VT_BSTR)
END_DISPATCH_MAP()
c) 修改DoPropExchange函数
void CUpFileActiveXCtrl::DoPropExchange(CPropExchange* pPX){
PX_String(pPX,_T("strCurUpFolder"),m_strCurUpFolder); //增加这一行
}
d) 修改Dialog的创建函数
找到需要显示的Dialog创建函数,给Dialog中对应的属性设置值。
m_upfileDialog.SetCurUpFolder( this->m_strCurUpFolder );