窗口句柄问题不清?   edit1.Text:=inttostr(getdc(self.Handle));
   edit2.Text:=inttostr(getdc(self.Handle));
   edit3.Text:=inttostr(getdc(self.Handle));
   
   突然发现三个Edit的显示内容竟多不一样?奇怪吗?
   
   难到只能先用变量保存起来这一种解决办法吗?(为了统一使用)
   
var
   hdcTemp:HDC;
Begin
   hdcTemp:=GetDC(Self.Handle);
   ...
End;

解决方案 »

  1.   

    我的目的是在获得了HDC之后,用作Win API函数的HDC句柄。1、下面正确?
    var
       HDCt:HDC;
    Begin
       HDCt:=GetDC(Self.Handle);
       
       SetBkMode(HDCt,TRANSPARANT);
       SetBkColor(HDCt,RGB(255,0,0));   Ellipse(HDCt,100,100,200,200);
    End;   
    2、下面则不对?
    var
       {HDCt:HDC;}
    Begin
       {HDCt:=GetDC(Self.Handle);}   SetBkMode(GetDC(Self.Handle),TRANSPARANT);
       SetBkColor(GetDC(Self.Handle),RGB(255,0,0));   Ellipse(GetDC(Self.Handle),100,100,200,200);
    End;
      

  2.   

    GetDC的结果是临时生成的,不是一个固定的东西。所以GetDC后一般要 ReleaseDC 。
    比如:
    var
      H:HDC;
    begin
      H := getdc(self.Handle);
      edit1.Text:=inttostr(H);
      ReleaseDC(self.Handle, H);
      edit2.Text:=inttostr(getdc(self.Handle)); //此时edit2和edit1的Text是一样的
     end;