如何创建没有系统菜单的Motif主窗口,最小化和最大化框?我只是不知道如何通过谷歌搜索和阅读文档和教程。我认为应该可以使用XtVaCreateManagedWindow
的一些附加参数,但是哪个?
我尝试了XtVaSetValues
(topWid
,XmNmwmDecorations
,...)的几种变体,但都没有效果。相反,我收到一条错误消息,我需要使用供应商shell。但是,大多数窗口小部件类型并非来自供应商外壳,例如尝试使用对话框shell并在其中放置一个可滚动的文本小部件,然后文本小部件似乎控制对话框。
答案 0 :(得分:2)
显然,不可能(轻松)摆脱窗口(系统)菜单,但似乎可以使用以下代码禁用窗口菜单项:
int i;
XtVaGetValues (widget, XmNmwmFunctions, &i);
i &= ~(MWM_FUNC_ALL | MWM_FUNC_MINIMIZE | MWM_FUNC_MAXIMIZE | MWM_FUNC_CLOSE);
XtVaSetValues (widget, XmNmwmFunctions, i);
它也删除了相关的窗口装饰,显然甚至适用于非供应商的shell小部件。
答案 1 :(得分:2)
还应该有可能去除装饰物(即使它们看不见)。但请注意,这些“系统菜单”装饰属于Window Manager,而不属于Motif程序本身。由窗口管理器来处理您的请求或忽略它们 - 您可能会使用任何MWM资源获得特定于供应商的行为。
无论如何,这是试用的代码示例:
int decors; //bit-mask of flags defining the decorations, from Xm/MwmUtil.h
XtVaGetValues(dlg, XmNmwmDecorations, &decors, NULL);
decors &= ~MWM_DECOR_MENU;
decors &= ~MWM_DECOR_MAXIMIZE;
decors &= ~MWM_DECOR_MINIMIZE;
XtVaSetValues(dlg, XmNmwmDecorations, decors, NULL);
答案 2 :(得分:0)
如果您打算从Mwm
运行您的应用程序,则可以通过设置(例如通过XtVaAppInitialize()
)以下X11资源来实现所需的行为:
! Title bar buttons
Mwm*YourApplicationClassHere.clientDecoration: -minimize -maximize
! Window menu functions
Mwm*YourApplicationClassHere.clientFunctions: -minimize -maximize
说到窗口菜单,这个菜单取决于正在使用的特定窗口管理器。例如,Mwm
允许客户端使用Mwm*YourApplicationClassHere.windowMenu
资源设置菜单名称,菜单本身必须在${HOME}/.mwmrc
或全局mwmrc
中定义,或{{1 } XmNmwmMenu
的资源。生成的自定义窗口菜单显示为VendorShell
原子,现在的窗口管理器似乎忽略了它。
示例_MOTIF_WM_MENU
菜单定义可能如下所示
mwmrc
(参见function descriptions)。可以使用Menu CustomMenu0
{
Restore _R Alt<Key>F5 f.restore
Move _M Alt<Key>F7 f.move
Size _S Alt<Key>F8 f.resize
Minimize _n Alt<Key>F9 f.minimize
Maximize _x Alt<Key>F10 f.maximize
Lower _L Alt<Key>F3 f.lower
no-label f.separator
Pass\ Keys _K f.pass_keys
no-label f.separator
Close _C Alt<Key>F4 f.kill
}
Menu CustomMenu1
{
Your\ Application\ Name\ Here f.title
no-label f.separator
Close _C Alt<Key>F4 f.kill
}
添加自定义菜单项(示例here和here)。
我非常确定以上所有内容也适用于f.send_msg
( CDE )。