iCAx开思工具箱

标题: UG中MENUOPTION的初始化问题 [打印本页]

作者: lcfq    时间: 2003-4-2 16:12
标题: UG中MENUOPTION的初始化问题
我设计了一个对话框,意图是:根据MENUOPTION1中的index来动态地设置MENUOPTION2中显示的内容。在编译时提示MENUOPTION2中的strings没有初始化。请教各位高手该如何解决?程序如下:
int TYPE_dalei_index_cb ( int dialog_id,
             void * client_data,
             UF_STYLER_item_value_type_p_t callback_data)
{
  UF_STYLER_item_value_type_t item1_data,item2_data;
  int index;
  char xiaolei_opt[6][20]={"a1","a2","a3","a4","a5","a6"};
  int row_num;
  row_num=2;
     /* Make sure User Function is available. */   
     if ( UF_initialize() != 0)  
          return ( UF_UI_CB_CONTINUE_DIALOG );
  
     /* ---- Enter your callback code here ----- */
  
   //get the index of the dalei option menu.
   item1_data.item_attr=UF_STYLER_VALUE;
   item1_data.item_id=TYPE_DALEI_OPTION;
   item1_data.indicator=UF_STYLER_INTEGER_VALUE;
   UF_STYLER_ask_value(dialog_id, [$item1_data)]
   index=item1_data.value.integer;
  
   //according to the index value to change the text of the xiaolei option menu.
   //item2_data.indicator=UF_STYLER_STRING_PTR_VALUE;
  
   item2_data.value.strings[0]=xiaolei_opt[0];
   item2_data.value.strings[1]=xiaolei_opt[1];
  
   if(index!=0)
   {
     if(index==1)
     {
       item2_data.value.strings[0]=xiaolei_opt[2];
       item2_data.value.strings[1]=xiaolei_opt[3];
     }
     else
     {
       item2_data.value.strings[0]=xiaolei_opt[4];
       item2_data.value.strings[1]=xiaolei_opt[5];
     }
   }
   item2_data.item_attr=UF_STYLER_SUBITEM_VALUES;
   item2_data.item_id=TYPE_XIAOLEI_OPTION;
   item2_data.count=row_num;
  
   UF_STYLER_set_value(dialog_id, [$item2_data)]
/*   else
   {
     item2_data.value.strings[0]=xiaolei_opt[0];
     item2_data.value.strings[1]=xiaolei_opt[1];
   }
*/
  
     UF_terminate ();
  
    /* Callback acknowledged, do not terminate dialog */
    return (UF_UI_CB_CONTINUE_DIALOG);  
    
    /* or Callback acknowledged, terminate dialog.    */
    /* return ( UF_UI_CB_EXIT_DIALOG );               */
  
}
编译提示:warning C4700: local variable 'item2_data' used without having been initialized。
作者: zzz    时间: 2003-4-2 18:08
strings是一个二级指针,二级指针本身不赋值,就直接用下标,c语言可以这样吗?
作者: lcfq    时间: 2003-4-2 18:24
我不知道该如何给这个指针赋值。我在帖子“ug open经验汇集”中的Menuoption中看到了动态赋值的示例,照着做没有成功。麻烦斑竹详细指点。谢谢。
作者: zzz    时间: 2003-4-3 10:50
那个帖子可真是害人不浅啊,二级指针,指向字符串数组即可。
作者: lcfq    时间: 2003-4-3 11:11
能否麻烦版主详细指点一下?我实在是有点模糊。谢谢。
作者: zzz    时间: 2003-4-3 11:57
lcfq wrote:
我设计了一个对话框,意图是:根据MENUOPTION1中的index来动态地设置MENUOPTION2中显示的内容。在编译时提示MENUOPTION2中的strings没有初始化。请教各位高手该如何解决?程序如下:  
  int TYPE_dalei_index_cb ( int dialog_id,  
               void * client_data,  
               UF_STYLER_item_value_type_p_t callback_data)  
  {  
    UF_STYLER_item_value_type_t item1_data,item2_data;  
    int index;  
   char xiaolei_opt1[2][20]={"a1","a2"};  
char xiaolei_opt2[2][20]={"a3","a4"};  
char xiaolei_opt3[2][20]={"a5","a6"};
  
    int row_num;  
    row_num=2;  
       /* Make sure User Function is available. */   
       if ( UF_initialize() != 0)   
            return ( UF_UI_CB_CONTINUE_DIALOG );  
  
       /* ---- Enter your callback code here ----- */  
  
     //get the index of the dalei option menu.  
     item1_data.item_attr=UF_STYLER_VALUE;  
     item1_data.item_id=TYPE_DALEI_OPTION;  
     item1_data.indicator=UF_STYLER_INTEGER_VALUE;  
     UF_STYLER_ask_value(dialog_id, [$item1_data)]  
     index=item1_data.value.integer;  
  
     //according to the index value to change the text of the xiaolei option menu.  
     //item2_data.indicator=UF_STYLER_STRING_PTR_VALUE;  
  
    item2_data.value.strings=xiaolei_opt1;    
     if(index!=0)  
     {  
       if(index==1)  
       {  
        item2_data.value.strings=xiaolei_opt2;   
       }  
       else  
       {  
        item2_data.value.strings=xiaolei_opt3;        }  
     }  
     item2_data.item_attr=UF_STYLER_SUBITEM_VALUES;  
     item2_data.item_id=TYPE_XIAOLEI_OPTION;  
     item2_data.count=row_num;  
  
     UF_STYLER_set_value(dialog_id, [$item2_data)]  
  /*   else  
     {  
       item2_data.value.strings[0]=xiaolei_opt[0];  
       item2_data.value.strings[1]=xiaolei_opt[1];  
     }  
  */  
  
       UF_terminate ();  
  
      /* Callback acknowledged, do not terminate dialog */  
      return (UF_UI_CB_CONTINUE_DIALOG);   
        
      /* or Callback acknowledged, terminate dialog.    */  
      /* return ( UF_UI_CB_EXIT_DIALOG );               */  
  
  }  
  编译提示:warning C4700: local variable 'item2_data' used without having been initialized。

