📄 subject_48505.htm
字号:
<p>
序号:48505 发表者:mesen 发表日期:2003-08-01 01:16:51
<br>主题:大哥大嫂们呢我都快哭了救我呀!!
<br>内容:我想在实现的东西很简单,但却不能实现,困了我几天走不出去:<BR>编程工具VC60,用多文件档视图结构做框架;<BR>数据文件在CDOC中,以结构数组的方式存在(ARRAY);<BR>在CVIEW中绘图,绘图时需要调用CDOC中的结构数组ARRAY。<BR>按理说很简单呀,直接用pDoc来取数组成员或CDOC的成员函数就可以了。<BR>可是项目需要能够手动改变View中OnDraw()函数所绘的图的数据的处理方式(即对数据源能进行不同的加工以返回不同的值以供绘图),这么一来就需要用到函数指针,可是数据又存在于CDOC的“对象”中,这么一来,函数指针就没法指向CDOC中的取值函数了。为了能够使CDOC的成员函数能被CVIEW中的函数指针所指上,就想着把CDOC中的取值函数设成static了,可是如果把它们设成static,就得把那几个数组也设成static才行,这样一来,就需要给这几个数组进行初始化(static好像必须初始化才能通过编译),可他们是数组呀,我怎么才能在类外给数组进行初始化呢?。如果仅是一个static int a ,那直接在类外进行 int a = 100;就好了,可给结构数组进行初始化就得调用专门对其进行初始化的函数,可在类外还没生成对象之前,我怎么调用这做为CDOC成员的函数呀!一调用就出错,初始化吧通不过!<BR>我就想着不行把这几个GetArray()函数也全局了算了,可再一想如果将这函数也static了,那么它调用的数据也都得给static了,要不然根本没法直接调用,……,我想到这里已经崩溃了没法再往下想了,难道没有简单点的可行方案了。<BR>我不过就是想实现:张三(CVIEW)要绘图,需要半成品支持(函数的返回值),而可以加工成半成品的基础材料就几个ARRAY。可以有很多方法把ARRAY中的数据加工成不同的半成品。这样就有一些加工方案,即函数。张三现在只是想增加一个选择“加工方案“的权力而已,可这该死的规则,就差那么一点可却越绕越远。如果函数指针能直接指各对象的成员……,我这两天做梦都在这么想。我快疯了,哥们们快来救我呀,我实在顶不住了。我会为你祝福的!!
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:Hutuph 回复日期:2003-08-01 01:26:29
<br>内容:能把你的源代码发给我吗?<BR>codefish@citiz.net
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:米罗 回复日期:2003-08-01 08:58:55
<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>
回复者:米罗 回复日期:2003-08-01 09:06:36
<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>
回复者:mesen 回复日期:2003-08-01 11:15:35
<br>内容:class CTysDoc : public CDocument<BR>{<BR>public:<BR><BR> CString sPath_TysBlockAllLabel; //板块——总板块<BR> CString sPath_Tys; //文件总路径<BR> CString sPath_TysData; //日线数据路径——给出代码名即可调用<BR> CString sPath_TysListData; //取列表数据路径——可直接调用<BR> CString sPath_TysBlockLabel; //取板块代码路径——给出板块名即可调用<BR><BR>protected://需要的基础数据全在下面这两个数组中保存着<BR> CArray<TA_LOCALBODY,TA_LOCALBODY> ExponentArray; //原始指数数组<BR> CArray<TA_LOCALBODY,TA_LOCALBODY> StockDataArray; //按股指时间顺序填充的个股数组<BR><BR><BR>public: //用下面两个函数填充数组<BR> BOOL GetingExponentArray(CString sLabel); //填充指数的数组<BR> BOOL GetingStockDataArray(CString str); //填充个股数组函数<BR><BR><BR>public: //下面就是那些供Cview等其它类对象调用数组成员的函数。供指针调用的<BR> int StockArraySize();<BR> int ExponentArraySize();<BR> CString Name(CArray<TA_LOCALBODY,TA_LOCALBODY> &mArray);<BR> CString Label(CArray<TA_LOCALBODY,TA_LOCALBODY> &mArray);<BR> DWORD Open(int mnIndex);<BR> DWORD Close(int mnIndex);<BR> DWORD High(int mnIndex);<BR> DWORD Low(int mnIndex);<BR> DWORD Volume(int mnIndex);<BR> DWORD Amount(int mnIndex);<BR> DWORD Date(int mnIndex);<BR> DWORD MaClose(int mnIndex, int mnCombins);<BR> DWORD Average(int mnIndex, int mnBackDays);<BR> int SingleContra(int mnIndex); <BR>public://取得股指结构数组的指定项数据<BR><BR> DWORD ExpOpen(int mnIndex, int nDivisor);<BR> DWORD ExpClose(int mnIndex, int nDivisor);<BR> DWORD ExpHigh(int mnIndex, int nDivisor);<BR> DWORD ExpLow(int mnIndex, int nDivisor);<BR> DWORD ExpVolume(int mnIndex, int nDivisor);<BR> DWORD ExpAmount(int mnIndex, int nDivisor);<BR> DWORD ExpDate(int mnIndex);<BR>//...............<BR><BR>};<BR>//在文档模板对对应的Cview视图中有下面这个函数,它要动态地调用文档中的数据<BR>void CKLineView::OnDraw(CDC* pDC)<BR>{<BR> //我用的是文档模板,所以每一个视有一个对应的文档指针,数据全通过个这<BR> //文档指针来提取<BR> //取得文档指针<BR> CTysDoc *pDoc = (CTysDoc *)GetDocument();<BR><BR> //下面这个头文件是我在CKLineView的头文件中申请的函数指针pFunction<BR> pFunction = ???; //这里赋值是个问题,我只是想通过操纵这个赋值过<BR> 程来控制函数绘图的内容。!!!!!!!!!<BR><BR> //绘图函数绘图时的调用指前固定在一个函数指针上,这样就是以在不碰<BR> //绘图函数的情况下改变绘图的内容。<BR> //取得“函数指针”所取得的函数的最高值和最低值<BR> for(int i= nIndex_FirstShow; i<pDoc->StockArraySize(); i++)<BR> {<BR> if(pFunction(nIndex_FirstShow,0) >nView_Top)<BR> nView_Top = pFunction(nIndex_FirstShow,0);<BR> if(pFunction(nIndex_FirstShow,0) <nView_Bottom)<BR> nView_Bottom = pFunction(nIndex_FirstShow,0);<BR> }<BR> //绘图。。。。如:<BR> pDC->MoveTo(30,pFunctin(10));<BR> pDC->LineTo(30,pFunctin(11));<BR><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>
回复者:米罗 回复日期:2003-08-01 23:03:24
<br>内容:函数传址不行吗?我试了可以呀。你试了吗?<BR>你将CDOC中那个要被传址的函数定义为static型的,就可以了!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:米罗 回复日期:2003-08-01 23:19:02
<br>内容:真晕,你是没看见我给你的回复呢还是方法不行呢?<BR>http://www.copathway.com/cndevforum/subject_view.asp?subject_id=48345&forum_id=34<BR>http://www.copathway.com/cndevforum/subject_view.asp?subject_id=48625&forum_id=34
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:mesen 回复日期:2003-08-01 23:59:14
<br>内容:我不能把那个要被传址的函数(close())设成static的原因<BR>是因为这个函数要调用同类中的一个数组,如果把这个(要传址的函数)close()函数给static了,那么它要调用的这个数组也就得static了才可以,要不然这个函数就等于失效了(无法再直接调用数组中的的数据了,而他的功能就是调用数组中的数据进行加工),而且还根本通不过编译。会提示说“静态函数不能调用动态数据成员Array".<BR>但我又不能把数组ARRAY也给static了吧,那样怎么初始化呀,“静态数组”初始化怎么进行呀???
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:米罗 回复日期:2003-08-02 00:12:22
<br>内容:呵呵,原来是这样呀!<BR>那你就定义为static数组吧。<BR>在类中定义一下例如static int t[345];<BR>然后再类的外面(相当于全局变量)再定义一下,如下:<BR>int CDoc::t[30];<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>
回复者:mesen 回复日期:2003-08-02 00:14:22
<br>内容:TysDoc.obj : error LNK2001: unresolved external symbol "public: static unsigned long __cdecl CTysDoc::iii(int,int)" (?iii@CTysDoc@@SAKHH@Z)<BR>Debug/Tys.exe : fatal error LNK1120: 1 unresolved externals<BR>Error executing link.exe.<BR>Tys.exe - 2 error(s), 0 warning(s)<BR><BR>我直接将iii(int a,int b)设成 static iii(int a,int b)<BR>然后在同类的构造函数中进行传值:<BR>pFunction = iii;<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>
回复者:米罗 回复日期:2003-08-02 00:16:36
<br>内容:iii的返回值呢?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:mesen 回复日期:2003-08-02 00:21:48
<br>内容:对不起,这样是可以通过!我刚才没给iii定义搞笑话了<BR><BR>我要问题是怎么给那个StockDataArray数组初行初始化呀。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -