用SDK玩转ActiveX
2006-04-11 22:54:07 来源:WEB开发网现在你可以编译链接这段代码了。在编译链接完成之后,你就可以在工程目录下的Debug或Release目录下(取决于你的工程设置)发现名为agentctl.tlh和agentctl.tli的两个文件。你可以用文本方式打开它们看看,你会发现agentctl.tlh中是agentctl.dll类型库中各接口的C/C++支持以及各接口的智能指针定义;至于agentctl.tli之中,则是一些更有趣的东西,在这里我就不多介绍了。
使用ActiveX
骨架完成后,就可以使用Agent这个ActiveX控件了。不过在使用之前,你需要把你曾经用来显示对话框的代码写成类似下面这个样子:
g_hDlgMain = AtlAxCreateDialog( hInstance, MAKEINTRESOURCE( IDD_MAIN_DLG ), NULL, (DLGPROC)MainDlgProc, 0 );
对于这行代码我需要解释三点。第一,由于我们的对话框中含有ActiveX控件,所以不能使用普通的CreateDialog;第二,g_hDlgMain是一个全局变量,我需要在另一个类中使用它;第三,由于我们需要显示Agent助手而不显示对话框,所以在此使用了无模式对话框——这样就可以创建一个不可见的对话框了。
现在可以在对话框的回调函数中使用ActiveX控件了。以Agent控件为例,通常使用ActiveX是类似这个样子:
CAxWindow wndAgent = GetDlgItem( hDlg, IDC_AGENT );
IAgentCtlExPtr pAgent; // IAgentCtlExPtr的定义来自于agentctl.tlh
HRESULT hr = wndAgent.QueryControl( __uuidof( IAgentCtlEx ), ( LPVOID * )&pAgent );
然后,就可以利用pAgent指针对Agent控件进行操作了。你可以在对话框回调函数中的WM_INITDIALOG中加入下面的代码来测试效果:
更多精彩
赞助商链接