找回密码 注册 QQ登录
一站式解决方案

iCAx开思网

CAD/CAM/CAE/设计/模具 高清视频【积分说明】如何快速获得积分?快速3D打印 手板模型CNC加工服务在线3D打印服务,上传模型,自动报价
查看: 17818|回复: 5
打印 上一主题 下一主题

UG 请教如何向一个生成的对话框里输入初始数值(不是常量,是一个变量)

[复制链接]
跳转到指定楼层
1
发表于 2005-11-27 14:24:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多同行朋友,交流,分享,学习。

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

x
小弟我也做二次开发,碰到了一个相。。。当头疼的问题,问题如下:

我的思路是这样的

在app.cpp里面的Application函数中,先用UF_UI_select_with_single_dialog选择一个面,

然后通过相关函数获得了一些所选择面的数据,然后又从这些数据计算出一个值,

定义为 double sphere_diam(球的直径),这时候,我想调用一个ug对话框(已建成),

询问用户是否需要对这个值做出更改,并把sphere_diam(球的直径)的值做为对话框中

实数输入栏的初始值,该怎么做啊??


UF_STYLER_create_dialog函数也在app.cpp里面的Application函数中,

它的回调函数我放在了ask_diam.cpp中。


int ask_diam_const_cb ( int dialog_id,
             void * client_data,
             UF_STYLER_item_value_type_p_t callback_data)
{
             if ( UF_initialize() != 0)
          return ( UF_UI_CB_CONTINUE_DIALOG );

        UF_STYLER_item_value_type_t set_data;

        set_data.item_attr=UF_STYLER_VALUE;
        set_data.item_id=HOLE_ASK_DIAM;
        set_data.value.real=sphere_diam;                       //SPHERE_DIAM在这里!!

        UF_CALL(UF_STYLER_set_value(dialog_id,&set_data));
         
        char set_data_check[133];
        sprintf(set_data_check,"select set value is:%f\nsphere_diam=%f",
                set_data.value.real,sphere_diam);
                MessageBox(NULL,set_data_check,
                                "set_value",MB_OK|MB_ICONWARNING|MB_SYSTEMMODAL);


  
     UF_terminate ();

       return (UF_UI_CB_CONTINUE_DIALOG);
   
}

请看上面的代码,我本想在construction回调函数中将sphere_diam的值赋给set_data.value.real,

可是在ask_diam.cpp中是根本就不认sphere_diam的,就是说它没有定义,

编译提示错误:error C2065: sphere_diam : undeclared identifier




请问各位大侠:我应该怎么样,在什么地方定义sphere_diam,才可以即能在app.cpp中修改它的值,

并且在ask_diam.cpp中可以正确的调用它的值啊??????????

ToT

救命啊。。。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 赞一下!赞一下!
2
发表于 2005-11-27 21:48:38 | 只看该作者
你没有定义sphere_diam,在const函数里面用它自然会有这个错误提示啊提示啊。这种不在同一个对话框中的值传递我正常是设个全局变量的!
3
发表于 2005-11-28 13:11:24 | 只看该作者
为什么不在当前的对话框中选择,非要选择之后传进来呢?
4
发表于 2005-12-1 17:47:08 | 只看该作者

我的建议

把sphere_diam定义成extern的,(在两个CPP中都要定义成这样)的
5
发表于 2005-12-1 18:52:06 | 只看该作者
UF_STYLER_create_dialog
(
    char * dialog_file,
    UF_STYLER_callback_info_p_t cbs,
    int number_of_cbs,
    void* client_data,
    int* response
)
中的client_data就是用来在不同对话框中传递变量滴。你在你的UF_STYLER_create_dialog的时候把你的那个sphere_diam 的地址转换成(void *) 传进去,在新创建的对话框里就可以到处用它了。

ask_diam_const_cb ( int dialog_id,
             void * client_data,
             UF_STYLER_item_value_type_p_t callback_data)
看到你的constructor cb里面的client_ data了吗,就是你刚才传进去给对话框的东东,你再把它强制类型转换为double 就OK了。
6
发表于 2005-12-3 21:01:58 | 只看该作者
谢谢楼上的各位!!

我搞定了,设置了全局变量,说来不怕大伙笑话,原来我是不会定义全局变量。。

在多文件程序中声明外部变量:《c程序设计(第二版)》,谭浩强,p177

如果一个程序包含两个文件,在两个文件中都要用到一个外部变量Num,不能分别在两个文件中各自定义一个外部变量Num,否则在进行程序的连接时会出现“重复定义”的错误。正确的做法是:在任一个文件中定义外部变量Num,而在另一文件中用extern 对Num做“外部变量声明”。即:
extern Num;

例:

file1。cpp

int Num;
。。。。。。

file2。cpp

extern int Num;
。。。。。。。

呵呵,大家也学到了吧。。。-_^

还要请教一下,void * client_data也可以把数据从回调函数中传回来吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3D打印手板模型快速制作服务,在线报价下单!

QQ 咨询|手机版|联系我们|iCAx开思网  

GMT+8, 2024-12-27 17:18 , Processed in 0.035748 second(s), 12 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2024 www.iCAx.org

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