找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 461|回复: 3

帮我看一下,为什么第二次运行程序才正常?(可能与VC有关)

[复制链接]
发表于 2003-3-8 13:27:55 | 显示全部楼层 |阅读模式

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

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

×
我做了个对话框,其中有一个复合框控件,列出图中所有的图层,从中选出喷头所在的图层。m_HeadLayer是对话框的公有变量
void DataInputDLG::OnDropdownHeadlaylist()
{
CComboBox* pLB=(CComboBox*)GetDlgItem(IDC_HEADLAYLIST);
        int nSelect=pLB->GetCurSel();
        m_HeadLayer=pLB->SetCurSel(nSelect);
}

然后我设置一个全局变量CString strHeadLayer;用来接受m_HeadLayer

void CreateDataInputDlg()
{
DataInputDLG MainDlg(CWnd::FromHandle(adsw_acadMainWnd()));
int nReturnValue=MainDlg.DoModal();//addon
strHeadLayer=MainDlg.m_HeadLayer;
}

最后读取喷头,将圆心变换后在圆心插入喷头图块
void DrawSprHead(ads_point basePt)
{
        struct resbuf sprhead;
        char sbuf1[10];
        ads_name namesprhead;
        sprhead.restype=8;
        strcpy(sbuf1,strHeadLayer);
        sprhead.resval.rstring=sbuf1;
        sprhead.rbnext=NULL;
        acedSSGet("x",NULL,NULL,&sprhead,namesprhead);
        ads_name headent;
        long nHeadNum=0;
        long nHeadSelect;
        acedSSLength(namesprhead,&nHeadSelect);
        while (nHeadNum<nHeadSelect)
        {acedSSName(namesprhead,nHeadNum,headent);
        projectHead(basePt,headent);
        nHeadNum++;
        }
        acedSSFree(namesprhead);
}

问题是:我第一次运行时,尽管在复合控件中选择了图层,strHeadLayer的值还是没有,需要我再运行一次才会正常。我想问题的原因可能在全局变量和VC的对话框上,可是怎么解决呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-3-8 19:48:44 | 显示全部楼层
应该是复合框控件的事件不对!检查int nSelect=pLB->GetCurSel();返回对不对
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-3-8 20:17:19 | 显示全部楼层

Re: 帮我看一下,为什么第二次运行程序才正常?(可能与VC有关)

最初由 cedarzhou 发布
[B]我做了个对话框,其中有一个复合框控件,列出图中所有的图层,从中选出喷头所在的图层。m_HeadLayer是对话框的公有变量
void DataInputDLG::OnDropdownHeadlaylist()
{
CComboBox* pLB=(CComboBox*)GetDlgItem(I... [/B]

你不应该在Dropdown(CBN_DROPDOWN)事件中来取ComboBox的当前选择(刚刚下拉,还没有改变选择),应该在 SelChange(CBN_SELCHANGE)中做(已经更改选择),或者在对话框的OnOK中做.

你甚至犯不着写代码来取ComboBox的当前选择, 在ClassWizard中直接给IDC_HEADLAYLIST绑定一个名为m_HeadLayer的变量即可(利用DDX机制)

另: 我看不懂,
m_HeadLayer的类型是什么? m_HeadLayer=pLB->SetCurSel(nSelect);表明是int, 而strHeadLayer=MainDlg.m_HeadLayer表明它是CString
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-3-8 21:14:30 | 显示全部楼层
谢谢,我去看看!哎,我苦恼了好久呢~~

啊,终于解决了
先把OnDropdownHeadlaylist() 函数删除了,CreateDataInputDlg()中的strHeadLayer=MainDlg.m_HeadLayer一句去掉,在void DataInputDLG::OnOK() 中加上UpdateDataTRUE);strHeadLayer=m_HeadLayer;
就可以了
谢谢BINBIN~~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-20 20:49 , Processed in 0.193120 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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