用到的API如下: StretchBlt ,GetDC,GetCursorPos(这个是获取鼠标位置,已经知道)对别两个不了解
希望哪位能指点下
程序如下:
Dim pos As POINTAPI     ,Dim i As Long       ,Dim sx As Long     ,Dim sy As Long
Const hwnd_topmost = -1
   Private Type POINTAPI
        x As Long
        y As Long
    End Type
Private Sub Form_Load()
     setwindow
      i = 2
     sx = 100
     sy = 100
  End SubPrivate Sub setwindow()
  SetWindowPos hWnd, hwnd_topmost, 0, 0, 0, 0, Flags  /解释下里头的几个参数分别是什么意思
End SubPrivate Sub Timer1_Timer()  '窗体放大效果
  Dim wx As Integer
  Dim wy As Integer
  GetCursorPos pos
  wx = IIf(pos.x < 50 Or pos.x > 800, IIf(pos.x < 50, 0, 800), pos.x - 50) /解释下iif语句
  wy = IIf(pos.y < 20 Or pos.y > 800, IIf(pos.y < 20, 0, 800), pos.y - 20) /
  StretchBlt hdc, 0, 0, sx * i, sy * i, GetDC(0), wx, wy, sx, sy, Srccopy  /getdc(0)在这里是什意思
End Sub

