Hey ik heb zelf een programmaatje geschreven om zelf een surfplank te ontwerpen. Nu heb ik een probleem waarover ik op het internet niets kan vinden en hoop dat jullie mij kunnen helpen.
probleem: Wanneer ik uit het menu File->New kies krijg ik een popup schermpje (zie pic) met de vraag wat voor document ik wil openen. (dit gebeurd alleen wanneer ik al van view ben gewisseld)
Het openen van opgeslagen documenten lukt meestal ook maar 1 keer.
Zoals jullie al begrepen hebben heb ik dus meerder view classes. De objecten worden niet bewaard maar telkens vernietigd en aangemaakt.

Hier nog even de code waarmee ik van view veranderd.
Alvast bedankt!
probleem: Wanneer ik uit het menu File->New kies krijg ik een popup schermpje (zie pic) met de vraag wat voor document ik wil openen. (dit gebeurd alleen wanneer ik al van view ben gewisseld)
Het openen van opgeslagen documenten lukt meestal ook maar 1 keer.
Zoals jullie al begrepen hebben heb ik dus meerder view classes. De objecten worden niet bewaard maar telkens vernietigd en aangemaakt.
Hier nog even de code waarmee ik van view veranderd.
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
| bool CBoardDesignApp::SwitchView(CView* pNewView) { CView* pActiveView = ((CFrameWnd*)m_pMainWnd)->GetActiveView(); // CBoardView* pNewView= new CBoardView; //pNewView=(CBoardView*) new CBoardView; CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CBoardDesignDoc), RUNTIME_CLASS(CMainFrame), // main SDI frame window RUNTIME_CLASS(CBoardView)); if (!pDocTemplate) return FALSE; AddDocTemplate(pDocTemplate); CDocument* pCurrentDoc = ((CFrameWnd*)m_pMainWnd)->GetActiveDocument(); //CBoardDesignDoc* pCurrentDoc = pActiveView->GetDocument(); CCreateContext newContext; newContext.m_pNewViewClass=NULL; newContext.m_pNewDocTemplate=pDocTemplate; newContext.m_pLastView=NULL; newContext.m_pCurrentFrame=NULL; newContext.m_pCurrentDoc=pCurrentDoc; UINT viewID = AFX_IDW_PANE_FIRST; CRect rect(0,0,0,0); pNewView->Create(NULL, NULL,WS_CHILD|WS_BORDER,rect,m_pMainWnd,viewID, &newContext); pNewView->SendMessage(WM_INITIALUPDATE,0,0); // Exchange view window IDs so RecalcLayout() works. //#ifndef _WIN32 //UINT temp = ::GetWindowWord(pActiveView->m_hWnd, GWW_ID); //::SetWindowWord(pActiveView->m_hWnd, GWW_ID, ::GetWindowWord(pNewView->m_hWnd, GWW_ID)); //::SetWindowWord(pNewView->m_hWnd, GWW_ID, temp); //#else //UINT temp = ::GetWindowLong(pActiveView->m_hWnd, GWL_ID); //::SetWindowLong(pActiveView->m_hWnd, GWL_ID, ::GetWindowLong(pNewView->m_hWnd, GWL_ID)); //::SetWindowLong(pNewView->m_hWnd, GWL_ID, temp); //#endif pActiveView->ShowWindow(SW_HIDE); pNewView->ShowWindow(SW_SHOW); ((CFrameWnd*) m_pMainWnd)->SetActiveView(pNewView); ((CFrameWnd*) m_pMainWnd)->RecalcLayout(); pNewView->Invalidate(); pActiveView->DestroyWindow(); return true; } |
Alvast bedankt!