找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 504|回复: 4

[求助]:arx中mfc定义成员变量的一点问题?

[复制链接]
发表于 2005-3-26 14:55:00 | 显示全部楼层 |阅读模式

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

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

×
在arx中用mfc时,在定义类的成员变量是否和光在mfc中定义有什么不同?
如我在只用到mfc时,在同一个类中定义了一个变量
例:
我click button1
{//给以个成员变量赋值/abc=100;/abc为我定义的成员变量}
我在其它的同一个类中的成员函数中是可以调用的,如我可以用abc=100进行以后的计算。这点我已经做过的。

但是在arx中,我这样做却不行/不知道为什么?
是不是要按照那arx里面mfc的方法定义成员变量?还是其它什么原因?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-3-27 17:32:23 | 显示全部楼层
还是多看看C++的书吧,不管是在MFC中还是在ARX中,C++的语法总是一样的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-28 10:27:38 | 显示全部楼层
我也知道是一样的/
但是还是有问题。
贴出原代码看看/
// msf.cpp : implementation file
//

#include "StdAfx.h"
#include "resource.h"
#include "msf.h"
#include <math.h>
#include "StdAfx.h"
#include "dbapserv.h"
#include "geassign.h "
#include "dbents.h"
#include "migrtion.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

static const double PI=3.14159265358979;
extern HWND adsw_acadMainWnd();
extern "C" HINSTANCE _hdllInstance;
static HWND hWndACAD = NULL;
extern "C" BOOL APIENTRY DllMain(HINSTANCE, DWORD, LPVOID);

double ry(double a,double r,double n);
double rx(double a,double r,double n);          //求内移外移
double yy(double a,double r,double n);
double xx(double a,double r,double n);         //求XY
double yyy(double a,double r,double n);
double xxx(double a,double r,double n);         //求XY/100

double xxu(double xx0,double k,double r);
//double xxd(double xx1,double k,double r);
double yyu(double yy0,double k,double r);
//double yyd(double yy1,double k,double r);      
//double re(double k);
double tts(double x0,double y0,double x1,double y1,double l0,double l1);
double ttn(double x0,double y0,double x1,double y1,double l0,double l1);
void makeLine(AcGePoint3d st,AcGePoint3d et);
void makeLine(double x1,double y1,double z1,double x2,double y2,double z2);
void makeCircle(double x1,double y1,double z1,double radius);
void makeLineC(double x1,double y1,double z1,double x2,double y2,double z2, Adesk::UInt16 newColor);
void makeCircleC(double x1,double y1,double z1,double radius, Adesk::UInt16 newColor);
AcDbObject* selectObject(char* selePrompt,char* pHandle,AcDb::OpenMode openMode,AcGePoint3d &pnt3d);
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// msf dialog


msf::msf(CWnd* pParent /*=NULL*/)
        : CDialog(msf::IDD, pParent)
{
        //{{AFX_DATA_INIT(msf)
        m_yy = 0.0;
        //}}AFX_DATA_INIT
}


void msf::DoDataExchange(CDataExchange* pDX)
{
        CDialog::DoDataExchange(pDX);
        //{{AFX_DATA_MAP(msf)
        DDX_Text(pDX, IDC_EDIT2, m_yy);
        //}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(msf, CDialog)
        //{{AFX_MSG_MAP(msf)
        ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
        ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
        ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
        ON_BN_CLICKED(IDC_BUTTON4, OnButton4)
        ON_BN_CLICKED(IDC_BUTTON5, OnButton5)
        //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// msf message handlers

void msf::OnButton1() //选一实体直线,赋起点终点坐标/
{
        // TODO: Add your control notification handler code here
        // TODO: Add your control notification handler code here
                EndDialog(IDC_BUTTON1);
   
        // TODO: Add your control notification handler code here
                AcDbObject *pObj2;
        AcGePoint3d  pickPoint2,st,ed;

        if ((pObj2 = selectObject("\n请选择一条直线:",NULL,AcDb::kForRead,pickPoint2)) == NULL)
        {return ;}
    if(!(pObj2->isKindOf(AcDbLine::desc())))
        {return ;}

    //if ((pObj1 = selectObject("请选择第一条直线:",NULL,AcDb::kForRead,pickPoint1)) != NULL)
        else
        {
                AcDbLine *pLine2=(AcDbLine*)pObj2;
                st=pLine2->startPoint();
                ed=pLine2->endPoint();
                //acutPrintf(st[X],st[Y],st[Z],ed[X],ed[Y],ed[Z]);
                 acutPrintf("\n(%0.4f,%0.4f,%0.4f)"//此处没有逗号
                           "    ""(%0.4f,%0.4f,%0.4f)",
                         st[X],st[Y],st[Z],
                         ed[X],ed[Y],ed[Z]);
                 lsx0=st[X];lsy0=st[Y];
                 lex1=ed[X];ley1=ed[Y];
                 acutPrintf("\n(%0.3f,%0.3f,%0.3f)"//此处没有逗号
                           "    ""(%0.3f,%0.3f,%0.3f)",
                         lsx0,lsy0,st[Z],
                         lex1,ley1,ed[Z]);
                 
        }
        msf msf(CWnd::FromHandle(hWndACAD));
        msf.DoModal();
}

void msf::OnButton2() //选一实体园,赋圆心坐标和半径
{
        // TODO: Add your control notification handler code here
        // TODO: Add your control notification handler code here
                EndDialog(IDC_BUTTON2);
        // TODO: Add your control notification handler code here
        AcDbObject *pObj3;
        AcGePoint3d  pickPoint3,ce;
       
        double r;
        if ((pObj3 = selectObject("\n请选择一个圆:",NULL,AcDb::kForRead,pickPoint3)) == NULL)
        {return ;}
    if(!(pObj3->isKindOf(AcDbCircle::desc())))
        {return ;}

    //if ((pObj1 = selectObject("请选择第一条直线:",NULL,AcDb::kForRead,pickPoint1)) != NULL)
        else
        {
                AcDbCircle *pCir3=(AcDbCircle*)pObj3;
                ce=pCir3->center();
                r=pCir3->radius();
                //acutPrintf(st[X],st[Y],st[Z],ed[X],ed[Y],ed[Z]);
                 acutPrintf("\n(%0.4f,%0.4f,%0.f)"//此处没有逗号
                         "\n(%0.3f)",
                         ce[X],ce[Y],ce[Z],
                         r);
                 cx2=ce[X];cy2=ce[Y];
                 rr1=r;
                  acutPrintf("\n(%0.4f,%0.4f,%0.f)"//此处没有逗号
                         "\n(%0.3f)",
                         cx2,cy2,ce[Z],
                         rr1);
                  /*        m_lsx0 =lsx0;
                                        UpdateData(false);
                                m_lsy0 =lsy0;
                                        UpdateData(false);
                                m_lex1 =lex1;
                                        UpdateData(false);
                                m_ley1 =ley1;
                                        UpdateData(false);
                         m_yy=lsy0;
                UpdateData(false);*/
        }
        msf msf(CWnd::FromHandle(hWndACAD));
        msf.DoModal();
}

void msf::OnButton3() //选择一个实体园,赋radius给rr2
{
        // TODO: Add your control notification handler code here
        EndDialog(IDC_BUTTON3);
        // TODO: Add your control notification handler code here
        AcDbObject *pObj4;
        AcGePoint3d  pickPoint4,ce;
       
        double r;
        if ((pObj4 = selectObject("\n请选择一个圆:",NULL,AcDb::kForRead,pickPoint4)) == NULL)
        {return ;}
    if(!(pObj4->isKindOf(AcDbCircle::desc())))
        {return ;}

    //if ((pObj1 = selectObject("请选择第一条直线:",NULL,AcDb::kForRead,pickPoint1)) != NULL)
        else
        {
                AcDbCircle *pCir4=(AcDbCircle*)pObj4;
                ce=pCir4->center();
                r=pCir4->radius();
                //acutPrintf(st[X],st[Y],st[Z],ed[X],ed[Y],ed[Z]);
                 acutPrintf("\n(%0.4f,%0.4f,%0.f)"//此处没有逗号
                         "\n(%0.3f)",
                         ce[X],ce[Y],ce[Z],
                         r);
             rr2=r;
                 acutPrintf("\n(%0.4f,%0.4f,%0.f)"//此处没有逗号
                         "\n(%0.3f)",
                         ce[X],ce[Y],ce[Z],
                         rr2);
                        /*         m_cx2 =cx2;
                                        UpdateData(false);
                                m_cy2 =cy2;
                                        UpdateData(false);
                                                m_rr1 =rr1;
                                        UpdateData(false);
                         m_rr2 =rr2;
                                        UpdateData(false);
*/
        }
        msf msf(CWnd::FromHandle(hWndACAD));
        msf.DoModal();
}

void msf::OnButton4()
{
        // TODO: Add your control notification handler code here
       
}

void msf::OnButton5() //我在这里调用却给不出我选的实体的一些值??????????????/
{
        // TODO: Add your control notification handler code here
        m_yy=rr1;
                UpdateData(false);
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-3-29 09:24:18 | 显示全部楼层
几乎在你的每一个Button事件里都有如下两句话:
msf msf(CWnd::FromHandle(hWndACAD));
msf.DoModal();

不知道你为什么要这样做,我估计你是想把隐藏的窗体显示出来,但实际上你的这两句话是产生一个新的窗体,在新的窗体中所有的成员变量都被初始化为默认值了,在新显示的窗体中所进行的所有操作都跟原来窗体无关了,当然是的不到原来的那些值了,不知道我说清楚了没有。
几乎在你的每一个Button事件里都有如下一句话
EndDialog(IDC_BUTTON3);
这句话是用来终止一个模态对话框的,里面的参数IDC_BUTTON3将作为返回值返回,估计你用的也是模态对话框,在CAD交互式操作中最好用非模态对话框,当然非要用模态对话框也是可以的。当要交互式选择实体时,调用ShowWindow(SW_HIDE);隐藏窗体,选择完了以后再调用
ShowWindow(SW_SHOW);来显示窗体,这样就能正确传递参数了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-4-5 14:11:31 | 显示全部楼层
楼上的,关于模态和非模态对话框的论述,对我很有帮助,谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 12:33 , Processed in 0.195136 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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