1.按照微软的例子,发现com的dll无法再ie中显示
Adding a Control (ATL Tutorial, Part 2) | Microsoft Docsy
可以自己做一个dlg程序,再dlg中insert activex,选择web browser
然后打开rc文件,可以看到
IDD_TESTPOLYCTL_DIALOG DIALOGEX 0, 0, 320, 200
STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
EXSTYLE WS_EX_APPWINDOW
FONT 9, "MS Shell Dlg", 0, 0, 0x1
BEGIN
DEFPUSHBUTTON "确定",IDOK,209,179,50,14
PUSHBUTTON "取消",IDCANCEL,263,179,50,14
CONTROL "",IDC_EXPLORER1,"{8856F961-340A-11D0-A96B-00C04FD705A2}",WS_TABSTOP,0,0,60,25
END
ICD_EXPLORER1的空间,把红色部分的clsid换成自己的com的id就可以了。
编译后运行
2.按照第三步,右键添加Property,之后要求手动在idl中替换如下:
From Solution Explorer, open Polygon.idl and replace the following lines at the end of the IPolyCtl : IDispatch
interface:
short get_Sides();
void set_Sides(short value);
with
[propget, id(1), helpstring("property Sides")] HRESULT Sides([out, retval] short *pVal);
[propput, id(1), helpstring("property Sides")] HRESULT Sides([in] short newVal);
实际上short get_sides等可能根本就不存在,不过,可以手动添加如上第二段的内容。
这些就让人困惑,那个右键添加property的作用是什么?
3.在第5步骤中你需要添加鼠标事件,可是这里空空如也,
Adding an Event (ATL Tutorial, Part 5) | Microsoft Docs
不过也没有关系,你可以手动添加你自己的事件。
在如下位置添加黑体的一行代码即可
BEGIN_MSG_MAP(CPolyCtl)
CHAIN_MSG_MAP(CComControl<CPolyCtl>)
MESSAGE_HANDLER(WM_LBUTTONDOWN, OnLButtonDown)
DEFAULT_REFLECTION_HANDLER()
END_MSG_MAP()
其他参考: