您的位置 首页 > 数码极客

如何在类里传递字符

他在二楼,你在一楼,如果他没有看你的话,那为什么你们会对视呢?

---- 网易云热评


一、文档类处理数据

1、通过消息处理传递数据,并用UpdateAllViews刷新和文档对象关联的所有视图类对象

class CMyDoc :public CDocument {

DECLARE_MESSAGE_MAP()

public:

CString str;

afx_msg void xinjian();

};

BEGIN_MESSAGE_MAP(CMyDoc, CDocument)

ON_COMMAND(ID_XJ,xinjian)

END_MESSAGE_MAP()

void CMyDoc::xinjian() {

//模拟接收数据

this->str = "hello word";

//调用视图类onupdate

this->UpdateAllViews(NULL);

}

2、由于调用了updateallviews函数,所以需要在视图类窗口重写该函数

声明函数

virtual void OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint);

实现函数

void CMyView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) {

CMyDoc* pDoc =(CMyDoc*) this->m_pDocument;

//效果一样

//CMyDoc* pDoc =(CMyDoc*) this->GetDocument();

this->SetWindowText(pDoc->str);

}


3、点击新建,运行结果


对象关系图

theApp

|->m_pMainWnd ( pFrame )

|->m_pViewActive ( pView )

|->m_pDocument ( 文档类对象地址 )

|->m_viewList


切割视图窗口

1、创建一个对象CSplitterWnd

CSplitterWnd split;

2、在框架窗口声明OnCreateClient函数

virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext);

3、重写该函数

BOOL CMyFrameWnd::OnCreateClient(LPCREATESTRUCT lpcs,CCreateContext* pContext)

{

(this, 2, 1);

(0,0,RUNTIME_CLASS(CMyView),CSize(100,100),pContext);

(1, 0, RUNTIME_CLASS(CMyView), CSize(100, 100), pContext);

return TRUE;

}

4、运行效果


只刷新一个窗口

1、获取相应视图的对象

void CMyDoc::xinjian() {

//模拟接收数据

this->str = "hello word";

//获取链表迭代器m_viewList

POSITION pos = GetFirstViewPosition();

//获取第一个视图窗口的对象

CView* pView = GetNextView(pos);

//再掉一次获取第二个视图的对象

pView = GetNextView(pos);

//填写那个对象不刷新那个对象

this->UpdateAllViews(pView);

//调用视图类onupdate,全部刷新

//this->UpdateAllViews(NULL);

}

2、运行结果


欢迎关注公众号:顺便编点程


责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“如何在类里传递字符”边界阅读