找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 637|回复: 6

[求助]:R14中如何实现AdUi相关功能。。。

[复制链接]
发表于 2003-8-14 16:53:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
如下图所示,我想在如下图所示的对话框中实现如下功能:当按下“X轴”或者“Y轴”按钮的时候,对话框隐藏起来(切换到CAD),当在CAD中取得X轴或者Y轴的转角之后,对话框出现(切换回对话框)......

此一功能在2000中可以从AdUiDialog派生对话框来实现,但在R14中如何实现呢? 请高手指点。。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-8-14 21:41:19 | 显示全部楼层

Re: [求助]:[求助]:R14中如何实现AdUi相关功能。。。

最初由 Echoyin 发布
[B]如下图所示,我想在如下图所示的对话框中实现如下功能:当按下“X轴”或者“Y轴”按钮的时候,对话框隐藏起来(切换到CAD),当在CAD中取得X轴或者Y轴的转角之后,对话框出现(切换回对话框)......

此一功能在20... [/B]


你可以直接Hide/Show该对话框来达到目的.

  1. {
  2.    //...
  3.     ShowWindow(SW_HIDE);
  4.     //在CAD中取得X轴或者Y轴的转角
  5.     ShowWindow(SW_SHOW);
  6. }
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-8-15 09:14:20 | 显示全部楼层
...
斑竹。这个不行,我用过的,消息句柄切换不回来的。
目前我想到的一个比较笨的办法是:先把窗口关闭,然后进入CAD操作,把操作数据存储到中间文件,最后调出窗口,取回数据。
。。。
期待着有高手能指点指点好的方法。。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-8-15 15:35:46 | 显示全部楼层
最初由 Echoyin 发布
[B]...
斑竹。这个不行,我用过的,消息句柄切换不回来的。
目前我想到的一个比较笨的办法是:先把窗口关闭,然后进入CAD操作,把操作数据存储到中间文件,最后调出窗口,取回数据。
。。。
期待着有高手能指点指点... [/B]


呵呵,我没有说完整。
我猜想用以下的办法应该可以

  1.     GetParent()->EnableWindow(TRUE) ; //如果你的Dlg的Parent不是Acad主窗口, 在2000中可用acedGetAcadFrame()来替代GetParent(),r14我想可用 CWnd::FromHandle(adsw_acadMainWnd()) 代替。
  2.     ShowWindow(SW_HIDE) ;
  3.     GetParent()->SetFocus() ;

  4.    //在CAD中取得X轴或者Y轴的转角

  5.     ShowWindow(SW_SHOW) ;
  6.     SetFocus() ;
  7.     GetParent()->EnableWindow(FALSE) ;  
  8.     EnableWindow(TRUE) ;
复制代码


