自己绘制Panel
Javpp 2005-09-19 11:12:07 我按照如下方法自己绘制Panel,
TCanvas *tmp = new TControlCanvas ();
((TControlCanvas *)tmp)->Control = Panel1;
tmp->Brush->Color = clBlack;
tmp->LineTo (100, 100);
delete tmp;
tmp = NULL;
绘制效果没问题,但是在CB环境中打开CodeGuard选项后,如下信息:
Error 00030. 0x130C10 (Thread 0x0F28):
Method called on illegally casted object: Attempt to access 104 byte(s) at
0x00E60544. The 'this' pointer points to heap block 0x00E60544 which is only
100 bytes long.
Call Tree:
0x00401F16(=DTExe.exe:0x01:000F16) e:\winxp\program files\borland\cbuilder6\include\vcl\Controls.hpp#1340
0x00401CC3(=DTExe.exe:0x01:000CC3) G:\Cpp\DuctType\Source\Exe\MainFrm\MainFrm.cpp#42
0x00450790(=DTExe.exe:0x01:04F790)
0x004016B5(=DTExe.exe:0x01:0006B5) G:\Cpp\DuctType\Source\Exe\DTExe.cpp#14
0x0048911B(=DTExe.exe:0x01:08811B)
The memory block (0x00E60544) [size: 100 bytes] was allocated with SysGetMem
Call Tree:
0x004267DF(=DTExe.exe:0x01:0257DF)
0x00401CC3(=DTExe.exe:0x01:000CC3) G:\Cpp\DuctType\Source\Exe\MainFrm\MainFrm.cpp#42
0x00450790(=DTExe.exe:0x01:04F790)
0x004016B5(=DTExe.exe:0x01:0006B5) G:\Cpp\DuctType\Source\Exe\DTExe.cpp#14
0x0048911B(=DTExe.exe:0x01:08811B)
------------------------------------------
Functions called:
fflush (4 times)
delete (11 times)
free (7 times)
new (11 times)
SysReallocMem (54 times)
SysFreeMem (2419 times)
SysGetMem (2420 times)
lstrlenA (1 times)
lstrcpynA (4 times)
calloc (1 times)
strlen (65 times)
realloc (1 times)
strdup (1 times)
malloc (4 times)
memcpy (2 times)
Resource types used:
object (11 allocs, 11 max)
memory block (2427 allocs, 933 max)
Modules used:
00400000 09/17/2005 21:34:06 G:\Cpp\DuctType\Source\Bin\DTExe.exe
00FF0000 10/07/2002 12:00:00 C:\WINDOWS\System32\msctfime.ime
0CD00000 01/31/2000 05:00:00 C:\PROGRA~1\Borland\CBUILD~1\Bin\CG32.DLL
41000000 01/24/2000 05:01:00 C:\PROGRA~1\Borland\Delphi5\Bin\borlndmm.dll
5ADC0000 10/07/2002 12:00:00 C:\WINDOWS\System32\uxtheme.dll
62C20000 10/07/2002 12:00:00 C:\WINDOWS\System32\LPK.DLL
72F10000 10/07/2002 12:00:00 C:\WINDOWS\System32\USP10.dll
74680000 10/07/2002 12:00:00 C:\WINDOWS\System32\MSCTF.dll
76300000 10/07/2002 12:00:00 C:\WINDOWS\System32\IMM32.DLL
770F0000 10/07/2002 12:00:00 C:\WINDOWS\system32\OLEAUT32.DLL
77310000 10/07/2002 12:00:00 C:\WINDOWS\system32\COMCTL32.DLL
77BD0000 10/07/2002 12:00:00 C:\WINDOWS\system32\VERSION.DLL
77BE0000 10/07/2002 12:00:00 C:\WINDOWS\system32\MSVCRT.DLL
77C40000 10/07/2002 12:00:00 C:\WINDOWS\system32\GDI32.dll
77D10000 11/22/2002 12:30:24 C:\WINDOWS\system32\USER32.DLL
77DA0000 10/07/2002 12:00:00 C:\WINDOWS\system32\ADVAPI32.dll
77E40000 10/07/2002 12:00:00 C:\WINDOWS\system32\kernel32.dll
77F50000 05/01/2003 16:57:50 C:\WINDOWS\System32\ntdll.dll
78000000 08/26/2003 04:23:48 C:\WINDOWS\system32\RPCRT4.dll
7CAB0000 08/26/2003 04:23:48 C:\WINDOWS\system32\OLE32.DLL
==========================================
用如下方法就没有!!!
TCanvas *tmp = new TCanvas ();
tmp->Handle = GetDC (Panel1->Handle);
tmp->Brush->Color = clBlack;
tmp->LineTo (100, 100);
ReleaseDC(Panel1->Handle, tmp->Handle);
delete tmp;
tmp = NULL;
但画的时候总是把我指定的颜色画成黑线,我用了4次LINETO画了一个框,总是有3条线的颜色是黑色的,有时候又不是
不解...