怎样在listview中触发列宽度变化事件?

DblSun 2005-02-01 03:18:38
在ListView中的object inspector中为什么没有OnColumnResize事件触发?
如果想要触发这个事件(就是在列宽度变化的时候),在listview所作工作的基础上再做一些事情,应该怎么做呢?
...全文
151 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ccrun.com 2005-02-02
  • 打赏
  • 举报
回复
世上无难事,只怕有心人哦。
子类化ListView,处理WM_NOTIFY消息就可以实现对改变列头宽度事件的响应或拦截。
以下是简单代码:

在.h文件中添加以下代码:
private: // User declarations
TWndMethod OldProc;
void __fastcall NewProc(TMessage &Message);

在.cpp文件中添加以下代码:
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
OldProc = lv1->WindowProc;
lv1->WindowProc = NewProc;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::NewProc(TMessage &Message)
{
if(Message.Msg == WM_NOTIFY)
{
HD_NOTIFY *hn = (HD_NOTIFY *)Message.LParam;
if(hn->hdr.code == HDN_BEGINTRACKA || hn->hdr.code == HDN_BEGINTRACKW)
{
Message.Result = 1; // 加入这一行就使的列头不能改变宽度
// 如果要在拖动完成后作处理,可以判断hn->hdr.code是否
// 等于HDN_ENDTRACKA或HDN_ENDTRACKW,然后作处理。
}
}
else
lv1->Dispatch(&Message);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
lv1->WindowProc = OldProc;
}
jinhaiwu 2005-02-02
  • 打赏
  • 举报
回复
把头换成THeadContral
cczlp 2005-02-01
  • 打赏
  • 举报
回复
不知道为什么没有
Maconel 2005-02-01
  • 打赏
  • 举报
回复
是没有,那就用OnCustomDraw凑合吧。

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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