关于Tbitmap->Canvas->Handle的奇怪问题

netying 2024-02-13 13:10:17

看这段简单代码:

-----------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    for(int i=0;i<100;i++)
    {
        Graphics::TBitmap *bitmap=new  Graphics::TBitmap();
        bitmap->PixelFormat=pf24bit;
        bitmap->Width=256;
        bitmap->Height=256;
        HDC h=bitmap->Canvas->Handle;

        Memo1->Lines->Add(""); //如果注释掉此句,则OK,否则,HandleAllocated error。why?

        if(bitmap->Canvas->HandleAllocated())
        {
            Memo1->Lines->Add("OK:"+String(i));
        }
        else
        {
            Memo1->Lines->Add("HandleAllocated error: "+String(i));
        }
        delete bitmap;
    }

}

-----------------------------------

大家看到其中:

Memo1->Lines->Add(""); //如果注释掉此句,则OK,否则,HandleAllocated error。why?

 

...全文
804 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
geochway 2024-02-25
  • 打赏
  • 举报
回复 1

一般来说,当程序要开始直接对Canvas进行绘图输出操作时,需要对Canvas进行锁定,
才能保证Canvas内部资源不被自动释放,否则有可能会出现输出异常的情况,操作完成再进行解锁。
需要加入如下语句:
Canvas绘图操作前:
bitmap->Canvas->Lock();
Canvas绘图完成后:
bitmap->Canvas->Unlock();

netying 2024-02-26
  • 举报
回复
@geochway 加上这两句确实有效果.谢谢
原子星 2024-02-13
  • 打赏
  • 举报
回复

不能加空串吧,如果要换行可以加个换行符试试"\n"

netying 2024-02-13
  • 举报
回复
@原子星 都一样,只要这里有输出,HandleAllocated 就返回false,真是奇怪。

13,871

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