程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Windows 編程[13] - 菜單與菜單資源(二)

Windows 編程[13] - 菜單與菜單資源(二)

編輯:Delphi

我們可以把上例中的資源文件修改成這樣:

MyMenu1 MENUEX
BEGIN
 POPUP "&File"    ,65535
 BEGIN
  MENUITEM "&New"  ,101
  MENUITEM "&Open"  ,102
  MENUITEM "&Save"  ,103
  MENUITEM SEPARATOR
  MENUITEM "E&xit"  ,104
 END
 POPUP "&Edit"    ,65535
 BEGIN
  MENUITEM "Cu&t"  ,201
  MENUITEM "&Copy"  ,202
  MENUITEM "&Paste" ,203
 END
 POPUP "&Help"    ,65535
 BEGIN
  MENUITEM "&About" ,301
 END
END

  解釋一下:

  1. 以前是使用 MENU 標識菜單資源的; 用 MENUEX 會有更多功能.

  2、就像 Delphi 一樣, 它們使用 BEGIN 與 END 劃分語句塊, 也可以用 C/C++ 語言的方式: { ... }; 還有它的注釋也是 C 語言格式的.

  3、MyMenu1 MENUEX 中的 MyMenu1 是自定義的該菜單的標識.

  4、MyMenu1 MENUEX 後面可以有關於載入和釋放的控制符: PRELOAD、MOVEABLE PURE、DISCARDABLE(這個我沒找到權威資料, 有誰知道, 萬望告訴我; DISCARDABLE 用的最多, 可能是該資源沒被使用可以忽略的意思).

  5、POPUP 表示這是一個彈出菜單項, 也就是: 它有下級菜單; 大家習慣用 65535 做標識.

  6、MENUITEM 表示一個菜單項, MENUITEM SEPARATOR 表示一個菜單分隔符.

 7、MENUITEM 的第一個參數是要顯示的文本, & 用來指定加速鍵.

  8、MENUITEM 的第二個參數(參數用 , 號隔開)是該菜單項的標識, 是一個整數值(1-65535); 當用戶點擊菜單時, 會送出 WM_COMMAND 消息, 消息的 wParam 參數就是這個標識, 從而讓我們知道點擊的是哪一個菜單項; 這個標識有點像句柄, 一般在操作這個菜單項時也需要這個標識.

  現在要解決一個問題: 這些 MENUITEM 的標識 101、102、103 等等不好記憶, 如果定義成有字面意義的常量就好了.

  在 Delphi 中使用 const 定義常量, 但資源文件是系統級的, 需要用 C/C++ 的方法來定義常量. 這樣我們可以修改如下:

#define IDM_New  101
#define IDM_Open 102
#define IDM_Save 103
#define IDM_Exit 104
#define IDM_Cut  201
#define IDM_Copy 202
#define IDM_Paste 203
#define IDM_About 301

MYMENU1 MENUEX
BEGIN
 POPUP "&File"    ,65535
 BEGIN
  MENUITEM "&New"  ,IDM_New
  MENUITEM "&Open"  ,IDM_Open
  MENUITEM "&Save"  ,IDM_Save
  MENUITEM SEPARATOR
  MENUITEM "E&xit"  ,IDM_Exit
 END
 POPUP "&Edit"    ,65535
 BEGIN
  MENUITEM "Cu&t"  ,IDM_Cut
  MENUITEM "&Copy"  ,IDM_Copy
  MENUITEM "&Paste" ,IDM_Paste
 END
 POPUP "&Help"    ,65535
 BEGIN
  MENUITEM "&About" ,IDM_About
 END
END

繼續研究: 每一個菜單項後面可以有很多參數來指定不同的功能和顯示效果.

  譬如: MFT_STRING(是字符串)、MFS_CHECKED(選擇)、MFS_GRAYED(禁用)、MFT_RIGHTJUSTIFY(顯示在右邊)等等, 示例如下:

#define IDM_New  101
#define IDM_Open 102
#define IDM_Save 103
#define IDM_Exit 104
#define IDM_Cut  201
#define IDM_Copy 202
#define IDM_Paste 203
#define IDM_About 301

