วิธีการระบบเป็นบิตแมปภายในเมนูใน Visual Basic

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 71281 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

สรุป

ไม่มีคำสั่งที่มาจากภาษา Visual Basic สามารถเพิ่มบิตแมปไปยังระบบเมนู อย่างไรก็ตาม คุณสามารถเรียกฟังก์ชัน Windows API หลาย ๆ การวางบิตแมปภายในระบบเมนูของโปรแกรม Visual Basic นอกจากนี้คุณอาจเปลี่ยนเครื่องหมายแสดง

ข้อมูลเพิ่มเติม

มีหลาย Windows API ฟังก์ชันคุณสามารถเรียกใช้ที่จะแสดงบิตแมปแทนของข้อความในเมนูของระบบ

ต่อไปนี้คือรายการของฟังก์ชัน Windows API จำเป็นต้องใช้:
  • % GetMenu hwnd (%)
       hwnd%   -  Identifies the window whose menu is to be examined
       Returns:   Handle to the menu
    
    						
  • % GetSubMenu (hMenu % nPos %)
       hMenu%  - Identifies the menu
       nPos%   - Specifies the position (zero-based) in the
                 given menu of the pop-up menu
       Returns:  Handle to the given pop-up menu
    
    						
  • % GetMenuItemID (hMenu % nPos %)
       hMenu%  - Identifies the handle to the pop-up menu that
                 contains the item whose ID is being retrieved
       nPos%   - Specifies the position (zero-based) of the menu
                 whose ID is being retrieved
       Returns:  The item ID for the specified item in the pop-
                 up menu
    
    						
  • ModifyMenu % (hMenu % nPos % wFlags % wIDNewItem % lpNewItem &)
        hMenu%  - Identifies the handle to the pop-up menu that
                  contains the item whose ID is being retrieved
        nPos%   - Specifies the menu item to be changed. The
                  interpretation of the nPos parameter depends
                  on the wFlags parameter.
        wFlags% - BF_BITMAP  =  &H4
        wIDNewItem% - Specifies the command ID of the modified menu item
        lpNewItem&  - 32-bit handle to the bitmap
        Returns:  TRUE (-1) if successful, FALSE (0) if unsuccessful
    
    						
  • % SetMenuItemBitmaps (hMenu % nPos % ค่าสถานะ% hBitmapUnchecked % hBitmapChecked %)
        hMenu%  - Identifies menu to be changed
        nPos%   - Command ID of the menu item
        wFlags% - &H0
        hBitmapUnchecked% - Handle to "unchecked" bitmap.
        hBitmapChecked%)  - Handle to the "check" bitmap.
        Returns: TRUE (-1) if successful, FALSE (0) if unsuccessful.
    
    						
มีสองวิธีอื่นใช้บิตแมปภายใน Visual Basic: วิธีแรกเป็นบิตแมปแบบคงที่ใช้ วิธีอื่นคือการ ใช้บิตแมปแบบไดนามิก

บิตแมปแบบคงที่ได้รับการแก้ไข และไม่ได้มีการเปลี่ยนแปลงในระหว่างการดำเนินการของโปรแกรม (เช่นเมื่อคุณจะถ่ายจากเป็นแฟ้ม.BMP unchanging) บิตแมปแบบปรับเปลี่ยนในระหว่างการดำเนินการของโปรแกรมของคุณ คุณอาจเปลี่ยนแอตทริบิวต์ของบิตแมปแบบไดนามิกเช่นสี ขนาด และข้อความ โค้ดตัวอย่างด้านล่างนี้อธิบายวิธีการสร้างทั้งสองชนิดของเมนู

กำหนดเมนูระบบโดยใช้หน้าต่างออกแบบเมนู สร้างระบบเมนูเช่นต่อไปนี้:
    Caption      Control Name   Indented     Index
    --------------------------------------------------------
    BitMenu      TopMenu        No
    Sub Menu0    SubMenu        Once         0
    Sub Menu1    SubMenu        Once         1
    Sub Menu2    SubMenu        Once         2
				

สร้างแถวลำดับการควบคุมรูปภาพ มีบิตแมปที่สาม โดยการสร้างตัวควบคุมรูปภาพที่สามมีตัวควบคุมชื่อที่ใช้กล่องรายการคุณสมบัติเดียวกัน
    Control Name   Caption   Index     FontSize
    ----------------------------------------------------------------
    Picture1                  0           N/A
    Picture1                  1           N/A
    Picture1                  2           N/A
    Picture2                  N/A         N/A  'check BMP
    Picture3                  0           'set Picture3 FontSize all
                                           different
    Picture3                  1           9.75
    Picture3                  2           18
    Command1       Static
    Command2       Dynamic
				

ดัชนีตัวควบคุมแต่ละ Picture1 เพิ่มบิตแมปที่ถูกต้องไปยังคุณสมบัติรูปภาพ เนื่องจากบิตแมปเหล่านี้จะแสดงในเมนู คุณควรใช้บิตแมปขนาดเล็ก เพิ่มบิตแมปไปยังรูปภาพ Picture2 คุณสมบัติที่คุณต้องการให้เครื่องของคุณเมื่อคุณเลือกตัวเลือกเมนู

ทั้งสองชนิด implementations บิตแมปจะต้องมี declarations ต่อไปนี้ในการประกาศหรือส่วนสากลหมายเลขรหัสของคุณ:
' Enter each Declare statement on one, single line:
Declare Function GetMenu% Lib "user" (ByVal hwnd%)
Declare Function GetSubMenu% Lib "user" (ByVal hMenu%, ByVal nPos%)
Declare Function GetMenuItemID% Lib "user" (ByVal hMenu%, ByVal nPos%)
Declare Function ModifyMenu% Lib "user" (ByVal hMenu%, ByVal nPosition%,
   ByVal wFlags%, ByVal wIDNewItem%, ByVal lpNewItem&)
