การแก้ไข: เมื่อคุณใช้ SendMessage ด้วย TB_GETIMAGELIST เพื่อรับการจัดการ ImageList ใน Windows XP คุณไม่รับการจัดการการแก้ไข

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 811415 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
บทความนี้ถูกเก็บถาวรแล้วเนื้อหาของบทความจึงถูกนำเสนอ "ตามลักษณะที่เป็น" และจะไม่มีการปรับปรุงข้อมูลอีก
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

อาการ

คุณสามารถใช้ได้SendMessageเมื่อต้องการดูจุดรูปที่จับจากตัวควบคุมต่าง ๆ ในตัวควบคุมทั่วไปของ Microsoft Windows 6.0 (Mscomctl.ocx) โดยการใช้SendMessageคุณสามารถส่ง TB_GETIMAGELIST, LVM_GETIMAGELIST, TVM_GETIMAGELIST หรือ TCM_GETIMAGELIST เพื่อรับหมายเลขอ้างอิง imagelist สำหรับแถบเครื่องมือ ListView, TreeView และ TabStrip ควบคุม

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

สาเหตุ

ปัญหานี้เกิดขึ้นเนื่องจาก Windows XP และ Mscomctl.ocx โหลดสองรุ่นต่าง ๆ Comctl32.dll ที่ไม่เข้ากันได้

การแก้ไข

สามารถโหลด hotfix ได้แล้วจาก Microsoft แต่มุ่งหวังให้ใช้เพื่อแก้ปัญหาที่อธิบายไว้ในบทความนี้เท่านั้น ใช้ hotfix นี้เฉพาะกับระบบต่างๆ ที่พบปัญหานี้เท่านั้น hotfix นี้อาจได้รับการทดสอบเพิ่มเติม ดังนั้น ถ้าคุณไม่ได้รับอย่างจากจากปัญหานี้ เราขอแนะนำให้ คุณรอ service pack รุ่นถัดไปของ Visual Studio 6.0 ซึ่งประกอบด้วยโปรแกรมแก้ไขด่วนนี้

เมื่อต้องการแก้ไขปัญหานี้ทันที ให้ติดต่อฝ่ายบริการสนับสนุนผลิตภัณฑ์ของ Microsoft เพื่อขอรับโปรแกรมแก้ไขด่วน สำหรับรายชื่อทั้งหมดของหมายเลขโทรศัพท์ของฝ่ายบริการด้านการสนับสนุนเกี่ยวกับผลิตภัณฑ์ของ Microsoft และข้อมูลเกี่ยวกับค่าใช้จ่ายในการให้คำปรึกษา แวะไปที่เว็บไซต์ต่อไปนี้ของ Microsoft::
http://support.microsoft.com/default.aspx?scid=fh;EN-US;CNTACTMS
หมายเหตุ:ในกรณีพิเศษ อาจมีการยกเว้นค่าใช้จ่ายสำหรับการสนับสนุนทางโทรศัพท์หากผู้เชี่ยวชาญในการให้การสนับสนุนของ Microsoft ระบุว่าการปรับปรุงเฉพาะจะแก้ปัญหาของคุณได้ ค่าใช้จ่ายปกติจะใช้กับการให้การสนับสนุนสำหรับคำตอบเพิ่มเติมและเรื่องที่ไม่สามารถจัดเป็นคำถามเกี่ยวกับการอัพเดทเฉพาะ

โปรแกรมแก้ไขด่วนรุ่นภาษาอังกฤษนี้มีแอตทริบิวต์ของแฟ้ม (หรือแอตทริบิวต์ของแฟ้มที่ใหม่กว่า) ซึ่งแสดงอยู่ในตารางต่อไปนี้ วันที่และเวลาของแฟ้มเหล่านี้จะปรากฏในรูปแบบเวลามาตรฐานสากล (UTC) เมื่อคุณดูข้อมูลแฟ้ม ข้อมูลจะถูกแปลงเป็นเวลาท้องถิ่น เมื่อต้องการค้นหาความแตกต่างระหว่างเวลา UTC กับเวลาท้องถิ่น ใช้โซนเวลาแท็บในเครื่องมือ'วันและเวลา'ใน'แผงควบคุม'
   Date         Time   Version   Size       File name
   -----------------------------------------------------
   13-Dec-2002  00:18  6.0.97.1  1,062,160  Mscomctl.ocx

สถานะ

Microsoft ยืนยันว่าปัญหานี้เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ซึ่งมีการระบุไว้ในส่วนเริ่มต้นของเอกสารนี้

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

ขั้นตอนในการทำให้สถานการณ์เกิดขึ้นอีกครั้ง

เมื่อต้องการทบทวนเกิดปัญหา โดยใช้ตัวควบคุมแถบเครื่องมือ ดำเนินการดังต่อไปนี้:
  1. เริ่มต้นโครงการ Visual Basic 6.0 มาตรฐาน EXE ใหม่ โดยค่าเริ่มต้นแล้ว Form1 จะถูกสร้างขึ้น
  2. ในการโครงการเมนู คลิกคอมโพเนนต์. ในการคอมโพเนนต์กล่องโต้ตอบกล่อง เพิ่มการอ้างอิงถึงทั่วไปของ Microsoft Windows ควบคุม 6.0.
  3. เพิ่มการImageListตัวควบคุม (ImageList1) การแถบเครื่องมือตัวควบคุม (Toolbar1) และ aCommandButton(Command1) เพื่อ Form1
  4. คลิกขวาImageListควบคุม และจากนั้น คลิกการรูปภาพแท็บเพิ่มสองรูปเป็น ImageList ควบคุม
  5. เพิ่มรหัสต่อไปนี้เพื่อ Form1:
    Option Explicit
    
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
    Private Declare Function GetImageCount Lib "comctl32" Alias "ImageList_GetImageCount" (ByVal p As Long) As Long
    Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal cmd As Long) As Long
    
    
    Private Const WM_USER = &H400
    Private Const TB_GETIMAGELIST = WM_USER + 49
    Private Const GW_CHILD = 5
    
    Private Sub Command1_Click()
        Dim hImageList As Long, hChild As Long
        
        hChild = GetWindow(Toolbar1.hwnd, GW_CHILD)
        
        hImageList = SendMessage(hChild, TB_GETIMAGELIST, 0, 0)
        MsgBox "Image Count = " & GetImageCount(hImageList)
    End Sub
    
    Private Sub Form_Load()
        Set Toolbar1.ImageList = ImageList1
        Toolbar1.Buttons.Add , , "Button 1"
        Toolbar1.Buttons.Add , , "Button 2"
        Toolbar1.Buttons(1).Image = 1
        Toolbar1.Buttons(2).Image = 2
    End Sub
    
  6. เรียกใช้โปรแกรมประยุกต์ และจากนั้น คลิกCommand1. กระบวนการจำนวนครั้งที่รูปภาพประกอบด้วยกล่องข้อความ0. หลังจากที่คุณใช้โปรแกรมแก้ไขด่วน จำนวนรูปภาพได้อย่างถูกต้องยังคงเป็น2.

คุณสมบัติ

หมายเลขบทความ (Article ID): 811415 - รีวิวครั้งสุดท้าย: 26 กุมภาพันธ์ 2557 - Revision: 2.0
ใช้กับ
  • Microsoft Visual Basic 6.0 Enterprise Edition
Keywords: 
kbnosurvey kbarchive kbvbp600fix kbfix kbqfe kbmt KB811415 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:811415

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