动态操作菜单以在正在进行的Windows应用程序中创建MRU

时间:2012-02-07 10:26:44

标签: dynamic menu progress-4gl openedge mru

我有一个正在编写的Windows应用程序。我正在使用10.1C版本。我想在菜单中添加MRU功能,即我想在应用程序的文件菜单中添加,删除和修改菜单项,以按照它们的顺序显示用户的最新文件用过的。我经常用其他多种语言做到这一点,这是一个很常见的功能,非常容易做到。

但是如何进行这项工作呢?在另一种语言中,我可以创建10个菜单项并简单地使未使用的菜单项不可见,但是您无法在进行中执行此操作。我无法想象为什么。

或者,我应该能够根据需要动态创建菜单项并将它们添加到“文件”菜单中MRU列表的末尾,但我似乎也不能这样做:首先,我可以' t指定文件菜单中必须添加项目的位置,它总是将其添加到底部,其次,我无法将动态菜单添加到静态菜单,因此我无法将MRU菜单添加到现有的文件菜单。如果我将整个文件菜单设置为动态(我真的不想这样做),我就可以做到,但是我无法将动态文件菜单添加到静态菜单栏。这让我有了让整个菜单结构变得动态的不可接受的选择。

有人有什么想法吗?


<小时/>

使用下面的Ade答案,这是我如何实现它的简短示例。更改MRU项目的标签和值并不需要任何摆弄,只需设置适当的属性,但为了添加新的MRU项目,我必须删除并重新创建“退出”菜单项:

/* Remove the RULE and Exit menu items */
IF VALID-HANDLE(ghMenuRule) THEN DELETE OBJECT ghMenuRule.
IF VALID-HANDLE(ghMenuExit) THEN DELETE OBJECT ghMenuExit.

/*

...
Coding to add MRU items.
...

*/


/* Create the RULE and Exit menu items */
CREATE MENU-ITEM ghMenuRule
  ASSIGN
    SUBTYPE = "RULE"
    PARENT    = MENU m_File:HANDLE IN MENU MENU-BAR-C-Win.

CREATE MENU-ITEM ghMenuExit
  ASSIGN
    PARENT    = MENU m_File:HANDLE IN MENU MENU-BAR-C-Win
    LABEL     = "E&xit"
  TRIGGERS:
      ON CHOOSE PERSISTENT RUN ExitApp IN THIS-PROCEDURE.
  END TRIGGERS.

创建实际MRU项目就像在此处创建Exit菜单一样,除了我将句柄存储在临时表中。

结果是这样的菜单:

        File
          New
          Open
          --------
          Print Setup
          Print
          --------
          1 Mru item 
          2 Mru Item
          3 Mru Item
          --------
          Exit

1 个答案:

答案 0 :(得分:2)

创建一个静态菜单MENU-BAR-C-Win。

添加静态子菜单“File”m_file。

将静态菜单项(使用“&gt;&gt;”)“退出”(m_Exit)添加到m_file。

定义.... DEFINE VARIABLE hMRU#1 AS HANDLE NO-UNDO。

动态创建一个按钮......

  CREATE MENU-ITEM hMRU#1
  ASSIGN
    PARENT    = MENU m_File:HANDLE IN MENU MENU-BAR-C-Win
    LABEL     = "MRU#1"
  TRIGGERS:
      ON CHOOSE PERSISTENT RUN SomeThing IN THIS-PROCEDURE.
  END TRIGGERS.

你想跟踪你的句柄(临时表?)一些方法。