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