- 积分
- 314
- 明经币
- 个
- 注册时间
- 2004-4-19
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
楼主 |
发表于 2004-4-22 17:17:00
|
显示全部楼层
感谢byry(pepsi)的帮助,以下方案是在他的帮助下完成的,下列关键代码也是他写的,我只是稍微改了改,现在我总结一下,贴出来. 关于模式对话框按钮调用外部命令的总结: 首先,我创建了一个新的ObjectArx工程"OuterCommandTest",在里面插入了一个对话框,其ID是"IDD_DIALOG1",并由此生成了一个新类"CTestDlg",由于此类要与资源"IDD_DIALOG1"联系,在文件"TestDlg.h"开头的地方还要加上"#include "resource.h""这句话. 然后,在对话框中添加一个按钮"IDC_BUTTON1",并生成函数"void CTestDlg::OnButton1() ",在函数中添加调用CAD外部命令的语句,函数如下: void CTestDlg::OnButton1() { // TODO: Add your control notification handler code here acedCommand(RTSTR,"_DDINSERT",0);// Call Cad Outer Command } 然后,转到函数"void InitApplication()"所在的文件"outercommandtest.cpp"中,在开头部分改写如下: //HINSTANCE _hdllInstance =NULL ;//这句话取消,因为下面要做个新的 再添加下面三句: HWND adsw_acadMainWnd(); HINSTANCE _hdllInstance; extern "C" BOOL APIENTRY DllMain(HINSTANCE, DWORD, LPVOID);
再添加下面两个函数: void InitMFC() { DllMain(_hdllInstance, DLL_PROCESS_ATTACH, NULL); hWndACAD = adsw_acadMainWnd(); }
void EndMFC() { DllMain(_hdllInstance, DLL_PROCESS_DETACH, NULL); }
然后让InitApplication()调用函数InitMFC(),UnloadApplication()调用EndMFC().
处理完毕后,在"StdAfx.h"和"StdAfx.cpp"中创建全局变量hWndACAD,这样做使文件"outercommandtest.cpp"和"outercommandtestcommands.cpp"中的函数都可以调用它了. 创建代码: extern HWND hWndACAD;//"StdAfx.h" HWND hWndACAD = NULL;//"StdAfx.cpp"
最后,用ObjectArx工具条创建一个新的命令函数"test",实现如下: void test() { CTestDlg dlg(CWnd::FromHandle(hWndACAD)); dlg.DoModal(); } 这样,就实现了byry(pepsi)说的"得到当前AUTOCAD窗口的句柄hWndACAD,通过这个句柄我们才能创建一个对话框:C***Dlg Dlg(CWnd::FromHandle(hWndACAD)),这样才能实现与CAD窗口的通信"了.
然后起动程序,用命令"TEST"调用对话框,点击按钮"TEST",就可以看到acedCommand(RTSTR,"_DDINSERT",0);调出来的对话框了.
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
x
评分
-
参与人数 1 | 威望 +1 |
金钱 +2 |
贡献 +2 |
收起
理由
|
zfbj
| + 1 |
+ 2 |
+ 2 |
【好评】好文章希望继续努力 |
查看全部评分
|