请教PHAB界面窗口最小化问题

请问一下的一个PHAB程序,用做界面得工具Builder从主窗口Window菜单弹出的对话框Dialog,默认不能最小化,可以最大化,主窗口都可以。我看了修改了可能的选项,Flags:Render,Flags:Managed,Flags:Notify 还是不行,谁知道指点一下,谢谢.

首先,我想你需要仔细阅读一下PtWindow的文档.注意两样东西,Window Manager和subwindows.

我相信是父窗口对子窗口的flags做了一些改动(暗地里)或它屏闭了某些给子窗口的event.
所以你不能最小化子窗口.(当子窗口由ApCreateModule()创建或使用PhAB’s link callbacks)

一个简单的方法是,创建一个新的窗口,让它们之间没有继承关系.如

int PtButton_new( PtWidget_t *widget, ApInfo_t *apinfo, PtCallbackInfo_t *cbinfo )
{
PhWindowEvent_t WE;
PtWidget_t *gwidget;

// PtCreateWidget and Pt_NO_PARENT!!!
gwidget = PtCreateWidget( PtWindow, Pt_NO_PARENT, 0, NULL );
PtRealizeWidget( gwidget );

// 最小化窗口
if( !gwidget || !PtWidgetIsClassMember( gwidget, PtWindow ))
{
return -1;
}

memset( &WE, 0, sizeof (WE));
WE.event_f = Ph_WM_HIDE;
WE.rid = PtWidgetRid( gwidget );
WE.event_state = Ph_WM_EVSTATE_HIDE;
//WE.event_state = Ph_WM_EVSTATE_UNHIDE;
return PtForwardWindowEvent( &WE );

/* eliminate ‘unreferenced’ warnings */
widget = widget, apinfo = apinfo, cbinfo = cbinfo;

return( Pt_CONTINUE );
}

如果这不是你想要的.
1.也许你可以参考一下PtReparentWidget().
2.你要保留它们之间的继承关系,但想做一些改动.也许可以重新设置一下窗口的flag属性.

我没有做过,剩下的你自己试一下吧.如果有时间.
简单来说,我的思路是.要不让它们没有关系.要不改变它们之间的关系.

另Button 点下去的效果,可以设置Flags里的Pt_SET.

呵呵,谢谢,Pt_SET 找到了。

Dialog左上角有个收起和放下按钮,这个功能也不错,哈

我是用Builder 做的界面,不是自己直接用语句写的,创建Dialog是用菜单里的 create dialog 实现的,然后在界面工具里面把菜单和这个Dialog关联的,这个dialog的Flags:Render,Flags:Managed,Flags:Notify 我都试着改成跟主窗口Window一样,因为主窗口可以最小化,结果还是没解决。