我用Delphi在Form上画图,觉得Delphi提供的有限的几个画图函数功能不够,所以我想直接使用win API函数。当要取得‘设备环境表’时,不知该使用哪个窗口句柄。
我曾经分别用
form1.Handle
form1.Canvas.Handle
application.Handle
做为参数传递给 GetDc(hwnd)
但是画出来的图形要么不显示,要么显示在桌面上,从不显示在我的程序框架中,
请问这是为什么?我该传递哪个参数做为句柄?谢谢!!

解决方案 »

  1.   

    用:HWND:=GetWindowDC(Form1.Handle);
      

  2.   

    来来给一个例子
    procedure TForm1.Button1Click(Sender: TObject);
    var
      //
      DC:HDC;
      brush:HBRUSH;
      PEN:HPEn;
      oldmode:integer;
      //
      PointsArr:Array[0..3] of TPoint;
    begin
      DC:=GetDC(Handle);  brush:=0;
      pen:=0;
      //  try
        brush:=CreateSolidBrush(Clred);
        oldMode:=SetBkMode(DC,Transparent);//
        SelectObject(DC,brush);    Pen:=CreatePen(PS_SOLID,1,clred);
        SelectObject(DC,Pen);    //SetLength(PointsArr,4);
        ShowMessage(IntToStr(SizeOf(PointsArr))); //长度为32个字节,如果用原来你的setlength,长度仍为4个字节
        PointsArr[0]:=Point(20,2);
        PointsArr[1]:=Point(120,6);
        PointsArr[2]:=Point(100,200);
        PointsArr[3]:=Point(20,200);    Windows.Polygon(DC,PointsArr, 4); //??
      finally
        DeleteObject(brush);
        DeleteObject(PEN);
      end;  SetBkMode(DC,oldMode);//
    end;