在List Control中如何让单元格显示多行字符,并且可以编辑?

二分掌柜的
优质创作者: 人工智能技术领域
2009-09-16 06:52:44
List Control如何实现下面的效果?
VIEW为Report,如何是其他view能够实现也可以
1 单元格显示多行字符。
2 单元格高度随字符行数自动变换。
3 可以编辑单元格,接受回车,鼠标移开自动保存的界面

谢谢
...全文
1123 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxa520 2012-04-27
  • 打赏
  • 举报
回复
为什么 我试了不行。
hongzhu306 2011-12-09
  • 打赏
  • 举报
回复
看看具体怎么实现,也想实现该功能
zqzzhong 2011-10-11
  • 打赏
  • 举报
回复
第三个,需要修改下,是在void CInPlaceEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)的最后面添加,如下。

////add by jg for multi line.
CRect rect = ParentRect;
UINT nFormat = DT_WORDBREAK | DT_CALCRECT;
int nDescrHeight = dc.DrawText(str, rect, nFormat);
//end
if (nDescrHeight > m_Rect.Height())
{
((CGridCtrl*)GetParent())->SetRowHeight(m_nRow, nDescrHeight);
}
chenyr106 2009-10-19
  • 打赏
  • 举报
回复
按照你们提示的方法,我验证过,在单元格里面输入文本可以这么换行,非常谢谢。但想再请问一下,我现在也碰到这个问题,我想让单元格开始显示文本的时候,就按照文本的内容进行自动的换行和调整行高,而不是在单元格中输入文本(OnChar事件),我应该怎么办,或者修改那个类,谢谢!
二分掌柜的 2009-09-18
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 muzizongheng 的回复:]
LZ 记着给分哦。 呵呵。
[/Quote]
在看了完了,立马给分
muzizongheng 2009-09-18
  • 打赏
  • 举报
回复
LZ 记着给分哦。 呵呵。
muzizongheng 2009-09-18
  • 打赏
  • 举报
回复
第一, 你在CGridDefaultCell::CGridDefaultCell() 里把默认的|DT_SINGLELINE注释掉:
 m_nFormat = DT_LEFT|DT_VCENTER/*|DT_SINGLELINE*/|DT_NOPREFIX | DT_END_ELLIPSIS;  //change by jg for multi line.


第二, void CGridCtrl::OnEndEditCell(int nRow, int nCol, CString str)里添加一句:
CString strCurrentText = GetItemText(nRow, nCol);
if (strCurrentText != str)
{
SetItemText(nRow, nCol, str);
if (ValidateEdit(nRow, nCol, str) &&
SendMessageToParent(nRow, nCol, GVN_ENDLABELEDIT) >= 0)
{
SetModified(TRUE, nRow, nCol);
RedrawCell(nRow, nCol);

RedrawWindow();//add by jg for multi line text.
}
else
{
SetItemText(nRow, nCol, strCurrentText);
}
}

CGridCellBase* pCell = GetCell(nRow, nCol);
if (pCell)
pCell->OnEndEdit();


第三, 就是那个void CInPlaceEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)里,

//add by jg for multi line.
CRect rect;
UINT nFormat = DT_WORDBREAK | DT_CALCRECT;
int nDescrHeight = dc.DrawText(str, rect, nFormat);
//end
。。。。。。。。
if (nDescrHeight > m_Rect.Height())
{
((CGridCtrl*)GetParent())->SetRowHeight(m_nRow, nDescrHeight);
}
muzizongheng 2009-09-18
  • 打赏
  • 举报
回复
在不? 搞定
二分掌柜的 2009-09-18
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 muzizongheng 的回复:]
这个类应该稍微修改点东西 就能满足你的要求。 我给你看看怎么改, ==
[/Quote]
非常感谢
muzizongheng 2009-09-18
  • 打赏
  • 举报
回复
这个类应该稍微修改点东西 就能满足你的要求。 我给你看看怎么改, ==
二分掌柜的 2009-09-18
  • 打赏
  • 举报
回复
我在inplaceEdit的构造里 已经修改了创建时的风格。
编辑框已经接受回车,可以输入多行的问题已经解决,但是输入之后单元格显示的是一行。

现在的问题是:
如何让单元格显示多行并且行的高度自动跟随输入文字的行数变化?
二分掌柜的 2009-09-18
  • 打赏
  • 举报
回复
完成 结贴 给分
二分掌柜的 2009-09-18
  • 打赏
  • 举报
回复
第三, 就是那个void CInPlaceEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)里,
C/C++ code
//add by jg for multi line.
CRect rect;
UINT nFormat = DT_WORDBREAK | DT_CALCRECT;
int nDescrHeight = dc.DrawText(str, rect, nFormat);
//end
。。。。。。。。
if (nDescrHeight > m_Rect.Height())
{
((CGridCtrl*)GetParent())->SetRowHeight(m_nRow, nDescrHeight);
}

这段代码是不是添加在void CInPlaceEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
函数的最下面。

现在只剩下单元格内回车自动改变行高。
muzizongheng 2009-09-18
  • 打赏
  • 举报
回复
我给的代码假定你 已经修改了edit方面的style和enter处理。 呵呵。如果你没实现
代码如下:


