在菜单里的一个子菜单的callback里用代码显示一个对话框

我想在菜单里,点一个子菜单,在这个子菜单的callback函数里面用代码PtRealizeWidget(ABW_Dialog_test)来显示一个对话框,可是显示不了这个对话框。
我本来是在子菜单里面直接弹出一个对话框,由于我想在对话框显示的时候动态地根据我的变量来显示数据(PtNumericInteger). 在pre-realize里面可以动态修改PtLabel的值,就是修改不了PtNumericInteger的显示值。如果在对话框里加个按钮点一下,可以修改PtNumericInteger显示值,说明我的PtSetResource()函数没有问题,估计就是这个PtSetResource()到底应该访在哪个callback函数里才能使对话框显示的时候根据当前变量值显示数据。PtLabel可以在pre-realize的时候动态改变,但是PtNumericInteger就是不行,不知道是不是这个控件有点特殊。

所以我想自己用PtRealizeWidget(ABW_Dialog_test)来显示对话框,然后用PtSetResource()来更改PtNumericInteger的值,结果PtRealizeWidget(ABW_Dialog_test)显示不了对话框。

谢谢指点!

我想在菜单里,点一个子菜单,在这个子菜单的callback函数里面用代码PtRealizeWidget(ABW_Dialog_test)来显示一个对话框,可是显示不了这个对话框。

在PtRealizeWidget之前是否有调用PtCreateWidget来创建这个Dialog.

在pre-realize里面可以动态修改PtLabel的值,就是修改不了PtNumericInteger的显示值。

我有试过,好像并没有这样的问题.我的dialog是在PhAB里创建的.菜单直接调用.

int dialog1_setup( PtWidget_t *link_instance, ApInfo_t *apinfo, 
               PtCallbackInfo_t *cbinfo )

{
      PtSetResource( ABW_PtNumericInteger_dialog, Pt_ARG_NUMERIC_VALUE , 12, 0 );

   
	/* eliminate 'unreferenced' warnings */
	link_instance = link_instance, apinfo = apinfo, cbinfo = cbinfo;

	return( Pt_CONTINUE );
}

另外提醒一下,如想显示一dailog,通常有三种方法.
一是在PhAB里Project → Add. 然后直接用.
一是在Project ->Internal Links… , 然后用ApCreateModule( ABM_Dailog, widget, NULL );调用.比完全写代码简单许多.并可以在需要的时候才创建.
最后自然就是完全代码生成了.

dialog 在PHab里面里面做好了,在代码里面还要创建吗,我有点困惑,谢谢

这个,有点像OO编程的类和对象.

首先,如果你在PhAB已经创建了Dialog,只是说明你写好了一个类. 联系前面我说到的三个方法. 你做了这一步之后,自然不用完全写代码来生成Dialog.

还剩二个方法.先说中间的一个.
ApCreateModule()
Create an instance of a module that was built with PhAB
解释的很明白.先要创建实例,才能进行其实的操作.

第一个是我们最喜欢用的,因为很方便.什么也不用做.但并不是说你加了一个Dialog在PhAB里.系统就会聪明到知道你想做什么.并帮你把实例创建出来让你使用.所以,我猜你需要做的是,在你的CallBack里面,调用这个Dialog.这样编译器才会其它的事情帮你做了.才会,比如说,点击一下菜单跳出Dailog.
不知道你是不是不清楚怎么做.我就罗嗦一点.
很简单,一般加callback的时候,显示的是Function: 注意右边,有几组按键.有一个写着Dialog.乱点几下看看...相信写到足够清楚.

总的来说,三个方法.看你喜欢用那个.我说PtCreateWidget是因为我不清楚情况,提醒一下罢了.

nakeyfish :谢谢你的详细的解释, 原来我赋的值是个小数,呵呵. 所以总是显示0 :laughing: