📄 subject_24566.htm
字号:
<p>
序号:24566 发表者:小肚鸡肠 发表日期:2002-12-13 19:41:28
<br>主题:在SDI体系结构下,如何像弹出对话一样"弹"出一个带关闭按钮的列表视图(CListView)?
<br>内容:我想要得到这样的结果:当在菜单中单击[查询]菜单项时,程序就会像弹出About对话框一样弹出一个列表视图。视图的内容是从数据源中返回的记录。<BR><BR>但是,我发现当我new出一个从CListView派生出来的列表视图,调用它的Create和OnInitialUpdate后,再调用ShowWindow(SW_SHOW)后,视图是出来了,可是它无法获得输入焦点、也没有关闭按钮。这些无法实现的功能对我很重要,因为程序的使用者查看完查询结果后会关闭掉显示查询结果的窗口,返回主窗口继续工作,[查询]菜单项的命令处理过程我是这样设计的:<BR><BR>void CMainFrame::OnFileQuery() <BR>{<BR> CQueryDlg dlg(AfxGetMainWnd()) ;<BR><BR> if(dlg.DoModal() == IDOK) // 显示查询对话框<BR> {<BR> CQuerySet QueryResultSet ; // 实例化一个记录集对象<BR> QueryResultSet.m_strFilter = "DeviceName_cn = ?" ; // 构造一个带参数的过滤器<BR><BR> QueryResultSet.m_strNameCNParam = dlg.m_strNameCN ; <BR> QueryResultSet.Open() ; // 返回符合条件的记录<BR><BR> CRect rect ;<BR> GetClientRect(&rect) ;<BR> rect.left += 30 ;<BR> rect.right -= 30 ;<BR> rect.top += 30 ;<BR> rect.bottom -= 30 ; // 设置显示查询结果的CListView客户区大小<BR><BR> CQueryResult *pResult ; // CQueryResult是一个从CListView派生的列表视图<BR> pResult = new CQueryResult ; // 这里只能new,如果在堆栈上实例化对象,当函数返回时,视图对象将自行销毁<BR> pResult->Create(NULL, NULL, WS_CAPTION | WS_SYSMENU | LVS_NOSORTHEADER | LVS_SINGLESEL, rect, this, ID_QUERYRESULT) ;<BR><BR> pResult->GetListCtrl().InsertColumn(0, _T("设备中文名"), LVCFMT_LEFT, 100) ;<BR> pResult->GetListCtrl().InsertColumn(1, _T("设备英文名"), LVCFMT_RIGHT, 100) ;<BR> pResult->GetListCtrl().InsertColumn(2, _T("价格"), LVCFMT_RIGHT, 100) ;<BR> pResult->GetListCtrl().InsertColumn(3, _T("所属科室"), LVCFMT_RIGHT, 100) ;<BR><BR> pResult->GetListCtrl().InsertItem(0, QueryResultSet.m_DeviceName_cn) ;<BR> pResult->GetListCtrl().SetItemText(0, 1, QueryResultSet.m_DeviceName_en) ;<BR> char cTemp[100] ;<BR> ::itoa(QueryResultSet.m_Price, cTemp, 10) ;<BR> pResult->GetListCtrl().SetItemText(0, 2, cTemp) ;<BR> pResult->GetListCtrl().SetItemText(0, 3, QueryResultSet.m_Family) ;<BR><BR> pResult->OnInitialUpdate() ;<BR> pResult->ShowWindow(SW_SHOW) ;<BR> pResult->SetFocus() ; // 虽然执行了这一句,但列表视图仍然无法获得输入焦点<BR> }<BR>}<BR><BR><BR>这段程序无法实现列表视拥有标题栏(也就没有关闭按钮),列表视图不能响应用户的键盘与鼠标消息,因为它没有输入焦点。我该怎么办?<BR><BR>怎样"弹"出一个带标题栏(关闭按钮)并能拥有输入焦点的CListView?<BR><BR>请帮帮我,谢谢!<BR><BR>见附图<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:太平冰水 回复日期:2002-12-15 11:08:22
<br>内容:作一个无模式对话框,将listview放在对话框中
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:小肚鸡肠 回复日期:2002-12-15 17:41:35
<br>内容:请用实例指教
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:凯凯 回复日期:2002-12-15 18:00:37
<br>内容:在资源编辑器中做一个对话框,画一个List在对话框上,从CDialog派生一个类。为这个List加一个成员变量。将你在原来视图中的代码,copy过来即可。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:太平冰水 回复日期:2002-12-15 18:19:05
<br>内容:kanklan
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:太平冰水 回复日期:2002-12-15 18:24:34
<br>内容:rgrgsthtrhy
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:小肚鸡肠 回复日期:2002-12-16 18:35:11
<br>内容:可是,凯凯,列表控件没有表头啊,它不能显示多列,也不能单地击表头时进行排序,怎么办?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:bottle_fish 回复日期:2002-12-17 13:21:03
<br>内容:当然可以了,列表控件都可以做到<BR>你找个demo看看吧,太多了,人懒
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:凯凯 回复日期:2002-12-17 15:12:20
<br>内容:列表控件选为Report模式就有表头了,也可以显示多列。如果要单击表头排序要另外写排序的回调函数。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:小肚鸡肠 回复日期:2002-12-18 16:44:53
<br>内容:Thank your...
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:小肚鸡肠 回复日期:2002-12-18 20:34:31
<br>内容:凯凯,问题还没解决完啊!<BR><BR>我在对话框中画了一个列表控件,并基于此对话框模板创建了一个类。但是,我该如何在对话框的WM_INITDIALOG消息期间改变列表控件的大小让其充满父窗口(即对话框)的整个客户区呢?<BR><BR>还有,列表控件窗体的创建是自动的,我该如何改变它的风格为Report呢?列表控件没有SetWindowStyle()方法啊!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:小肚鸡肠 回复日期:2002-12-18 20:35:23
<br>内容:急啊~~~~
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:凯凯 回复日期:2002-12-18 21:22:59
<br>内容:用list控件的MoveWindow方法要以改变它的位置和大小。<BR><BR>在资源编辑器中就可以设置它为Report模式。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:小肚鸡肠 回复日期:2002-12-18 21:52:09
<br>内容:是不是在List Box属性对话框[style]标签页里选中Multi-column就是多列啦?<BR><BR>不行啊,出来的列表控件还是单列!<BR><BR>我抓了图,你看看。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:小肚鸡肠 回复日期:2002-12-18 22:01:14
<br>内容:好像确实是多列显示哦,但怎么没有表头啊?<BR><BR>列表控件好像没有SetItemText()函数用来设置子项目数据,那第二列的数据该怎么加啊?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:夏乾坤 回复日期:2002-12-19 16:41:45
<br>内容:右击你的控件,点属性,选Styler选项栏里的 view 项的下拉菜单,选择Report 就有表头了!<BR><BR>要设置第二列的字符串应该这样设:<BR><BR>int nID;<BR>nID = m_List1.InsertItem(0,"这是默认最左边的字符串");<BR>m_List1.SetItemText(nID,1,"这是左数第二列的字符串");<BR>m_List1.SetItemText(nID,2,"这是左数第三列的字符串");<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:小肚鸡肠 回复日期:2002-12-19 18:12:37
<br>内容:To: 夏乾坤<BR><BR>老大,你没看错吧?Style标签页里,根本就没有view下拉菜单。更没有什么view-Reprot选项。只有一个[Selection]、[Owner draw]组合框。设置对话框中的列表控件为Report模式,应该在属性对话框的Style标签页选中[Multi-column]复选框。这个问题已经解决。<BR><BR>还没解决的是,怎么给列表控件的第二列也就是子项目加入数据?ListBox控件没有InsertItem()、SetItemText()方法,那些方法是列表视图才拥有的。<BR><BR>现在还有最后一个问题了,如果给列表控件的第二列、第三列(即子项目)加入数据?列表控件没有列表视图的SetItemText()方法啊?!!!!!!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:小肚鸡肠 回复日期:2002-12-19 21:02:44
<br>内容:凯凯~~~~<BR><BR>你今晚没来吗?<BR><BR>现在你是我唯一的希望了,555~~~~~~
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:凯凯 回复日期:2002-12-20 10:21:23
<br>内容:楼上的兄弟没说错呀,看图中圈住的地方。至于第二列和后面的列是编程加上去了。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:凯凯 回复日期:2002-12-20 10:22:35
<br>内容:再贴一次。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:小肚鸡肠 回复日期:2002-12-20 12:52:40
<br>内容:朋友们,真对不起,是我自己搞错了。<BR><BR>原来应该在对话框中画一个ListCtrl,我却在对话框中画了一个ListBox,现在我已经改过来了,ListCtrl拥有的方法已经解决了我的全部问题。<BR><BR>谢谢你们的热心帮助,小弟对你们的感激之情,犹如滔滔江水,连绵不绝…………
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:小肚鸡肠 回复日期:2002-12-23 15:00:34
<br>内容:终于好了,太谢谢大家了。哈哈哈…………
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -