本人編了一個單檔案多視圖的程式,需要從一個View中傳遞產量到另一個View中,按照咱們CSDN推薦的方法,使用***Doc賦值中間變數傳遞,嘗試了一下出錯了:
(這是CSDN中推薦的方法)在單檔案多視圖的程式設計中,多個視圖之間的資料傳遞的方式很多,這里先只寫最簡單的一種,在任意一個View中寫:XXXDoc* pDoc = (XXXDoc*)GetDocument();來獲得Doc類的指標,既然在任意一個View類里都可以這樣獲取到Doc類中的成員變數,那么就可以用Doc類來作為資料傳遞的一個中間類!比如,有類A,B,C,其中B為Doc類,A和C為View類,假設A中的資料a要給C中的資料c,可以先在 B中創建一個public的的變數b,然后在,類A中要進行資料傳輸的地方寫:BDoc* pDoc = (BDoc*)GetDocument();,pDoc->b = a;再在類C中寫:BDoc* pDoc = (BDoc*)GetDocument(); c = pDoc->b;這個時候,a就已經成功的給了c啦!
檢驗了一下,我在FirstView的OnDraw()函式中呼叫***Doc中變數,使用pDoc->使能夠提示***Doc中定義的中間傳遞變數,而且軟體編譯沒錯,但是運行出錯,錯誤如圖所示。
我知道是c=pDoc->b的問題,因為我改成pDoc->b=c賦值陳述句,錯誤就變成“記憶體不能為write”了。
請大神幫忙,十分感謝!
uj5u.com熱心網友回復:
CWinApp *pApp = AfxGetApp();
POSITION PosDocTemplate = pApp->GetFirstDocTemplatePosition();
while(PosDocTemplate)
{
CDocTemplate* pDocTemplate = pApp->GetNextDocTemplate( PosDocTemplate );
POSITION PosDoc = pDocTemplate->GetFirstDocPosition();
while(PosDoc)
{
CDocument* pDoc = pDocTemplate->GetNextDoc( PosDoc );
POSITION PosView = pDoc->GetFirstViewPosition();
while(PosView)
{
CView* pView = pDoc->GetNextView( PosView );
}
}
}
uj5u.com熱心網友回復:
不是 單檔案 嗎?uj5u.com熱心網友回復:
如:void CFileView::OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView)
{
CView::OnActivateView(bActivate, pActivateView, pDeactiveView);
if (GetDocument()->IsKindOf(RUNTIME_CLASS(CPViewDoc)))
theApp.SetStatusBarText(((CPViewDoc *)GetDocument())->szStatusMessage);
else
theApp.SetStatusBarText(((CViewfileDoc *)GetDocument())->szStatusMessage);
}
uj5u.com熱心網友回復:
單檔案多視圖,多個view的
uj5u.com熱心網友回復:
這是推薦的第二種方法吧,就是遍歷所有view,能否詳細介紹一下?這一段用在哪里?Doc中的GetFirstViewPosition()嗎?我沒看到賦值陳述句啊,那怎么傳遞變數呢?不懂哦…
uj5u.com熱心網友回復:
回復留言的熱心朋友。今天一天試了CSDN推薦的兩種方法(一種是利用Doc中轉,另一種是遍歷所有視圖類),都沒有成功。
突然想嘗試一下直接呼叫指標:在bview中直接使用aview,居然實作了。就是在bview的OnDraw()中,使用aView* paview=(aView*)pMain->GetActiveView();然后用b=paview->a居然把a的值傳遞給b了!
實在不明白,如果直接呼叫就能實作,大家為何費神費力要轉來轉去?請大神明示
uj5u.com熱心網友回復:
話說內建的CDocument::UpdateAllViews不用的么……把需要通知的資料廣播過去,各個視圖自己在OnUpdate里寫處理代碼uj5u.com熱心網友回復:
你直接定義 全域 變數 更方便 , C++ 類 就是要 把 資料 封裝 起來,b=paview->a 這個 a 就暴露了轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/13599.html
標籤:界面
上一篇:這種函式宏改怎么寫?
