首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

把TCanvas的Handle(即DC)传到DLL

2013-01-09 
把TCanvas的Handle(即DC)传入DLL大家好,我写了一个画直线的DLL(CB6写的),然后测试程序(也是CB6写的)传入画

把TCanvas的Handle(即DC)传入DLL
大家好,我写了一个画直线的DLL(CB6写的),然后测试程序(也是CB6写的)传入画布的DC句柄,DLL里面在这个DC上画线,但是判断传过来的DC句柄是无效的,但是如果传入屏幕的DC,DLL里面画线有效;
并且调试时发现画布句柄的值在传入前后是一样的,既然一样,为何一传入DLL中就成无效句柄了呢,而传屏幕DC就有效呢?在下百思不得其解,望各位高人不吝解答。

我不知道我有没有分可给,第一次发贴,若有分定给。
[解决办法]
不知你的bcb的DLL是怎么画线的,要注意的是Form的Handle与Canvas的Handle是两个不同的概念,Form的Hadnle是窗口的句柄,而Canvas的Handle是HDC(设备的名柄)
如果你用API来画线,Form的Handle要用GetDC先得到HDC,才能画,而Canvas的Handle可直接调用LineTo
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   LineTo(Handle,100,100);    //错误,windwos的Handle不是HDC
   LineTo(GetDC(Handle),100,200); //正确
   LineTo(Canvas->Handle,100,300);  //正确
   LineTo(GetDC(Canvas->Handle),100,400); //错误,GetDC要求windows Handle
}

热点排行