求教,关于HDC(100分)

  • 主题发起人 主题发起人 aaben
  • 开始时间 开始时间
A

aaben

Unregistered / Unconfirmed
GUEST, unregistred user!
以下程序绘制两个圆,奇怪的是他们的基点不同,
一个是在PANEL1上绘,另一个则在FORM1上绘,为什么会有这种情况?
如果将RELEASE或TEST.ENABLED:=FALSE句去掉,则正常.
(TEST是主菜单项), 请高手指点.

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Menus;

type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
test: TMenuItem;
Panel1: TPanel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var mydc:hdc;
begin
mydc:=getdc(panel1.handle);
releasedc(handle,mydc);
test.enabled:=false;
ellipse(getdc(panel1.handle),20,20,50,50);
ellipse(mydc,30,30,60,60);
end;
 
releasedc(handle,mydc);
-----释放给上一级,也就是form了。

test.enabled:=false?不清楚


















 
那为什么没有test.enabled:=false语句的情况下,MYDC还是PANEL1的呢?
 
procedure TForm1.testEnabledClick(Sender: TObject);
begin
test.enabled:=not test.enabled;
end;
//TForm1.Panel1DblClick use FormDblClick
procedure TForm1.FormDblClick(Sender: TObject);
var
Pos:TPoint;
begin
GetCursorPos(Pos);
showmessage(floattostr(Pos.x)+'---'+ floattostr(Pos.y));
end;

测试坐标是一样的,不论test.enabled:=什么.

我也不知道为什么.

 
我知道和test.enabled的值无关,我只是不明白为什么这句语句的
执行会导致MYDC指向的不同.MYDC原来是PANEL1的,后来却自动变成
FORM1的了,为什么?
 
千中元不是说了吗
 
还是不明白.
 
>>mydc:=getdc(panel1.handle);
取得Panel1的DC
releasedc(handle,mydc);
把mydc作为form的DC进行释放. (估计失败了, 也难说, 如果成功的话mydc指向的肯定
是非法DC).
明显错误的调用当然会出现不可预测的结果.
 
多人接受答案了。
 
后退
顶部