我目前的做法是使用一个函数如下:
void DisplayData(CString DisStr,int Line) //ÏòÊÓͼ·¢ËÍÏÔʾÐÅÏ¢£»
{
tempDisplayStr=DisStr;
tempDisplayLine=Line;
::PostMessage(hMainWnd, WM_DISPLAY,0,0);
}
tempDisplayStr和tempDisplayLine是全局变量,在得到字符串之后,发送一个消息到主程序框架,起动一个消息函数,并在消息函数中调用
CCtlcenterView *pView=(CCtlcenterView *)GetActiveView();
pView->Invalidate(TRUE);
使得视图显示字符串中的内容。
虽然达到了显示效果,但程序一关闭就出现一个异常对话框(好烦)。另,哪位高手仁兄有在滚动视图中显示一个超长字符串的好办法(字符串是分行显示的)?我目前的做法是每次更新视图,把所有的数据重新textout,效率好低(sigh...)。

解决方案 »

  1.   

    直接在视图类中调用AfxGetMainWnd()->xxx来得到框架类的变量不行吗?
      

  2.   

    对,就是这样把主程序框架中的数据传到视图中的。现在的问题是,怎样把线程中的字符串数据(CString)传到主程序框架的变量中去。我目前采用的是使用全局变量的方法,先把数据写到全局变量中,然后发消息,通知主程序框架中的一个消息函数,刷新视图。但关闭程序时出现异常。把第一个语句屏蔽掉就无此现象。可能是产生了访问冲突。但为什么可以采用此法传递一个整型变量的?好烦!
      

  3.   

    reason is simple.when sendmessage or postmessage, wParam or lParam only can hold a 4Bytes data. so when you send or post a string, it post string address. when close window, view as distroied, so in mainframe, when access freed memory address, a error happened. 整型变量 is 4 bytes, so it copy data, not pass a address. 
    you need study to know which is value and which is address. use WM_COPYDATA maybe best.