Declare Function SetMenuItemBitmaps% Lib "user" (ByVal hMenu%,
   ByVal nPosition%, ByVal wFlags%, ByVal hBitmapUnchecked%,
   ByVal BitmapChecked%)
Const MF_BITMAP = &H4
Const CLR_MENUBAR = &H80000004 ' Defined for dynamic bitmaps only.
Const TRUE = -1, FALSE = 0
Const Number_of_Menu_Selections = 3
				

การย่อยต่อไปนี้จะยังต้องมีกำหนดเพื่อจัดการ redefinition ที่แท้จริงของบิตแมป "ตรวจสอบ" หมาย:
Sub SubMenu_Click (Index As Integer)
' Uncheck presently checked item, check new item, store
' index
   Static LastSelection%
   SubMenu(LastSelection%).Checked = FALSE
   SubMenu(Index).Checked = TRUE
   LastSelection% = Index
End Sub

Sub Command1_Click ()
  '* example to create a static bitmap menu
  hMenu% = GetMenu(hWnd)
  hSubMenu% = GetSubMenu(hMenu%, 0)
  For i% = 0 To Number_of_Menu_Selections - 1
    menuId% = GetMenuItemID(hSubMenu%, i%)
    x% = ModifyMenu(hMenu%, menuId%, MF_BITMAP, menuId%,
                    CLng(picture1(i%).Picture))
    x% = SetMenuItemBitmaps(hMenu%, menuId%, 0, 0,
                    CLng(picture2.Picture))
  Next i%
End Sub

'This code sample will change the actual menu bitmaps size,
'font size, color, and caption. Run the application and
'select the BitMenu and view the selections. Then click
'the form and revisit the BitMenu.
'---------------------------------------------------------

Sub Command2_Click ()
   '* Example to create a dynamic menu system
   hMenu% = GetMenu(hWnd)
   hSubMenu% = GetSubMenu(hMenu%, 0)
   For i% = 0 To Number_of_Menu_Selections - 1
   '* Place some text into the menu.

      SubMenu(i%).Caption = Picture3(i%).FontName +
                Str$(Picture3(i%).FontSize) + " Pnt"

   '* 1. Must be AutoRedraw for Image().
   '* 2. Set Backcolor of Picture control to that of the
   '*    current system Menu Bar color, so Dynamic bitmaps
   '*    will appear as normal menu items when menu bar
   '*    color is changed via the control panel
   '* 3. See the bitmaps on screen, this could all be done
   '*    at design time.

     Picture3(i%).AutoRedraw = TRUE
     Picture3(i%).BackColor = CLR_MENUBAR
   '* You can uncomment this
   '* Picture3(i%).Visible = FALSE

   '* Set the width and height of the Picture controls
   '* based on their corresponding Menu items caption,
   '* and the Picture controls Font and FontSize.
   '* DoEvents() is necessary to make new dimension
   '* values to take affect prior to exiting this Sub.

    Picture3(i%).Width = Picture3(i%).TextWidth(SubMenu(i%).Caption)
    Picture3(i%).Height = Picture3(i%).TextHeight(SubMenu(i%).Caption)
    Picture3(i%).Print SubMenu(i%).Caption

   '* - Set picture controls backgroup picture (Bitmap) to
   '*   its Image.
     Picture3(i%).Picture = Picture3(i%).Image
     x% = DoEvents()
   Next i%

    '* Get handle to forms menu.
   hMenu% = GetMenu(Form1.hWnd)

   '* Get handle to the specific menu in top level menu.
   hSubMenu% = GetSubMenu(hMenu%, 0)

   For i% = 0 To Number_of_Menu_Selections - 1

   '* Get ID of sub menu
     menuId% = GetMenuItemID(hSubMenu%, i%)

   '* Replace menu text w/bitmap from corresponding picture
   '* control
     x% = ModifyMenu(hMenu%, menuId%, MF_BITMAP, menuId%,
              CLng(Picture3(i%).Picture))  'append this to previous line

   '* Replace bitmap for menu check mark with custom check
   '* bitmap
     x% = SetMenuItemBitmaps(hMenu%, menuId%, 0, 0, CLng(picture2.Picture))
   Next i%
End Sub
				

ข้อมูลอ้างอิง

" Windows เขียนโปรแกรม: คำแนะนำของ Microsoft ในการเขียนโปรแกรมประยุกต์สำหรับ Windows 3, " Charles Petzold ข่าวของ Microsoft, 1990

" Kit พัฒนาซอฟต์แวร์ของ Microsoft Windows: ไดรฟ์ข้อมูลอ้างอิง 1, " รุ่น 3.0

แฟ้ม WINSDK.HLP ที่จัดส่ง โดย Microsoft SDK 3.0 ของ Windows

คุณสมบัติ

หมายเลขบทความ (Article ID): 71281 - รีวิวครั้งสุดท้าย: 6 มกราคม 2554 - Revision: 2.0
ใช้กับ
  • Microsoft Visual Basic 3.0 Professional Edition
  • Microsoft Visual Basic 1.0 Standard Edition
Keywords: 
kbmt KB71281 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:71281
การปฏิเสธความรับผิดชอบในเนื้อหาของ KB ที่จะไม่มีการปรับปรุงอีกต่อไป
บทความนี้กล่าวถึงผลิตภัณฑ์ที่ Microsoft ไม่มีการสนับสนุนอีกต่อไป เนื้อหาของบทความจึงมีการนำเสนอ "ตามลักษณะที่เป็น" และจะไม่มีการปรับปรุงข้อมูลอีก

ให้ข้อเสนอแนะ

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com