ccrun(老妖) Edit的WM_PAINT消息,画完后怎么 恢复原状态?

kysoft 2006-11-14 04:37:16
ccrun(老妖)(www.ccrun.com) ( ) 信誉:157 Blog 2006-11-14 0:02:12

理论上来说,没有什么做不到的事情。
子类化TEdit,然后响应Edit的WM_PAINT消息,随便画哦。

单元文件.h中:
private:// User declarations
void __fastcall CrnEditNewProc(TMessage &Msg);

单元文件的.cpp中:
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Edit1->Enabled = false;
Edit1->WindowProc = CrnEditNewProc;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CrnEditNewProc(TMessage &Msg)
{
Edit1->Dispatch(&Msg);
if(Msg.Msg == WM_PAINT)
{
TControlCanvas *pCanvas = new TControlCanvas;
pCanvas->Control = Edit1;
TRect rct(0, 0, Edit1->BoundsRect.Width(), Edit1->BoundsRect.Height());
pCanvas->FillRect(rct);
pCanvas->Font->Color = clBlue;
pCanvas->TextRect(rct, 1, 1, Edit1->Text);
delete pCanvas;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Edit1->Text = "嘿嘿,测试";
}


当Edit1->Enabled=true; 时

怎样恢复,没有画前的状态呢?
...全文
242 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
kysoft 2006-11-14
  • 打赏
  • 举报
回复
真的很感谢ccrun(老妖)的回复!!!
玄之丞 2006-11-14
  • 打赏
  • 举报
回复
好像在研究语法高亮的说. mark.
wood542344 2006-11-14
  • 打赏
  • 举报
回复
要懂得举一反三啊。。。。。
ccrun.com 2006-11-14
  • 打赏
  • 举报
回复
简单,只需在CrnEditNewProc过程中添加一个条件判断即可,如下:

void __fastcall TForm1::CrnEditNewProc(TMessage &Msg)
{
Edit1->Dispatch(&Msg);
if(Msg.Msg == WM_PAINT && Edit1->Enabled == false)
{
TControlCanvas *pCanvas = new TControlCanvas;
pCanvas->Control = Edit1;
TRect rct(0, 0, Edit1->BoundsRect.Width(), Edit1->BoundsRect.Height());
pCanvas->FillRect(rct);
pCanvas->Font->Color = clBlue;
pCanvas->TextRect(rct, 1, 1, Edit1->Text);
delete pCanvas;
}
}

13,825

社区成员

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

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