首页 文章 精选 留言 我的

精选列表

搜索[工具库],共10000篇文章
优秀的个人博客,低调大师

MFC类之CArray作为函数参数和返回值

一、获得返回值: 可以作为函数的一个参数 比如定义fun(CArray<int, int &> &array) 采用引用类型,就可以直接使用 二、作为函数参数: #include<Afxtempl.h> //定义函数。 void ansnode(int num,CArray<double,double&> m_adX, CArray<double,double&> m_adY, CArray<double,double&> m_adZ); 函数体: void ansysdata::ansnode(int num,CArray<double,double&> *m_adX, CArray<double,double&> *m_adY, CArray<double,double&> *m_adZ) { double x, y,z; int i; fstream infilex; fstream infiley; fstream infilez; infilex.open("d:/intface/M_ADX.TXT.txt",ios::in); infiley.open("d:/intface/M_ADX.TXT.txt",ios::in); infilez.open("d:/intface/M_ADX.TXT.txt",ios::in); for (i=0;i<num;i++) { infilex>>x; infiley>>y; infilez>>z; m_adX.Add(x); m_adY.Add(y); m_adZ.Add(z); } fstream outfilex; fstream outfiley; fstream outfilez; outfilex.open("d:/intface/M_ADX1.TXT.txt",ios::in); outfiley.open("d:/intface/M_ADX2.TXT.txt",ios::in); outfilez.open("d:/intface/M_ADX3.TXT.txt",ios::in); for (i=0;i<num;i++) { outfilex<<m_adX.GetAt(i)<<endl; outfiley<<m_adY.GetAt(i)<<endl; outfilez<<m_adZ.GetAt(i)<<endl; } } 三、CArray结构体中的应用 struct DriverItem { CString strDriverName; CString strProductDescribe; CString strTBLFileName; }; struct ControlItem { CString strControlType; CArray <DriverItem,DriverItem&> DriverArray; }; 四、CArray的简单说明 CArray <Object,Object> Var1; CArray <Object,Object&> Var2; 第一个参数是CArray的返回的参数,第二个参数是传递给CArray的参数。即,当使用第二种形式定义Carray数组时,使用Add()时是一个引用类型的参数。 五、转帖 最近一直在编写一个绘图程序,为了保存多个double型点坐标,这里我采用了定义集合类CArray<TYPE, ARG_TYPE>CPointDArray来保存多点,然后定义坐标转换函数ConvertToXYs(CPointDArray,long* xy),将double坐标转换为long型坐标,这是就出现几种常见错误,"CPointDArray缺少构造函数,或者是拷贝构造函数不存在”,‘不能将参数 1 从“CArray<TYPE,ARG_TYPE>”转换为“CArray<TYPE,ARG_TYPE>”,从这两个问题入手,举例说明问题。 下面代码为我修改多次后总结的一个实例,照着此方法可以推广: 1.建立一个VC6工程 ,在CTestView中,添加一个OnLButtonDown,在这里实现点的绘制。 2.在CTestView.h中,自定义double类型的点类以及数组 class CPointD { public: double x; //longtitude double y; //latitude CPointD() { x =0; y=0; }; CPointD(const double dx,double dy) { x = dx; y = dy; }; CPointD(const CPointD& pnt) { x = pnt.x; y = pnt.y; }; CPointD& operator=(const CPointD& rhs) { if (this == &rhs) { return *this; } x = rhs.x; y = rhs.y; return *this; } };//double 型指针链表 typedef CArray<CPointD,CPointD>CPointDArray; //double 型数组 typedef CArray<POINT,POINT&>LPointArray;//long型数组 注意这里CArray<CPointD,CPointD>可以用CArray<CPointD*,CPointD*>,实验证明没有问题。 3.在视图类CTestView定义全局变量CPointDArray plist; 定义函数void ConvToXYs(const CPointDArray &alist, LPointArray& llist);//&alist为常应用,保存函数中不修改数据,&llist是alist转 //换成long后的数组。这里就是出现上述常见问题的症结。 下面为实现部分 void CTestLineView::ConvToXYs(const CPointDArray &alist, LPointArray& llist) { if (alist.GetSize()>0) { llist.RemoveAll(); int i ; int n = alist.GetSize(); llist.SetSize(n); double jing, wei; for(i=0;i<n;i++) { CPointD p = alist.GetAt(i); jing = p.x; wei = p.y; llist[i].x = (long)(jing+0.5);//这是关键步骤,可以当数组用 llist[i].y = (long)(wei+0.5);// } 4.在鼠标左键事件中实现绘制: void CTestLineView::OnLButtonDown(UINT nFlags, CPoint point) { CClientDC pDC(this); try { CPen* pOldPen = (CPen*)pDC.SelectStockObject(2); for (int i=0;i<10;i++) { // CPointD *p=new CPointD(i*3.5f,i*5.5f); plist.Add(CPointD(i*3.5f,i*5.5f)); } LPointArray longpoints; ConvToXYs(plist,longpoints); pDC.Polyline(longpoints.GetData(),plist.GetSize()); CString str; str.Format("%d",longpoints.GetSize()); AfxMessageBox(str,MB_OK); // Restore the original device context objects. pDC.SelectObject(pOldPen); } catch (CException* e) { LPTSTR lp="" ; e->GetErrorMessage(lp,250); AfxMessageBox(lp); } CView::OnLButtonDown(nFlags, point); } 最后在~CTestLineView中清除plist。 CTestLineView::~CTestLineView() { if(plist.GetSize()) plist.RemoveAll(); } 本文转自 驿落黄昏 51CTO博客,原文链接:http://blog.51cto.com/yiluohuanghun/1118301,如需转载请自行联系原作者

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册