hur.cn - 华软网

 热门搜索

求助:关于ClistCtrl 急急急!!

  作者:未知    来源:网络    更新时间:2010/12/7
小弟创建了个MFC SDI程序,创建时选择的基类是CVIEW类。现在我想在主窗口中显示一个表格出来,而且能够打印。听说用CLISTTRL能够做到,然则怎么做呢?谢谢了。PS:由于是鉴于CVIEW类的,所以不能从控件里面直接拖到界面上。再次谢谢高手指点一下。急死了。。实在不知道怎么办了。
---华软 网友回答---
用CListView
---华软网友回复---
动态创建
---华软网友回复---
CListView动态创建
---华软网友回复---
在你的头资料里声明一个CListCtrl变量:
CListCtrl m_lstTemp;
然后在初始化函数里动态创建:
m_lstTemp.Create(
   dwStyle,
   rect,
   pParentWnd,
   nID)
详细参数作用参见MSDN

---华软网友回复---
引用 4 楼 coolthanice 的回复:
在你的头资料里声明一个CListCtrl变量:
CListCtrl m_lstTemp;
然后在初始化函数里动态创建:
m_lstTemp.Create(
  dwStyle,
  rect,
  pParentWnd,
  nID)
详细参数作用参见MSDN


恩,能够试试楼上说的动态创建
---华软网友回复---
我在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
}
---华软网友回复---
引用 6 楼 trslm 的回复:
我在ONDRAW里面写了下面函数,也不显示LISTCTRL出来啊!!

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


肯能是局部变量的原因,你把CListCtrl listCtrl;
改成一个指针,这样就在堆上分配了内存,这个函数结束也不会释放这个list资源
---华软网友回复---
嗯,是局部原因。谢谢你啊。我把初始化的创建放到了
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
}

---华软网友回复---
C++">
#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);
这句去掉,没需要
---华软网友回复---
你好,按照您说的,我增加了OnCreateListView,而且在MSG MAP里面也联系关系了消息和命令。
ON_COMMAND(UM_CREATELISTVIEW, CTestctrlView::OnCreateListView)
可是主窗口照旧不显示这个控件,打印预览也不显示。我不是哪一个地方操作错了?谢谢你了啊。
C++">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;
}

引用 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
 //……

---华软网友回复---
ON_COMMAND(UM_CREATELISTVIEW, CTestctrlView::OnCreateListView)
-->
ON_MESSAGE(UM_CREATELISTVIEW, CTestctrlView::OnCreateListView)
---华软网友回复---
谢谢,窗口能显示这个控件,然则一点打印预览LISTCTRL照旧显示不出来。主要还要用于打印这个LISTCTRL。
---华软网友回复---
是否是还要做一些其余的操作才能让CLISTCTRL在打印预览的时候显示出来,万分谢谢。
---华软网友回复---
引用 4 楼 coolthanice 的回复:
在你的头资料里声明一个CListCtrl变量:
CListCtrl m_lstTemp;
然后在初始化函数里动态创建:
m_lstTemp.Create(
  dwStyle,
  rect,
  pParentWnd,
  nID)
详细参数作用参见MSDN

支持      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。