请问在屏幕截图,并且绘制鼠标,一般为箭头时能正确显示,为漏斗或其他图标时位置会有些偏差。    
    Bitmap := TBitmap.Create;
    Bitmap.Width := Screen.Width;
    Bitmap.Height := Screen.Height;
    Canvas := TCanvas.Create;
    DC := GetDC(0);
    Canvas.Handle := DC;
    Cursor := TIcon.Create;
    Bitmap.Canvas.CopyRect(Bitmap.Canvas.ClipRect, Canvas, Bitmap.Canvas.ClipRect);
    GetCursorPos(CurPoint);
    Cursor.Handle := GetCursor;
    Bitmap.Canvas.Draw(CurPoint.X, CurPoint.Y, Cursor);
可能是由于其他光标的焦点不在左上角,造成偏差,如果是这样那应该怎样获得这焦点的坐标?

解决方案 »

  1.   


    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls;type
      TForm1 = class(TForm)
        Image1: TImage;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
        Bitmap: TBitmap;
        Canvas: TCanvas;
        DC: HDC;
        Cursor: TIcon;
        CurPoint: TPoint;
    begin
        Bitmap := TBitmap.Create;
        Bitmap.Width := Screen.Width;
        Bitmap.Height := Screen.Height;
        Canvas := TCanvas.Create;
        DC := GetDC(0);
        Canvas.Handle := DC;
        Cursor := TIcon.Create;
        Bitmap.Canvas.CopyRect(Bitmap.Canvas.ClipRect, Canvas, Bitmap.Canvas.ClipRect);
        GetCursorPos(CurPoint);
        Cursor.Handle := GetCursor;
        Bitmap.Canvas.Draw(CurPoint.X, CurPoint.Y, Cursor);
        Image1.Picture.Bitmap.Assign(Bitmap);
        Cursor.Free;
        Bitmap.Free;
        Canvas.Free;
        ReleaseDC(0, DC);
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin 
        Screen.Cursor := crHourGlass;
        Image1.Align := alClient;
    end;end.像这样偏差就比较大了
      

  2.   

    或者如何获得这焦点在icon中的坐标,不同的光标不一样,自定义的光标就更随意了
      

  3.   

    GetIconInfo(Cursor.Handle, pIconInfo);
    Bitmap.Canvas.Draw(CurPoint.X - pIconInfo.xHotspot, CurPoint.Y - pIconInfo.yHotspot, Cursor);
    这下可以了,获取光标焦点坐标