VB里有哪些控件自带了HDC属性啊
自带的HDC和用GETDC ,GETWINDOWDC取得的DC有什么不同呢

解决方案 »

  1.   

    1.picturebox form等控件都带了HDC属性,你可以输入OBJECT. 然后在弹出列表里查看该对象是否有HDC属性(OBJECT为你想查看的对象,比如form,picturebox等)2.如果对象的autoredraw属性是FALSE,那么object.hdc和getdc得到的结果是一样,都是当前控件的HDC。如果autoredraw属性是true,那么object.hdc实际上是该控件的后缓冲DC,而getdc还是和前边说的一样。
    3.getwindowdc是获得窗口的所有DC
      

  2.   

    我想问问
    我在PICTUREBOX里加了一个图片,然后用BITBLT把PICTUREBOX的HDC传到另一个PICTUREBOX里可以正常显示出来,但是想把COMMANDBUTTON 或别的没自带HDC属性的控件用GETDC或GETWINDOWDC得到他的DC然后再BITBLT到另一个PICTUREBOX里却无法正常显示
      

  3.   

    为什么PICTUREBOX的HDC和用API取得的DC都不一样
      

  4.   

    VB控件中有hdc的并不多,常见的屏幕对象,Form对象,printer对象,picturebox对象等,由于hdc是系统临时分配的,即使是同一对象两次获得的值也不一样。
      

  5.   

    这个我知道,
    PICTUREBOX的HDC和其他用API取得的DC有什么不同之处呢
      

  6.   

    同一时刻是相同的:
    Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As LongPrivate Sub Command1_Click()
    Debug.Print GetDC(Me.hwnd)
    Debug.Print Me.hDC
    '输出的值相同
    End SubPrivate Sub Command2_Click()
    Debug.Print GetDC(Picture1.hwnd)
    Debug.Print Picture1.hDC
    '输出的值相同
    End Sub
      

  7.   

    Debug.Print GetDC(pp.hwnd), pp.hdc
     201402244     1627465614 
    -1895749140    654387328 
     1744907728    268503970 
    每次都不一样
      

  8.   

    Private Sub Command3_Click()
    Debug.Print GetDC(Picture1.hwnd), Picture1.hDC
    End Sub
    '连续单击N次的输出
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
    '-620688964    -620688964
      

  9.   


    Option Explicit
    Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, _
             ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, _
             ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, _
             ByVal ySrc As Long, ByVal dwRop As Long) As Long
    Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As LongPrivate Sub Form_Click()
    Dim h As Long    h = GetDC(Command1.hwnd)
        Picture1.AutoRedraw = False
        BitBlt Picture1.hDC, 0, 0, 140, 140, h, 0, 0, &HCC0020
    End Sub
    我调试过,可以正常显示。
      

  10.   

    过个年都快忘了,
    之前好像看了下,
    那个窗体好像用GDI处理过