Private Sub Form_Load()
Label1.Caption = "该计算机已经被 " & UserName & " 锁定,只有超级管理员和" & UserName & "才能解除锁定"
    Dim hdc As Long, sx As Integer, sy As Integer
  
    Dim hOldPattern As Long, bBmp(0 To 15) As Byte
    Dim hBitmap As Long, hPattern As Long, hDCScreen As Long
    
    Dim pOld As Boolean
 
    SystemParametersInfoByRef 97, True, pOld, 0
   
    sx = Screen.Width \ Screen.TwipsPerPixelX
    sy = Screen.Height \ Screen.TwipsPerPixelY
    hdc = GetDC(0)
    'MsgBox sy, , sx
    '抓图
   
    BitBlt Me.hdc, 0, 0, sx, sy, hdc, 0, 0, vbSrcCopy
    ReleaseDC 0, hdc
  
    bBmp(0) = &H55: bBmp(2) = &HAA: bBmp(4) = &H55: bBmp(6) = &HAA
    bBmp(8) = &H55: bBmp(10) = &HAA: bBmp(12) = &H55: bBmp(14) = &HAA
     '使屏幕变暗
  For TmpLoop = -639 To sy Step 2
    Me.Line (TmpLoop * 15, 0)-((TmpLoop + sy) * 15, sy * 15)
    Me.Line ((TmpLoop + sy) * 15, 1)-(TmpLoop * 15, sy * 15)
  Next TmpLoop
  
SetWindowPos Me.hWnd, -1, 0, 0, 0, 0, 1 Or 2
 
End Sub
Declare Function SystemParametersInfoByRef Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, lpvParam As Any, ByVal fuWinIni As Long) As Long
Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
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
Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
以上是一段vb代码,这段代码的是锁定屏幕用的,各位哥哥姐姐是否能帮小弟转换成vc的代码呢。小弟曾试着转换过,好像问题挺多的

解决方案 »

  1.   

    long hdc;
    int sx,sy;
    long hOldPattern;
    byte bBmp[16];
    long hBitmap,hPattern,hDCScreen;
    bool pOld;
    SystemParametersInfo(97,true,(void *)pOld,0);
    sx = GetSystemMetrics(SM_CXSCREEN);
    sy = GetSystemMetrics(SM_CYSCREEN);
    hdc = GetDC(0);     --------- 报错
    BitBlt(hdc,0,0,sx,sy,hdc,0,0,13369376); ----报错
      

  2.   

    在vc里面
    hdc = GetDC(0);     --------- 报错
    BitBlt(hdc,0,0,sx,sy,hdc,0,0,13369376); ----报错这两个函数不是这么用的,
    HDC GetDC(
      HWND hWnd   // handle to window
    );要传入你的窗口句病
      

  3.   

    没有错吧,
    hWnd 
    [in] Handle to the window whose DC is to be retrieved. If this value is NULL, GetDC retrieves the DC for the entire screen
      

  4.   

    关键是要把 long hdc; 改成 HDC hdc;
      

  5.   

    hdc = GetDC(0);     
    hdc 无论是long形还是HDC形都没有用啊
    关键MFC好像都不会调用WindowsAPI 都会直接调用CWnd下的GetDC。这是怎么回事呢?不是可以重载吗?
      

  6.   

    BitBlt Me.hdc, 0, 0, sx, sy, hdc, 0, 0, vbSrcCopy
    这一句和VC中的
    HDC hdc;
    BitBlt(hdc,0,0,sx,sy,hdc,0,0,SRCCOPY);
    不是同一个意思吧,如果不同 能不能给出正确的答案呢