iCAx开思工具箱

标题: UG 请教如何向一个生成的对话框里输入初始数值(不是常量,是一个变量) [打印本页]

作者: 陈雷    时间: 2005-11-27 14:24
标题: UG 请教如何向一个生成的对话框里输入初始数值(不是常量,是一个变量)
小弟我也做二次开发,碰到了一个相。。。当头疼的问题,问题如下:

我的思路是这样的

在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

救命啊。。。
作者: breezezhu    时间: 2005-11-27 21:48
你没有定义sphere_diam,在const函数里面用它自然会有这个错误提示啊提示啊。这种不在同一个对话框中的值传递我正常是设个全局变量的!
作者: zzz    时间: 2005-11-28 13:11
为什么不在当前的对话框中选择,非要选择之后传进来呢?
作者: jchen2004    时间: 2005-12-1 17:47
标题: 我的建议
把sphere_diam定义成extern的,(在两个CPP中都要定义成这样)的
作者: supergirl    时间: 2005-12-1 18:52
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了。
作者: 陈雷    时间: 2005-12-3 21:01
谢谢楼上的各位!!

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

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

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

例:

file1。cpp

int Num;
。。。。。。

file2。cpp

extern int Num;
。。。。。。。

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

还要请教一下,void * client_data也可以把数据从回调函数中传回来吗?




欢迎光临 iCAx开思工具箱 (https://t.icax.org/) Powered by Discuz! X3.3