作者: lcfq    时间: 2003-4-3 14:56
非常感谢版主的帮忙。我等会再试一下。谢谢了。等我5月底、6月初有空时,一定会向论坛提供自己的一些浅显的经验,起个抛砖引玉的作用。
作者: lcfq    时间: 2003-4-3 15:21
版主,还是有问题啊!
编译时,系统提示:
warning C4047: '=' : 'char ** ' differs in levels of indirection from 'char (*)[20]'
  
该提示指向赋值语句:item2_data.value.strings=xiaolei_opt1;等处。
  
还需要您帮忙。能否提供一个类似的例子看一看?
  
谢谢。
作者: wlzhao33    时间: 2003-4-3 19:06
把item2_data.value.strings=xiaolei_opt1;改为item2_data.value.strings=(char **)xiaolei_opt1;试试。好像以前我和另外一个斑竹讨论过这个问题,这儿应该有这个帖子,你自己找找看,应该没问题。
作者: darkhorse    时间: 2003-4-3 19:13
唉.UG的数据类型转换很讨厌人.
排列组合,慢慢测试把.
不过我给出的代码都是我已经通过调试的.不太明白你的是怎么回事.
这段时间我比较忙,很长一段时间没接触二次开发了,基本都是zzz兄照顾,
一个月后就差不多了.
作者: spline    时间: 2003-4-3 20:28
这个问题我也遇到了,我偷了一个懒。就是用UG/Open++ UIStyler Class。问题就见得多了,不过程序的稳定性可能下降。另外就是要熟悉STL。
作者: lcfq    时间: 2003-4-3 21:51
真是难者不会,会者不难。按照你的指点,程序编译时没有错误提示。谢谢了。
作者: lcfq    时间: 2003-4-5 20:02
wlzhao33 wrote:
把item2_data.value.strings=xiaolei_opt1;改为item2_data.value.strings=(char **)xiaolei_opt1;试试。好像以前我和另外一个斑竹讨论过这个问题,这儿应该有这个帖子,你自己找找看,应该没问题。

  
我照你的提示作了一下,编译时没有错误提示,但是在ug中对话框的值却不随选项变化。我的代码如下,能否麻烦你看看?谢谢。
int CHANGE_da_index_cb ( int dialog_id,
             void * client_data,
             UF_STYLER_item_value_type_p_t callback_data)
{
    UF_STYLER_item_value_type_t item1_data,item2_data;
  int index;
  char xiaolei_opt1[2][20]={"d1","d2"};
  char xiaolei_opt2[2][20]={"b1","b2"};
  char xiaolei_opt3[2][20]={"c1","c2"};
  int row_num=2;
  char msg[133];
  char buffer[10];
  
     /* Make sure User Function is available. */   
     if ( UF_initialize() != 0)  
          return ( UF_UI_CB_CONTINUE_DIALOG );
  
     /* ---- Enter your callback code here ----- */
   item1_data.item_attr=UF_STYLER_VALUE;
   item1_data.item_id=CHANGE_OPTION_0;
   //item1_data.indicator=UF_STYLER_INTEGER_VALUE;
   UF_STYLER_ask_value(dialog_id, [$item1_data)]
   index=item1_data.value.integer;
   strcpy(msg, "current index is:");
   _itoa(index, buffer,2);
   strcat(msg,buffer);
   uc1601(msg,1);
  
   item2_data.item_attr=UF_STYLER_SUBITEM_VALUES;
   item2_data.item_id=CHANGE_OPTION_1;
   item2_data.count=row_num;
  
   item2_data.value.strings=xiaolei_opt1;
//   item2_data.value.strings[1]=xiaolei_opt[1];
  
   if(index!=0)
   {
     if(index==1)
     {
       item2_data.value.strings=(char **)xiaolei_opt2;
     }
     else
     {
       item2_data.value.strings=(char **)xiaolei_opt3;
     }
   }
  
   UF_STYLER_set_value(dialog_id, [$item2_data)]
  
     UF_terminate ();
  
    /* Callback acknowledged, do not terminate dialog */
    return (UF_UI_CB_CONTINUE_DIALOG);  
    
    /* or Callback acknowledged, terminate dialog.    */
    /* return ( UF_UI_CB_EXIT_DIALOG );               */
  
}
作者: lcfq    时间: 2003-4-5 20:35
经过朋友的指点,刚刚解决了这个问题。问题出在程序中的strings的赋值上。
修改原程序中的相应部分如下:
//变量定义部分修改:
char *op1[]={"e1","e2"};
//赋值部分修改:
item2_data.value.strings=op1;

作者: wlzhao33    时间: 2003-4-5 20:55
呵呵,这样也可以呀。随便问你一句,你的UG是哪个版本呀?
作者: lcfq    时间: 2003-4-5 22:08
ug18.0.5




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