社区
界面
帖子详情
(急问,200分)CSplitterWnd 可以直接用CWnd填充吗? CSplitterWnd是不是非要用在Doc/View下?
Stefine
2007-09-30 03:08:52
现小弟急做一窗口拆分...
需将现在已经做好的继承自CWnd的窗口填充进去,但程序里无DOC/VIEW...
我在splitterwnd.CreateView时,应该怎么关联到此CWnd继承类的窗口... 手动再加上doc/view吗?
急问
...全文
301
18
打赏
收藏
(急问,200分)CSplitterWnd 可以直接用CWnd填充吗? CSplitterWnd是不是非要用在Doc/View下?
现小弟急做一窗口拆分... 需将现在已经做好的继承自CWnd的窗口填充进去,但程序里无DOC/VIEW... 我在splitterwnd.CreateView时,应该怎么关联到此CWnd继承类的窗口... 手动再加上doc/view吗? 急问
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Stefine
2007-10-08
打赏
举报
回复
已经重做了,拆分窗口还是那样自己控制绘制...
主要是Jarrylogin 说的那样,是移植代码的问题...
自己写的代码,可控性高很多...
好多异常都是因为数组越界,空指针,野指针造成的...好多都是些垃圾代码...
一般的delete指针不判断也就算了,delete后不置NULL,也算了,有地方就直接char szName[3];然后strcpy 两个字节进去,然后就到处使用szName...
呵,现在还是有些异常没能看出所以然来...报的也就几个固定地方的异常了..
谢谢各位的捧场,结帖...
Juchiyufei
2007-10-07
打赏
举报
回复
你可以在www.codeproject.com上找找,那里好像有,曾经看到过.
Stefine
2007-10-07
打赏
举报
回复
也正怀疑这点...
嗯,正打算重写...
Jarrylogin
2007-10-06
打赏
举报
回复
你这个问题估计是移植过来产生的问题,最好的方法就是重写代码,看别人代码很累,不如自己重写。一窗口拆分无非是PANE
中加几个View,在C*APP中进行文档管理模板动态创建对象。
Stefine
2007-10-06
打赏
举报
回复
没人了?
Stefine
2007-10-06
打赏
举报
回复
先UP,这问题困扰了我整个国庆...
过下打算重新考虑...
有朋友有什么好的建议,谢谢...
Stefine
2007-10-06
打赏
举报
回复
有个严格的限制必须记牢:CWnd及其派生类不得跨线程使用
这个我也明白,也仔细检查了,没有...(不过有时跨时也可detach 再attch,不过我代码里没有这应用)
不要在原因不明的情况下找解决方法,因为你的解决方法在这种情况下往往是错误的。
arong1234这句话很对...
我是一直没发现问题的根源...仅从几个报异常的调用堆栈里看不出什么来,而且大多的堆栈都指示为 CStringData::Release时的指标变成了无效地址...
再仔细描述下现况:
现在就是用的让四个CWnd作为四个子窗口,集成到一个CWnd里,然后再将此实现了拆分的CWnd在一MDI子窗口中创建...然后菜单调用创建此MDI子窗口...
问题:
异常:
报些很奇怪的异常:
msvcr71d.dll!_CrtIsValidHeapPointer(const void * pUserData=0x01eecf28) 行1807 C
msvcr71d.dll!_free_dbg_lk(void * pUserData=0x01eecf28, int nBlockUse=1) 行1132 + 0x9 C
msvcr71d.dll!_free_dbg(void * pUserData=0x01eecf28, int nBlockUse=1) 行1070 + 0xd C
msvcr71d.dll!free(void * pUserData=0x01eecf28) 行1025 + 0xb C
mfc71d.dll!CAfxStringMgr::Free(ATL::CStringData * pData=0x01eecf28) 行154 + 0xa C++
mfc71d.dll!ATL::CStringData::Release() 行99 C++
mfc71d.dll!ATL::CSimpleStringT<char,1>::operator=(const ATL::CSimpleStringT<char,0> & strSrc={...}) 行286 C++
mfc71d.dll!ATL::CStringT<char,StrTraitMFC_DLL<char,ATL::ChTraitsCRT<char> > >::operator=() 行970 C++
> HHJstock.exe!CStockBlock::GetBlockStock(const char * lpszBlock=0x01f24870, CStringList & strlStock={...}) 行170 + 0x43 C++
指示的代码行:
int nLen = strLoad.GetLength()/8;
string *pStock = new string[nLen];
int i = 0;
while(!strLoad.IsEmpty())
{
if(strLoad.GetLength()>=8)
{
CString strStock = strLoad.Left(8);
pStock[i++]=string((LPCTSTR)strStock);
strLoad=strLoad.Mid(8); //异常指向这里
}
else
strLoad="";
}
大多异常都是与CString释放相关...
并没有跨线程,只是窗口之间消息传递而已,转换成char*时,也先GetBuffer后再ReleaseBuffer的
所以现在找不着问题所在,很烦恼...
arong1234
2007-10-04
打赏
举报
回复
你说的异常似乎和拆分窗口无关,而是和线程有关,有个严格的限制必须记牢:CWnd及其派生类不得跨线程使用
Stefine
2007-10-04
打赏
举报
回复
帐号:gofqjyie
昵称:誓将天下了然于胸
这大哥认识小弟我...?
Stefine
2007-10-04
打赏
举报
回复
先谢过LS的几位...
这几天一直在加班,忘记来看了...
用splitter,还要改原来已封装好的,所以直接create四个view视图出来...然后onsize处理下,再OnMouseMove处理下移动自绘的分隔栏,也算达到那效果...
拆分的算是早就完成了,但留下来的问题,让我这两天来都摸不着头脑...
现在是这样的,大致描述下现状...
我在创建一个MDI子窗口时,去创建一个CBlockLine,而在CBlockLine中创建了四个view窗口,(也就是说cblockline实现拆分工作)
这里面创建的四个view窗口都是由CWnd继承下来的,而这个也正是主要的绘图窗口,其里面牵连了很多相关的类...
现在的问题是,异常时不时出现...
大约常见的几个异常如下:
vector<string> vtStock;
while(!strLoad.IsEmpty())
{
if(strLoad.GetLength()>=8) //strLoad是如SH600000SZ000559这样的
{
CString strStock = strLoad.Left(8);
vtStock.push_back(string((LPCTSTR)strStock));//异常出现在push_back后,最终显示是在cstringdata::release里,也就是应该在释放strStock时出错了...??????? 为什么咧,
strLoad=strLoad.Mid(8);
}
else
strLoad="";
}
而有时出来的异常也都与push_back相关...
还有时报"CThreadSlotData::GetThreadValue(int nSlot = 0)"线程状态相关的错误,指示的无效地址...
异常是时不时的出现,但大都报的异常都很奇怪...明明运行的很正常的代码,在我一点出这个拆分窗口时就出错...
与我创建方式有关...我怀疑的是与线程状态有关系,但我代码并没有主动创建与这方面相关的线程啊,无非就是那四个视图窗口牵连了很多的窗口类...与这有关系...
各位大哥给点意见...不尽感谢,分不是问题...
arong1234
2007-10-04
打赏
举报
回复
不要在原因不明的情况下找解决方法,因为你的解决方法在这种情况下往往是错误的。即使让你用CWnd做子窗口,你就不遇到问题了?
当然,拆分窗口应该有办法规避那个ISKINDOF宏的问题的,就看它在哪做这种检查即可
iyranly
2007-10-01
打赏
举报
回复
首先你可以先定义好几个类,这几个类是将来的分割窗口所关联的类。在CMainFrame内添加CreateClient虚函数,在这里进行分割窗口。你分割的时候为每一个Pane指定一个类就行了。
长尾巴的悟空
2007-10-01
打赏
举报
回复
好久没看着你了
showyfish
2007-10-01
打赏
举报
回复
你的窗口干嘛直接继承CWnd呢,你继承CView不就行了,反正CView也是继承CWnd的,View里面不需要Doc,那东西是个鸡肋,不是更好。
dyw
2007-09-30
打赏
举报
回复
看看这个在对话框上的Splitter:
http://www.codeproject.com/splitter/simpledlgsplitter.asp
演示如何将CWnd派生类放入Pane(第二个Pane):
http://support.microsoft.com/kb/q151032/
Stefine
2007-09-30
打赏
举报
回复
用第一种方法时, 那个窗口是自己绘制的,怎么建立相关联的view咧?
先测试第二种方法...
Stefine
2007-09-30
打赏
举报
回复
不行的,测试过了,
在运行时会检测你CreateView传进去的指针是不是CView*
ASSERT_KINDOF(CView, pViewNew);
那就还剩下两个方案:
1: 手动将view/doc再加到程序中 (具体怎么弄咧?)
2: 换种方式,不用splitter了, 能直接像动态创建一些控件那样,创建一些控件在不同的矩形区域...也就是自己绘制那横竖的移动条,然后自己响应拖动消息,将控件尺寸进行重绘...
请大家多提供思路及方法....急...只要能解决问题,分不是问题...
guo_wei
2007-09-30
打赏
举报
回复
应该可以的吧,在类定义里有DECLARE_DYNAMIC也就是支持runtimeclass的可能就可以,试一下就知道了。
基于MFC的C++仿QQ聊天系统开发实战:从架构设计到关键技术实现
在Windows桌面应用开发领域,C++与MFC(Microsoft Foundation Classes)的结合是构建原生、高性能应用程序的经典技术路线。其核心原理在于MFC对Windows API的封装和基于消息驱动的架构,为开发者提供了高效的框架支持,尤其擅长处理复杂的用户界面和系统交互。这一技术组合在需要深度系统集成和极致性能的桌面软件中,依然具有不可替代的价值,例如在开发即时通讯、数据管理、工业控制等客户端应用时。本文聚焦于如何运用MFC框架,结合Winsock网络编程与SQLite数据库,系统性
mysql去重查询方法-下载即用.zip
代码转载自:https://pan.quark.cn/s/7cac7dad320e 文章通过作者的亲身实践,以图文结合的形式展示了MySQL数据库去重查询的三种技术途径。涵盖了MySQL操作中普遍采用的distinct去重技巧、group by数据提重策略以及开窗函数row_number()或类似row_number()的解决方案。具体细节请参阅相关资料。 MySQL数据库在数据管理过程中,有时需要消除重复的数据条目,目的是保证数据的精确性与统一性。本文将详尽说明三种在MySQL环境下执行去重查询的技术:应用DISTINCT、运用GROUP BY以及采用开窗函数ROW_NUMBER()或其对应方法。 ### 一、应用DISTINCT DISTINCT操作符是SQL语言中最常用的去重手段,其功能是返回所有独特的记录。例如: ```sql SELECT DISTINCT user_name, email, address FROM t_user; ``` 这个查询将会返回`t_user`表中所有独一无二的`user_name`、`email`和`address`组合。倘若存在多条记录的`user_name`、`email`和`address`相同,DISTINCT只会保留其中一条。 ### 二、采用GROUP BY GROUP BY子句通常配合聚合函数(例如COUNT、SUM等)使用,但在去重方面同样非常有效。当与所有字段一同使用时,它会返回每个唯一集合的第一个记录: ```sql SELECT user_name, email, address FROM t_user GROUP BY user_name, email, address; ``` 此处的GRO...
抢购助手03e1f367
包含 抢购助手.exe 的资源包
Prompt工程实战指南
Prompt工程实战指南
不平衡电网下基于延时相消法(DSC)的T型三电平LCL逆变器(Simulink仿真实现)
不平衡电网下基于延时相消法(DSC)的T型三电平LCL逆变器(Simulink仿真实现)内容概要:本文详细介绍了在不平衡电网条件下,采用延时相消法(DSC)控制T型三电平LCL逆变器的设计与Simulink仿真实现。文章系统阐述了T型三电平逆变器的拓扑结构与工作原理,
分
析了其在高功率、低谐波应用中的优势。针对电网不平衡导致的负序
分
量问题,引入延时相消法进行正负序
分
离与控制,有效抑制了并网电流中的谐波
分
量,提升了电能质量和系统稳定性。文中给出了完整的控制策略设计,包括坐标变换、延时相消算法实现、双闭环控制系统(电流环与电压环)设计,并通过Simulink仿真验证了所提方法的有效性。; 适合人群:具备电力电子、自动控制理论基础,从事新能源发电、微电网或电能质量相关研究的研究生及工程技术人员。; 使用场景及目标:①掌握T型三电平逆变器的工作原理与建模方法;②学习延时相消法(DSC)在不平衡电网条件下的正负序
分
离技术;③实现并网逆变器在复杂电网环境下的高性能控制仿真。; 阅读建议:本文以Simulink仿真实现为核心,建议读者结合文中的控制框图与算法描述,动手搭建仿真模型,通过调整电网不平衡度、负载等参数,观察并网电流波形与谐波含量的变化,以深入理解DSC控制策略的动态响应特性与鲁棒性。
界面
15,976
社区成员
115,866
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章