未经测试!我没有在R14下的开发经验。
如果成了,请回话
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-8-15 16:19:27 | 显示全部楼层
谢谢先~  :)
1.R14里面有acedGetAcadFrame()的。
2.我以前用过的大致和你的差不多(刚才你的也用过了),不行的  :(
在CAD中调用了由CDialog派生的对话框DoModal()后,消息都被它截获了。。。。(无模对话框在此处弊端更多,暂不用)

在2000里面可以由CAdUiDialog派生的对话框来解决这个问题。。。但在14中呢。。。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-8-15 21:05:34 | 显示全部楼层
兄弟,我刚才在R15下测试了一下,可以啊。没有用BeginEditorCommand()等等

你是如何取X轴或者Y轴的转角?

  1. // TestDlg.h
  2. #if !defined(AFX_TESTDLG_H__FB118CF7_17FF_44DB_B58A_1F4917D2A1A2__INCLUDED_)
  3. #define AFX_TESTDLG_H__FB118CF7_17FF_44DB_B58A_1F4917D2A1A2__INCLUDED_

  4. #if _MSC_VER > 1000
  5. #pragma once
  6. #endif // _MSC_VER > 1000
  7. // TestDlg.h : header file
  8. //

  9. /////////////////////////////////////////////////////////////////////////////
  10. // CTestDlg dialog

  11. class CTestDlg : public CDialog //派生自CDialog, 不是CAcUiDialog/CAdUiDialog
  12. {
  13. // Construction
  14. public:
  15.         CTestDlg(CWnd* pParent = NULL);   // standard constructor

  16. // Dialog Data
  17.         //{{AFX_DATA(CTestDlg)
  18.         enum { IDD = IDD_DIALOG1 };
  19.         CString        m_strPoint;
  20.         //}}AFX_DATA


  21. // Overrides
  22.         // ClassWizard generated virtual function overrides
  23.         //{{AFX_VIRTUAL(CTestDlg)
  24.         protected:
  25.         virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  26.         //}}AFX_VIRTUAL

  27. // Implementation
  28. protected:

  29.         // Generated message map functions
  30.         //{{AFX_MSG(CTestDlg)
  31.         afx_msg void OnButton1();
  32.         //}}AFX_MSG
  33.         DECLARE_MESSAGE_MAP()
  34. };

  35. //{{AFX_INSERT_LOCATION}}
  36. // Microsoft Visual C++ will insert additional declarations immediately before the previous line.

  37. #endif // !defined(AFX_TESTDLG_H__FB118CF7_17FF_44DB_B58A_1F4917D2A1A2__INCLUDED_)
复制代码

  1. // TestDlg.cpp : implementation file
  2. //

  3. #include "StdAfx.h"
  4. #include "resource.h"
  5. #include "TestDlg.h"

  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif

  11. /////////////////////////////////////////////////////////////////////////////
  12. // CTestDlg dialog


  13. CTestDlg::CTestDlg(CWnd* pParent /*=NULL*/)
  14.         : CDialog(CTestDlg::IDD, pParent)
  15. {
  16.     //{{AFX_DATA_INIT(CTestDlg)
  17.     m_strPoint = _T("");
  18.     //}}AFX_DATA_INIT
  19. }


  20. void CTestDlg::DoDataExchange(CDataExchange* pDX)
  21. {
  22.     CDialog::DoDataExchange(pDX);
  23.     //{{AFX_DATA_MAP(CTestDlg)
  24.     DDX_Text(pDX, IDC_EDIT1, m_strPoint);
  25.     //}}AFX_DATA_MAP
  26. }


  27. BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
  28.     //{{AFX_MSG_MAP(CTestDlg)
  29.     ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
  30.     //}}AFX_MSG_MAP
  31. END_MESSAGE_MAP()

  32. /////////////////////////////////////////////////////////////////////////////
  33. // CTestDlg message handlers

  34. void CTestDlg::OnButton1()
  35. {
  36.     // TODO: Add your control notification handler code here
  37.     //ShowWindow(SW_HIDE);
  38.     GetParent()->EnableWindow(TRUE);
  39.     ShowWindow(SW_HIDE);
  40.     GetParent()->SetFocus();

  41.     ads_point pt;

  42.     // Get a point
  43.     int rt = acedGetPoint(NULL, "\nPick a point: ", pt);
  44.     GetParent()->EnableWindow(TRUE);
  45.     ShowWindow(SW_SHOW);
  46.     SetFocus();
  47.     GetParent()->EnableWindow(FALSE);  
  48.     EnableWindow(TRUE);

  49.     if (rt == RTNORM) {
  50.         m_strPoint.Format("X: %g , Y: %g , Z: %g", pt[X], pt[Y], pt[Z]);
  51.         UpdateData(FALSE);
  52.     }
  53. }
复制代码


  1. // TestCommands.CPP
  2. // ObjectARX defined commands, created by Rave [2003-8-15], GIS, WillingTime co.

  3. #include "StdAfx.h"
  4. #include "StdArx.h"
  5. #include "resource.h"
  6. #include "testdlg.h"

  7. //-----------------------------------------------------------------------------
  8. // This is command 'TEST, by Rave [2003-8-15], GIS, WillingTime co.
  9. void _RV_test()
  10. {
  11. #ifdef OARXWIZDEBUG
  12.     acutPrintf ("\nOARXWIZDEBUG - _RV_test() called.");
  13. #endif // OARXWIZDEBUG

  14.     // TODO: Implement the command
  15.     CAcModuleResourceOverride resOverride;
  16.     CTestDlg dlg(acedGetAcadFrame());
  17.     dlg.DoModal();
  18. }
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-8-20 09:27:13 | 显示全部楼层
非常感谢斑竹老兄,你的方法是可行的,在R14下面也没有问题。谢谢了~
以下是2种不同的方法。

  1.   [FONT=courier new]
  2.         //方法一:
  3.         SaveFile();
  4.         m_IniTool.WriteFile();

  5.         CDialog::OnOK();
  6.         //取得X轴转角
  7.         ads_point stPt,enPt;
  8.        
  9.         AcGeVector2d vec;
  10.         int retCode = ads_getpoint(NULL,"\n请选择起点:",stPt);
  11.         if(retCode != RTNORM)  return;

  12.         retCode = ads_getpoint(stPt,"\n请选择终点:",enPt);
  13.         if(retCode != RTNORM)  return;

  14.         vec = asPnt2d(enPt) - asPnt2d(stPt);
  15.         double dAngle = vec.angle();

  16.        
  17.         m_IniTool.SetValue("轴网转角","X轴",dAngle*180/PI);

  18.         CGXJCPouDlg dlg;
  19.         dlg.DoModal();
  20.        
  21.         //方法二:
  22.         GetParent()->EnableWindow(TRUE);
  23.                      ShowWindow(SW_HIDE);
  24.                      GetParent()->SetFocus();

  25.         //取得X轴转角
  26.         ads_point stPt,enPt;
  27.        
  28.         AcGeVector2d vec;
  29.         int retCode = ads_getpoint(NULL,"\n请选择起点:",stPt);
  30.         if(retCode != RTNORM)  return;

  31.         retCode = ads_getpoint(stPt,"\n请选择终点:",enPt);
  32.         if(retCode != RTNORM)  return;

  33.         vec = asPnt2d(enPt) - asPnt2d(stPt);
  34.         double dAngle = vec.angle();
  35.        
  36.         m_edtX = int(dAngle*180/PI);

  37.                      GetParent()->EnableWindow(TRUE);
  38.                      ShowWindow(SW_SHOW);
  39.                      SetFocus();
  40.                      GetParent()->EnableWindow(FALSE);  
  41.                      EnableWindow(TRUE);
  42.         UpdateData(false);

  43.   [/FONT]
复制代码

        在R14中一般情况下:方法一比方法二麻烦很多(要自己写中间交换文件),不过我这个项目里面恰好要求保存数据,所以两种方法的代码量差不多,不过推荐用第二种方法。
    ~  当然,如果在2000及其以上版本中,可以直接由CAdUiDialog来派生Dialog,实现起来就更简单了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-21 06:03 , Processed in 0.188511 second(s), 45 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表