如何锁定list control的宽度 如何锁定list control的宽度,谁可以提供一个例子给我,多谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://hi.baidu.com/lufa2014/blog/item/0a5c069bbc1017b0c9eaf4fd.html看看这个了! 锁定CListCtrl的宽度?是指CListCtrl的宽度不变还是指CListCtrl的列宽度不变如果是锁定CListCtrl列宽度的话,可以通过继承CListCtrl实现/****************************************CMyListCtrl.h****************************************************/#pragma once#include "HeaderCtrlEx.h"// CMyListCtrlclass CMyListCtrl : public CListCtrl{ DECLARE_DYNAMIC(CMyListCtrl)public: CMyListCtrl(); virtual ~CMyListCtrl();protected: DECLARE_MESSAGE_MAP() virtual void PreSubclassWindow();public: CHeaderCtrlEx m_ctrlHeader;};/****************************************CMyListCtrl.h****************************************************//****************************************CMyListCtrl.cpp****************************************************///子类化CHeaderCtrlExvoid CMyListCtrl::PreSubclassWindow(){ // TODO: Add your specialized code here and/or call the base class CListCtrl::PreSubclassWindow(); m_ctrlHeader.SubclassWindow(::GetDlgItem(m_hWnd,0));}/****************************************CMyListCtrl.cpp****************************************************//****************************************CHeaderCtrl.h****************************************************/#pragma once// CHeaderCtrlExclass CHeaderCtrlEx : public CHeaderCtrl{ DECLARE_DYNAMIC(CHeaderCtrlEx)public: CHeaderCtrlEx(); virtual ~CHeaderCtrlEx();protected: DECLARE_MESSAGE_MAP()public: virtual BOOL OnChildNotify(UINT msg,WPARAM wp,LPARAM lp,LRESULT* pRes);};/****************************************CHeaderCtrl.h****************************************************//****************************************CHeaderCtrl.cpp****************************************************///固定列宽BOOL CHeaderCtrlEx::OnChildNotify(UINT msg,WPARAM wp,LPARAM lp,LRESULT* pRes) { HD_NOTIFY *phdn = (HD_NOTIFY*)lp; if((phdn->hdr.code==HDN_BEGINTRACKA||phdn->hdr.code==HDN_BEGINTRACKW) &&(phdn->iItem==0||phdn->iItem==1||phdn->iItem==2)) { //禁止列被拖动 return *pRes=TRUE; } return CHeaderCtrl::OnChildNotify(msg,wp,lp,pRes); }/****************************************CHeaderCtrl.cpp****************************************************/ 看看这篇文章,有源码的如何锁定 ListView 的栏目头宽度 4楼推荐的源码还是不行,当将鼠标放在两栏之间双击时,栏宽还是会改变。谁可推荐一个List Control的例子,多谢! 重载,在OnSize里面处理(我没试过,不过应该可以) 楼主,写程序要举一反三才行,你应该学习的是例子里的方法上面提供的例子是只限制了拖动HDN_BEGINTRACK消息,只需要再加两行代码就可以限制双击HDN_DIVIDERDBLCLICK消息,限制改变宽度BOOL CLockableHeader::OnChildNotify(UINT msg, WPARAM wp, LPARAM lp, LRESULT* pRes){ NMHDR& nmh = *(NMHDR*)lp; if (nmh.code == HDN_BEGINTRACKA || nmh.code == HDN_BEGINTRACKW) { if (m_bLocked) return *pRes=TRUE; // eat message to disallow sizing } else if(nmh.code == HDN_DIVIDERDBLCLICKA || nmh.code == HDN_DIVIDERDBLCLICKW) { if (m_bLocked) return *pRes=TRUE; // eat message to disallow sizing } // otherwise, pass to header control for default processing return CHeaderCtrl::OnChildNotify(msg, wp, lp, pRes);} [email protected]先谢过9楼的朋友。 在列插入完了之后,可以用下面两句来固定列宽CHeaderCtrl* pHeaderCtrl = (CHeaderCtrl*)m_ListCtrl.GetHeaderCtrl(); pHeaderCtrl->EnableWindow( FALSE ) ; Teechart 如何通过代码来切换2D3D UI线程,可以多个主窗体吗 很简单的问题.希望有明白的点明下 请问:关于注册表操作 问一个最基础的问题(我没碰过VC别笑我)。 莱昂氏UNIX代码分析中的问题!有关malloc 有没有学习网络编程的专门的网站,系统点的 如何实现后台程序 怎样在vc++里面编辑含有多个*.h和*.cpp的大型程序阿??? 如何修改控件 如何获取桌面任务栏中各个窗口的句柄??? UDP穿透NAT打洞问题
看看这个了!
/****************************************CMyListCtrl.h****************************************************/
#pragma once
#include "HeaderCtrlEx.h"
// CMyListCtrlclass CMyListCtrl : public CListCtrl
{
DECLARE_DYNAMIC(CMyListCtrl)public:
CMyListCtrl();
virtual ~CMyListCtrl();protected:
DECLARE_MESSAGE_MAP()
virtual void PreSubclassWindow();public:
CHeaderCtrlEx m_ctrlHeader;
};
/****************************************CMyListCtrl.h****************************************************/
/****************************************CMyListCtrl.cpp****************************************************/
//子类化CHeaderCtrlEx
void CMyListCtrl::PreSubclassWindow()
{
// TODO: Add your specialized code here and/or call the base class
CListCtrl::PreSubclassWindow();
m_ctrlHeader.SubclassWindow(::GetDlgItem(m_hWnd,0));
}
/****************************************CMyListCtrl.cpp****************************************************/
/****************************************CHeaderCtrl.h****************************************************/
#pragma once
// CHeaderCtrlExclass CHeaderCtrlEx : public CHeaderCtrl
{
DECLARE_DYNAMIC(CHeaderCtrlEx)public:
CHeaderCtrlEx();
virtual ~CHeaderCtrlEx();protected:
DECLARE_MESSAGE_MAP()
public:
virtual BOOL OnChildNotify(UINT msg,WPARAM wp,LPARAM lp,LRESULT* pRes);
};
/****************************************CHeaderCtrl.h****************************************************//****************************************CHeaderCtrl.cpp****************************************************/
//固定列宽
BOOL CHeaderCtrlEx::OnChildNotify(UINT msg,WPARAM wp,LPARAM lp,LRESULT* pRes)
{
HD_NOTIFY *phdn = (HD_NOTIFY*)lp;
if((phdn->hdr.code==HDN_BEGINTRACKA||phdn->hdr.code==HDN_BEGINTRACKW)
&&(phdn->iItem==0||phdn->iItem==1||phdn->iItem==2))
{
//禁止列被拖动
return *pRes=TRUE;
} return CHeaderCtrl::OnChildNotify(msg,wp,lp,pRes);
}/****************************************CHeaderCtrl.cpp****************************************************/
楼主,写程序要举一反三才行,你应该学习的是例子里的方法上面提供的例子是只限制了拖动HDN_BEGINTRACK消息,只需要再加两行代码就可以限制双击HDN_DIVIDERDBLCLICK消息,限制改变宽度
BOOL CLockableHeader::OnChildNotify(UINT msg, WPARAM wp, LPARAM lp, LRESULT* pRes)
{
NMHDR& nmh = *(NMHDR*)lp;
if (nmh.code == HDN_BEGINTRACKA || nmh.code == HDN_BEGINTRACKW) {
if (m_bLocked)
return *pRes=TRUE; // eat message to disallow sizing
}
else if(nmh.code == HDN_DIVIDERDBLCLICKA || nmh.code == HDN_DIVIDERDBLCLICKW)
{
if (m_bLocked)
return *pRes=TRUE; // eat message to disallow sizing
}
// otherwise, pass to header control for default processing
return CHeaderCtrl::OnChildNotify(msg, wp, lp, pRes);
}
先谢过9楼的朋友。
CHeaderCtrl* pHeaderCtrl = (CHeaderCtrl*)m_ListCtrl.GetHeaderCtrl();
pHeaderCtrl->EnableWindow( FALSE ) ;