代码之家  ›  专栏  ›  技术社区  ›  Razzupaltuff

Motif主窗口没有系统菜单,如何最小化和最大化框?C

  •  2
  • Razzupaltuff  · 技术社区  · 16 年前

    XtVaCreateManagedWindow 但是哪个呢?

    XtVaSetValues ( topWid , XmNmwmDecorations , ...)但没有一个工作。相反,我收到一条错误消息,表示我需要为此使用供应商shell。然而,大多数小部件类型不是从供应商shell派生出来的,当我尝试使用对话框shell并在其中放置一个可滚动的文本小部件时,文本小部件似乎控制了对话框。

    3 回复  |  直到 13 年前
        1
  •  2
  •   Razzupaltuff    16 年前

    显然,要摆脱窗口(系统)菜单并不容易,但似乎可以用这样的代码禁用窗口菜单项:

    int i;
    XtVaGetValues (widget, XmNmwmFunctions, &i);
    i &= ~(MWM_FUNC_ALL | MWM_FUNC_MINIMIZE | MWM_FUNC_MAXIMIZE | MWM_FUNC_CLOSE);
    XtVaSetValues (widget, XmNmwmFunctions, i);
    

    这也删除了相关的窗口装饰,显然甚至适用于非供应商的shell小部件。

        2
  •  2
  •   Nikola Gedelovski    16 年前

    还应该有可能移除装饰(即使其不可见)。但是,请注意,这些“系统菜单”装饰属于窗口管理器,而不是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);
    
        3
  •  0
  •   Bass    10 年前

    如果您打算从以下位置运行应用程序 Mwm ,您可以通过设置(例如通过 XtVaAppInitialize() )以下X11资源:

    ! Title bar buttons
    Mwm*YourApplicationClassHere.clientDecoration: -minimize -maximize
    ! Window menu functions
    Mwm*YourApplicationClassHere.clientFunctions: -minimize -maximize
    

    这些资源将得到更详细的解释 here here .

    说到窗口菜单,这取决于使用的特定窗口管理器。 曼海姆 Mwm*YourApplicationClassHere.windowMenu 资源,菜单本身必须在以下任一位置定义 ${HOME}/.mwmrc 或全球 mwmrc XmNmwmMenu 资源 VendorShell 。生成的自定义窗口菜单显示为 _MOTIF_WM_MENU atom,它似乎被现代窗口管理器忽略了。

    mwmrc 菜单定义可能如下

    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
    }
    

    function descriptions ).可以使用添加自定义菜单项 f.send_msg (示例 here here ).

    我很确定上述所有内容也适用于 Dtwm ( ).

    推荐文章