求助:关于ClistCtrl 急急急!!

trslm 2010-12-07 10:41:19
小弟创建了个MFC SDI程序,创建时选择的基类是CVIEW类。现在我想在主窗口中显示一个表格出来,并且能够打印。听说用CLISTTRL可以做到,但是怎么做呢?谢谢了。PS:因为是基于CVIEW类的,所以不能从控件里面直接拖到界面上。再次谢谢高手指点一下。急死了。。实在不知道怎么办了。
...全文
113 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
youhao1999 2010-12-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 coolthanice 的回复:]
在你的头文件里声明一个CListCtrl变量:
CListCtrl m_lstTemp;
然后在初始化函数里动态创建:
m_lstTemp.Create(
dwStyle,
rect,
pParentWnd,
nID)
具体参数作用参见MSDN
[/Quote]
支持
trslm 2010-12-07
  • 打赏
  • 举报
回复
是不是还要做一些其他的操作才能让CLISTCTRL在打印预览的时候显示出来,万分感谢。
trslm 2010-12-07
  • 打赏
  • 举报
回复
谢谢,窗口能显示这个控件,但是一点打印预览LISTCTRL还是显示不出来。主要还要用于打印这个LISTCTRL。
Eleven 2010-12-07
  • 打赏
  • 举报
回复
ON_COMMAND(UM_CREATELISTVIEW, CTestctrlView::OnCreateListView)
-->
ON_MESSAGE(UM_CREATELISTVIEW, CTestctrlView::OnCreateListView)
trslm 2010-12-07
  • 打赏
  • 举报
回复
你好,按照您说的,我添加了OnCreateListView,并且在MSG MAP里面也关联了消息和命令。
ON_COMMAND(UM_CREATELISTVIEW, CTestctrlView::OnCreateListView)
可是主窗口还是不显示这个控件,打印预览也不显示。我不是哪个地方操作错了?谢谢你了啊。
BEGIN_MESSAGE_MAP(CTestctrlView, CView)
//{{AFX_MSG_MAP(CTestctrlView)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)

ON_COMMAND(UM_CREATELISTVIEW, CTestctrlView::OnCreateListView)
END_MESSAGE_MAP()
LRESULT CTestctrlView::OnCreateListView(WPARAM wParam, LPARAM lParam)
{
CRect rect;
this->GetClientRect(rect);
if(listCtrl.Create(WS_CHILD|WS_VISIBLE|LVS_REPORT|LVS_EX_GRIDLINES,rect,this,0))
{
listCtrl.InsertColumn(0,_T("column 1"));
listCtrl.InsertColumn(1,_T("column 2"));
listCtrl.InsertColumn(2,_T("column 3"));
listCtrl.InsertItem(0,"aaa");
}
return 0;
}

[Quote=引用 9 楼 visualeleven 的回复:]
C/C++ code

#define UM_CREATELISTVIEW WM_USER+0x11

void CTestctrlView::OnInitialUpdate()
{
CView::OnInitialUpdate();

// TODO: Add your specialized code here and/or call the base class
//……
[/Quote]
Eleven 2010-12-07
  • 打赏
  • 举报
回复

#define UM_CREATELISTVIEW WM_USER+0x11

void CTestctrlView::OnInitialUpdate()
{
CView::OnInitialUpdate();

// TODO: Add your specialized code here and/or call the base class
// 发送自定义消息
PostMessage(UM_CREATELISTVIEW, 0, 0);
}
// 自定义消息响应函数
LRESULT CTestctrlView::OnCreateListView(WPARAM wParam, LPARAM lParam)
{
CRect rect;
GetClientRect(rect);
if(listCtrl.Create(WS_CHILD|WS_VISIBLE|LVS_REPORT|LVS_EX_GRIDLINES,rect,this,0))
{
listCtrl.InsertColumn(0,_T("column 1"));
listCtrl.InsertColumn(1,_T("column 2"));
listCtrl.InsertColumn(2,_T("column 3"));
listCtrl.InsertItem(0,"aaa");
}
return 0;
}

修改成这样,OnDraw函数中的listCtrl.ShowWindow(SW_SHOW);
这句去掉,没必要
trslm 2010-12-07
  • 打赏
  • 举报
回复
嗯,是局部原因。谢谢你啊。我把初始化的创建放到了
void CTestctrlView::OnInitialUpdate() 函数中。并且在ONDRAW函数里面也写了 listCtrl.ShowWindow(SW_SHOW);
但是程序运行能显示这个控件了,但是点打印预览这个控件就显示不出来,这个怎么办呢?万分感谢。
程序如下:
void CTestctrlView::OnInitialUpdate()
{
CView::OnInitialUpdate();

// TODO: Add your specialized code here and/or call the base class
CRect rect;
this->GetClientRect(rect);
if(listCtrl.Create(WS_CHILD|WS_VISIBLE|LVS_REPORT|LVS_EX_GRIDLINES,rect,this,0))
{
listCtrl.InsertColumn(0,_T("column 1"));
listCtrl.InsertColumn(1,_T("column 2"));
listCtrl.InsertColumn(2,_T("column 3"));
listCtrl.InsertItem(0,"aaa");
listCtrl.ShowWindow(SW_SHOW);
}
}

void CTestctrlView::OnDraw(CDC* pDC)
{
CTestctrlDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

listCtrl.ShowWindow(SW_SHOW);
// TODO: add draw code for native data here
}
树先生1991 2010-12-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 trslm 的回复:]
我在ONDRAW里面写了下面函数,也不显示LISTCTRL出来啊!!

void CTestctrlView::OnDraw(CDC* pDC)
{
CTestctrlDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CListCtrl listCtrl;
CRect rect;
this->GetClientRect(rect);
i……
[/Quote]

肯能是局部变量的原因,你把CListCtrl listCtrl;
改成一个指针,这样就在堆上分配了内存,这个函数结束也不会释放这个list资源
trslm 2010-12-07
  • 打赏
  • 举报
回复
我在ONDRAW里面写了下面函数,也不显示LISTCTRL出来啊!!

void CTestctrlView::OnDraw(CDC* pDC)
{
CTestctrlDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CListCtrl listCtrl;
CRect rect;
this->GetClientRect(rect);
if(listCtrl.Create(WS_CHILD|WS_VISIBLE|LVS_REPORT|LVS_EX_GRIDLINES,rect,this,0))
{
listCtrl.InsertColumn(0,_T("column 1"));
listCtrl.InsertColumn(1,_T("column 2"));
listCtrl.InsertColumn(2,_T("column 3"));
listCtrl.ShowWindow(SW_SHOW);
}

// TODO: add draw code for native data here
}
树先生1991 2010-12-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 coolthanice 的回复:]
在你的头文件里声明一个CListCtrl变量:
CListCtrl m_lstTemp;
然后在初始化函数里动态创建:
m_lstTemp.Create(
dwStyle,
rect,
pParentWnd,
nID)
具体参数作用参见MSDN
[/Quote]

恩,可以试试楼上说的动态创建
coolthanice 2010-12-07
  • 打赏
  • 举报
回复
在你的头文件里声明一个CListCtrl变量:
CListCtrl m_lstTemp;
然后在初始化函数里动态创建:
m_lstTemp.Create(
dwStyle,
rect,
pParentWnd,
nID)
具体参数作用参见MSDN
jacklzw88 2010-12-07
  • 打赏
  • 举报
回复
CListView动态创建
jacklzw88 2010-12-07
  • 打赏
  • 举报
回复
动态创建
visualwind 2010-12-07
  • 打赏
  • 举报
回复
用CListView

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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