解决方案 »

  1.   

    StretchBlt:
    【VB声明】
      Private Declare Function StretchBlt Lib "gdi32" Alias "StretchBlt" (ByVal hdc 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 nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long【说明】
      将一幅位图从一个设备场景复制到另一个。源和目标DC相互间必须兼容。这个函数会在设备场景中定义一个目标矩形,并在位图中定义一个源图象。源矩形会根据需要进行伸缩,以便与目标矩形的大小相符 【返回值】
      Long,非零表示成功,零表示失败。会设置GetLastError 【备注】
      可用GetDeviceCaps函数判断特定的设备场景是否支持此函数
      不可选择对源位图进行剪切或旋转处理,源位图也不能是一个图元文件设备场景【参数表】
      hdc ------------  Long,目标设备场景  x,y ------------  Long,目标矩形左上角的x,y坐标,以逻辑坐标表示  nWidth,nHeight -  Long,目标矩形的宽度和高度,以逻辑坐标表示  hSrcDC ---------  Long,源设备场景。如光栅运算未指定一个源,则这个参数应为零  xSrc,ySrc ------  Long,用源DC的逻辑坐标表示的源矩形左上角位置  nSrcWidth,nSrcHeight -  Long,分别指定用逻辑单位(以源DC为基础)传输的一幅图象的宽度和高度。如其中有一个参数的符号(指正负号)与对应的目标参数不符,位图就会在对应的轴上作镜像转换处理  dwRop ----------  Long,传输过程中进行的光栅运算。如刷子属于光栅运算的一部分,就使用选入目标DC的刷子
      

  2.   

    GetDC:
    【VB声明】
      Private Declare Function GetDC Lib "user32" Alias "GetDC" (ByVal hwnd As Long) As Long【说明】
      获取指定窗口的设备场景 【返回值】
      Long,指定窗口的设备场景句柄,出错则为0 【备注】
      若窗口所属类具有CS_OWNDC,
      CS_CLASSDC 或 CS_PARENTDC样式,则获取的设备场景属窗口或类专有。vb的窗体和图片框控件也是这种情况,它用该函数取得的结果和控件的hdc属性相同(在autoredraw为FALSE时)。您无须考虑取回的窗体或图片框控件设备场景的默认状态,特别是绘图对象。另外,默认状态随着窗体和控件autoredraw属性的设置而不同。在设备场景释放前您必须回复其状态为初始值。对于没有CS_OWNDC,
      CS_CLASSDC 或 CS_PARENTDC样式的窗口的设备场景,可从通用windows缓存中获取,其状态为默认值。缓存中可用设备场景数量是有限的,因此只要可能就释放设备场景
      用本函数获取的设备场景一定要用ReleaseDC函数释放,不能用DeleteDC【参数表】
      hwnd -----------  Long,将获取其设备场景的窗口的句柄。若为0,则要获取整个屏幕的DC
      

  3.   

    SetWindowPos:
    【VB声明】
      Private Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" (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【说明】
      这个函数能为窗口指定一个新位置和状态。它也可改变窗口在内部窗口列表中的位置。该函数与DeferWindowPos函数相似,只是它的作用是立即表现出来的(在vb里使用:针对vb窗体,如它们在win32下屏蔽或最小化,则需重设最顶部状态。如有必要,请用一个子类处理模块来重设最顶部状态 【返回值】
      Long,非零表示成功,零表示失败。会设置GetLastError 【备注】
      窗口成为最顶级窗口后,它下属的所有窗口也会进入最顶级。一旦将其设为非最顶级,则它的所有下属和物主窗口也会转为非最顶级。Z序列用垂直于屏幕的一根假想Z轴量化这种从顶部到底部排列的窗口顺序【参数表】
      hwnd -----------  Long,欲定位的窗口  hWndInsertAfter -  Long,窗口句柄。在窗口列表中,窗口hwnd会置于这个窗口句柄的后面。也可能选用下述值之一:
      HWND_BOTTOM
      将窗口置于窗口列表底部
      HWND_TOP
      将窗口置于Z序列的顶部;Z序列代表在分级结构中,窗口针对一个给定级别的窗口显示的顺序
      HWND_TOPMOST
      将窗口置于列表顶部,并位于任何最顶部窗口的前面
      HWND_NOTOPMOST
      将窗口置于列表顶部,并位于任何最顶部窗口的后面  x --------------  Long,窗口新的x坐标。如hwnd是一个子窗口,则x用父窗口的客户区坐标表示  y --------------  Long,窗口新的y坐标。如hwnd是一个子窗口,则y用父窗口的客户区坐标表示  cx -------------  Long,指定新的窗口宽度  cy -------------  Long,指定新的窗口高度  wFlags ---------  Long,包含了旗标的一个整数
      SWP_DRAWFRAME
      围绕窗口画一个框
      SWP_HIDEWINDOW
      隐藏窗口
      SWP_NOACTIVATE
      不激活窗口
      SWP_NOMOVE
      保持当前位置(x和y设定将被忽略)
      SWP_NOREDRAW
      窗口不自动重画
      SWP_NOSIZE
      保持当前大小(cx和cy会被忽略)
      SWP_NOZORDER
      保持窗口在列表的当前位置(hWndInsertAfter将被忽略)
      SWP_SHOWWINDOW
      显示窗口
      SWP_FRAMECHANGED
      强迫一条WM_NCCALCSIZE消息进入窗口,即使窗口的大小没有改变
      

  4.   

    //wx = IIf(pos.x < 50 Or pos.x > 800, IIf(pos.x < 50, 0, 800), pos.x - 50) /解释下iif语句iif(expression, truepart, falsepart) 当表达式的传回值为True 时执行truepart 字段的程序,反之则执行falsepart 字段。  
      

  5.   

    谢谢楼上的帮忙解答,但是我还有不清楚的地方
     SetWindowPos  hWnd,  hwnd_topmost,  0,  0,  0,  0,  Flags
    (1):4个零中后两个零是指新窗口的高和宽,但运行时窗体高和宽却不为零?新窗口是哪个窗口?
    (2):StretchBlt  hdc,  0,  0,  sx  *  i,  sy  *  i,  GetDC(0),  wx,  wy,  sx,  sy       最搞不懂的就是这句,它怎么实现了鼠标位置将屏幕放大了两倍的效果?希望有人能帮我一下!!!!!!!!
      

  6.   

    Flags 是他的标志为啊.有SWP_NOSIZE,这样就不回改变大小了