CInPlaceEdit::CInPlaceEdit(CWnd* pParent, CRect& rect, DWORD dwStyle, UINT nID,
int nRow, int nColumn, CString sInitText,
UINT nFirstChar)
{
m_sInitText = sInitText;
m_nRow = nRow;
m_nColumn = nColumn;
m_nLastChar = 0;
m_bExitOnArrows = (nFirstChar != VK_LBUTTON); // If mouse click brought us here,
// then no exit on arrows

m_Rect = rect; // For bizarre CE bug.

DWORD dwEditStyle = WS_BORDER|WS_CHILD|WS_VISIBLE/*| ES_AUTOHSCROLL*/ | ES_MULTILINE | ES_WANTRETURN | ES_AUTOVSCROLL //add by jg for multiline
| dwStyle;



void CInPlaceEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if (nChar == VK_TAB/* || nChar == VK_RETURN*/) //delete by jg for multiline
{
m_nLastChar = nChar;
GetParent()->SetFocus(); // This will destroy this window
return;
}
二分掌柜的 2009-09-17
  • 打赏
  • 举报
回复

1 http://www.vckbase.com/code/viewcode.asp?id=2914
此类只能编辑,不能改变行高

2 Tr0j4n
代码是与组合框的结合。

3 muzizongheng

http://www.codeproject.com/KB/miscctrl/gridctrl.aspx
不能自适应行高
http://www.codeproject.com/KB/miscctrl/adding___quot_merge_cells.aspx
此类功能确实强大,但是不能多行显示字符,不能输入回车符

谢谢回答

muzizongheng 2009-09-17
  • 打赏
  • 举报
回复
lz,自适应行高的啊, 你调用 AutoSize就可以了。 行高列宽都自适应的。
MoXiaoRab 2009-09-17
  • 打赏
  • 举报
回复
构造风格 |ES_WANTRETURN |ES_MULTILINE
二分掌柜的 2009-09-17
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 muzizongheng 的回复:]
这个你把col固定, 只autosize(row)的, 然后在inplaceEdit的构造里 修改创建时的风格, wantreturn 和multiLine。
[/Quote]
可以详细些吗,更改哪个示例
muzizongheng 2009-09-17
  • 打赏
  • 举报
回复
这个你把col固定, 只autosize(row)的, 然后在inplaceEdit的构造里 修改创建时的风格, wantreturn 和multiLine。
二分掌柜的 2009-09-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 muzizongheng 的回复:]
lz,自适应行高的啊, 你调用 AutoSize就可以了。 行高列宽都自适应的。
[/Quote]
输入回车符怎么处理?自动换行
加载更多回复(5)
单向双向V2G 环境下分布式电源与电动汽车充电站联合配置方法(Matlab代码实现)内容概要:本文介绍了在单向和双向V2G(Vehicle-to-Grid)环境下,分布式电源与电动汽车充电站的联合配置方法,并提供了基于Matlab的代码实现。研究涵盖电力系统优化、可再生能源接入、电动汽车充放电调度、储能配置及微电网经济调度等多个关键技术领域,重点探讨了在不同电价机制和需求响应策略下,如何通过智能优化算法实现充电站与分布式电源的协同规划与运行优化。文还展示了多种应用场景,如有序充电调度、鲁棒优化模型、多目标优化算法(如NSGA-II、粒子群算法)在电力系统的实际应用,体现了较强的工程实践价值和技术综合性。; 适合人群:具备电力系统、新能源、智能优化算法等相关背景的科研人员、研究生及从事能源系统规划与优化的工程技术人员;熟悉Matlab/Simulink仿真工具者更佳。; 使用场景及目标:①用于科研项目关于电动汽车与分布式电源协同配置的模型构建与仿真验证;②支持毕业论文、期刊投稿的案例分析与算法对比;③指导实际电力系统充电站布局与能源调度的优化设计。; 阅读建议:建议结合文提供的Matlab代码与具体案例进行同步实践,重点关注优化模型的数学建模过程与算法实现细节,同时可参考文末网盘资源获取完整代码与数据集以提升学习效率。
【电动车】【超级棒】基于蒙特卡洛模拟法的电动汽车充电负荷研究(Matlab代码实现)内容概要:本文围绕基于蒙特卡洛模拟法的电动汽车充电负荷研究展开,利用Matlab代码实现对不同类型电动汽车(如常规充电、快速充电、换电模式)在不同场景下的充电负荷进行建模与仿真。通过蒙特卡洛方法模拟大量电动汽车的充电行为,结合用户出行规律、充电时间、电量需求等随机因素,分析电动汽车规模化接入电网后对电力系统负荷的影响,并探讨分时电价策略对充电负荷的引导作用,进而优化电网运行。研究涵盖充电负荷的空间分布特性、时间分布特征及对电网峰谷差的影响,旨在为电力系统规划和电动汽车有序充电管理提供理论支持和技术工具。; 适合人群:具备一定电力系统、交通工程或新能源汽车背景的研究生、科研人员及从事智能电网、电动汽车相关领域的工程技术人员。; 使用场景及目标:①用于研究大规模电动汽车接入对配电网负荷曲线的影响;②支撑分时电价、需求响应等政策制定与优化;③为充电站规划、电网调度、储能配置等提供数据支持和仿真平台;④适用于学术研究、课题复现及工程项目前期分析。; 阅读建议:建议读者结合文提供的Matlab代码进行实践操作,重点关注蒙特卡洛模拟的参数设置、充电行为的概率建模过程,并尝试调整输入变量以观察负荷变化趋势,加深对电动汽车充电负荷不确定性和聚合效应的理解。

15,977

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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