MYMENU1 MENUEX
BEGIN
 POPUP "&File"    ,65535
 BEGIN
  MENUITEM "&New"  ,IDM_New  ,MFT_STRING, MFS_CHECKED
  MENUITEM "&Open"  ,IDM_Open ,MFT_STRING, MFS_GRAYED
  MENUITEM "&Save"  ,IDM_Save
  MENUITEM SEPARATOR
  MENUITEM "E&xit"  ,IDM_Exit
 END
 POPUP "&Edit"    ,65535
 BEGIN
  MENUITEM "Cu&t"  ,IDM_Cut
  MENUITEM "&Copy"  ,IDM_Copy
  MENUITEM "&Paste" ,IDM_Paste
 END
 POPUP "&Help"    ,65535   ,MFT_RIGHTJUSTIFY
 BEGIN
  MENUITEM "&About" ,IDM_About
 END
END

  調用後的效果圖:

Windows 編程[13] - 菜單與菜單資源(二)


又如: MFT_MENUBREAK(分列)、MFT_MENUBARBREAK(分列並帶分割線), 示例如下:

#define IDM_New  101
#define IDM_Open 102
#define IDM_Save 103
#define IDM_Exit 104
#define IDM_Cut  201
#define IDM_Copy 202
#define IDM_Paste 203
#define IDM_About 301

MYMENU1 MENUEX
BEGIN
 POPUP "&File"    ,65535
 BEGIN
  MENUITEM "&New"  ,IDM_New
  MENUITEM "&Open"  ,IDM_Open ,MFT_MENUBREAK
  MENUITEM "&Save"  ,IDM_Save
  MENUITEM SEPARATOR
  MENUITEM "E&xit"  ,IDM_Exit
 END
 POPUP "&Edit"    ,65535
 BEGIN
  MENUITEM "Cu&t"  ,IDM_Cut
  MENUITEM "&Copy"  ,IDM_Copy ,MFT_MENUBARBREAK
  MENUITEM "&Paste" ,IDM_Paste
 END
 POPUP "&Help"    ,65535   ,MFT_RIGHTJUSTIFY
 BEGIN
  MENUITEM "&About" ,IDM_About
 END
END

  調用後的效果圖:

Windows 編程[13] - 菜單與菜單資源(二)

  圖片看不清楚?請點擊這裡查看原圖(大圖)。

 再如: MFT_RIGHTORDER(右對齊)示例如下:

#define IDM_New  101
#define IDM_Open 102
#define IDM_Save 103
#define IDM_Exit 104
#define IDM_Cut  201
#define IDM_Copy 202
#define IDM_Paste 203
#define IDM_About 301

MYMENU1 MENUEX
BEGIN
 POPUP "&File"    ,65535
 BEGIN
  MENUITEM "&New"  ,IDM_New ,MFT_RIGHTORDER ,MFS_CHECKED
  MENUITEM "&Open"  ,IDM_Open
  MENUITEM "&Save"  ,IDM_Save
  MENUITEM SEPARATOR
  MENUITEM "E&xit"  ,IDM_Exit
 END
 POPUP "&Edit"    ,65535
 BEGIN
  MENUITEM "Cu&t"  ,IDM_Cut
  MENUITEM "&Copy"  ,IDM_Copy
  MENUITEM "&Paste" ,IDM_Paste
 END
 POPUP "&Help"    ,65535
 BEGIN
  MENUITEM "&About" ,IDM_About
 END
END

  調用後的效果圖:

Windows 編程[13] - 菜單與菜單資源(二)

  還是 MFT_RIGHTORDER(右對齊) 的例子:

#define IDM_New  101
#define IDM_Open 102
#define IDM_Save 103
#define IDM_Exit 104
#define IDM_Cut  201
#define IDM_Copy 202
#define IDM_Paste 203
#define IDM_About 301

MYMENU1 MENUEX
BEGIN
 POPUP "&File"    ,65535  ,MFT_RIGHTORDER
 BEGIN
  MENUITEM "&New"  ,IDM_New
  MENUITEM "&Open"  ,IDM_Open
  MENUITEM "&Save"  ,IDM_Save
  MENUITEM SEPARATOR
  MENUITEM "E&xit"  ,IDM_Exit
 END
 POPUP "&Edit"    ,65535
 BEGIN
  MENUITEM "Cu&t"  ,IDM_Cut
  MENUITEM "&Copy"  ,IDM_Copy
  MENUITEM "&Paste" ,IDM_Paste
 END
 POPUP "&Help"    ,65535
 BEGIN
  MENUITEM "&About" ,IDM_About
 END
END





  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved