为了使ListCtrl能停靠,就继承了停靠控件的类:CMyDockingControlBar:CBCGPDockingControlBar
加入了一个CListCtrl。等我加载完数据后,连续三次选中同一行时,会出现异常。但是,单击新的一行是没有问题的。不知道是不是我的初始化的问题。希望高人指点。我用的版本是9.4下面是这个类的主要结构:#include "stdafx.h"
#include "Test.h"
#include "MyListDockingCtrlBar.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////CMyListDockingCtrlBar::CMyListDockingCtrlBar(){}
CMyListDockingCtrlBar::~CMyListDockingCtrlBar(){}BEGIN_MESSAGE_MAP(CMyListDockingCtrlBar, CBCGPDockingControlBar)
//{{AFX_MSG_MAP(CMyListDockingCtrlBar)
ON_WM_CREATE()
ON_WM_SIZE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/************************************************************************/
/* 窗体响应 */
/************************************************************************/int CMyListDockingCtrlBar::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CBCGPDockingControlBar::OnCreate(lpCreateStruct) == -1)
return -1; //创建列表
CRect rect;
rect.SetRectEmpty();
const DWORD dw_style=WS_CHILD|WS_VISIBLE;
m_ListCtrl.Create("",dw_style,rect,this,ID_VIEW_OVERVIEWCTRLBAR);
//添加列
InitListCtrl(); //追加默认记录
AppendDefaultRow(); return 0;
}void CMyListDockingCtrlBar::OnSize(UINT nType, int cx, int cy)
{
CBCGPDockingControlBar::OnSize(nType, cx, cy);
if (::IsWindow(m_ListCtrl.GetSafeHwnd()))
{
m_ListCtrl.SetWindowPos(NULL,0,0,cx,cy,SWP_NOACTIVATE | SWP_NOZORDER);
}
}/************************************************************************/
/* 数据操作 */
/************************************************************************/void CMyListDockingCtrlBar::InitListCtrl()
{
DWORD dwStyle;
dwStyle = m_ListCtrl.GetStyle(); //取得样式
dwStyle |= LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT ; //添加样式
m_ListCtrl.SetExtendedStyle(dwStyle); //重新设置 m_ListCtrl.InsertColumn(0,"ID",LVCFMT_CENTER,100);
m_ListCtrl.InsertColumn(1,"名称",LVCFMT_CENTER,100);
m_ListCtrl.InsertColumn(2,"大小",LVCFMT_CENTER,100);
}void CMyListDockingCtrlBar::AppendDefaultRow()
{
if (m_ListCtrl.InsertItem(0,"")==-1)
{
return;
}
m_ListCtrl.SetItemText(0,0,"1");
m_ListCtrl.SetItemText(0,1,"文件A");
m_ListCtrl.SetItemText(0,2,"2M");
}
CMyListDockingContrlBar由CMainFrame调用。
有使用过的朋友,请指教下
加入了一个CListCtrl。等我加载完数据后,连续三次选中同一行时,会出现异常。但是,单击新的一行是没有问题的。不知道是不是我的初始化的问题。希望高人指点。我用的版本是9.4下面是这个类的主要结构:#include "stdafx.h"
#include "Test.h"
#include "MyListDockingCtrlBar.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////CMyListDockingCtrlBar::CMyListDockingCtrlBar(){}
CMyListDockingCtrlBar::~CMyListDockingCtrlBar(){}BEGIN_MESSAGE_MAP(CMyListDockingCtrlBar, CBCGPDockingControlBar)
//{{AFX_MSG_MAP(CMyListDockingCtrlBar)
ON_WM_CREATE()
ON_WM_SIZE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/************************************************************************/
/* 窗体响应 */
/************************************************************************/int CMyListDockingCtrlBar::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CBCGPDockingControlBar::OnCreate(lpCreateStruct) == -1)
return -1; //创建列表
CRect rect;
rect.SetRectEmpty();
const DWORD dw_style=WS_CHILD|WS_VISIBLE;
m_ListCtrl.Create("",dw_style,rect,this,ID_VIEW_OVERVIEWCTRLBAR);
//添加列
InitListCtrl(); //追加默认记录
AppendDefaultRow(); return 0;
}void CMyListDockingCtrlBar::OnSize(UINT nType, int cx, int cy)
{
CBCGPDockingControlBar::OnSize(nType, cx, cy);
if (::IsWindow(m_ListCtrl.GetSafeHwnd()))
{
m_ListCtrl.SetWindowPos(NULL,0,0,cx,cy,SWP_NOACTIVATE | SWP_NOZORDER);
}
}/************************************************************************/
/* 数据操作 */
/************************************************************************/void CMyListDockingCtrlBar::InitListCtrl()
{
DWORD dwStyle;
dwStyle = m_ListCtrl.GetStyle(); //取得样式
dwStyle |= LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT ; //添加样式
m_ListCtrl.SetExtendedStyle(dwStyle); //重新设置 m_ListCtrl.InsertColumn(0,"ID",LVCFMT_CENTER,100);
m_ListCtrl.InsertColumn(1,"名称",LVCFMT_CENTER,100);
m_ListCtrl.InsertColumn(2,"大小",LVCFMT_CENTER,100);
}void CMyListDockingCtrlBar::AppendDefaultRow()
{
if (m_ListCtrl.InsertItem(0,"")==-1)
{
return;
}
m_ListCtrl.SetItemText(0,0,"1");
m_ListCtrl.SetItemText(0,1,"文件A");
m_ListCtrl.SetItemText(0,2,"2M");
}
CMyListDockingContrlBar由CMainFrame调用。
有使用过的朋友,请指教下
const DWORD dw_style=WS_CHILD|WS_VISIBLE|LVS_REPORT;//是报告风格下的,才会异常
哎,找到问题了,犯了低级错误。
多了一个'|'运算符,也不用取之前的风格。抵消了部分创建风格,所以出现了除零的异常。
修改
dwStyle |= LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT ; //添加样式
m_ListCtrl.SetExtendedStyle(dwStyle); //重新设置