帮一个小问题啊 现在我用的是单文档,可是现在就是有一个视图,我很象用vb一样,多生成几个的窗体出来,用普通的对话筐行吗?还有一个是见多几个视图,可是我耗了很久了,还是不行 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 ////////////////////////////////////////////////////////////////////////////多个视图的切换。 //依如下步骤增加一个视图://a.)修改#define NUMVIEWS 的值//b.)在CreateAllTheView()里相应位置增加: // m_pViews[n] = (CView*) new MyViewClass;和// ((MyViewClass*)m_pViews[n])->OnInitialUpdate();行//c.)在GetIndex(int nFormID)里增加相应的case//////////////////////////////////////////////////////////////////////////CView * CDrivingLicenceApplicationApp::SwitchToView(int nViewID){ int nIndex = GetIndex(nViewID); ASSERT(nIndex>=0&&nIndex<NUMVIEWS); CView* pNewView = m_pViews[nIndex]; CView* pActiveView =((CFrameWnd*) m_pMainWnd)->GetActiveView(); if ( !pActiveView ) // 当前没有激活的视图 return NULL; if ( pNewView == pActiveView ) // 当前视图和需要切换的视图相同 return pActiveView; // 交换视图的窗口ID,使RecalcLayout()可以工作 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); // 显示新的视图,隐藏前一个视图 pActiveView->ShowWindow(SW_HIDE); pNewView->ShowWindow(SW_SHOW); ((CFrameWnd*) m_pMainWnd)->SetActiveView(pNewView); ((CFrameWnd*) m_pMainWnd)->RecalcLayout(); pNewView->Invalidate(); return pActiveView;}// 根据Form的ID获得m_pViews[]中的下标int CDrivingLicenceApplicationApp::GetIndex(int nFormID){ switch( nFormID) { case IDD_DRIVINGLICENCEAPPLICATION_FORM: return 0; case IDD_FORMVIEW_ENROL: return 1; case IDD_FORMVIEW_CHECKUP: return 2; case IDD_FORMVIEW_VERIFY: return 3; case IDD_FORMVIEW_MESSAGE: return 4; case IDD_FORMVIEW_REFER: return 5; default: return -1; }// return 0;}// 创建所有视void CDrivingLicenceApplicationApp::CreateAllTheView(void){ m_pViews[0] = (CView*) new CDrivingLicenceApplicationView; m_pViews[1] = (CView*) new EnrolFormView; m_pViews[2] = (CView*) new CheckupFormView; m_pViews[3] = (CView*) new VerifyFormView; m_pViews[4] = (CView*) new MessageFormView; m_pViews[5] = (CView*) new ReferFormView; CDocument* pCurrentDoc = ((CFrameWnd*) m_pMainWnd)->GetActiveDocument(); // 初始化创建上下文相关指针 CCreateContext newContext; newContext.m_pNewViewClass = NULL; newContext.m_pNewDocTemplate = NULL; newContext.m_pLastView = NULL; newContext.m_pCurrentFrame = NULL; newContext.m_pCurrentDoc = pCurrentDoc; // 最初激活视的ID为AFX_IDW_PANE_FIRST,对新创建的视图增加这个值,注意对CSplitterWnd不能这样使用 // UINT viewID[NUMVIEWS]; // viewID[1] = AFX_IDW_PANE_FIRST + 1; CRect rect(0, 0, 0, 0); for(int nView=1; nView<NUMVIEWS; nView++) { // 创建新的视图,创建的视图在应用中永久存在,直到应用程序退出,应用程序会自动删除新创建的视图 m_pViews[nView]->Create(NULL, NULL, (AFX_WS_DEFAULT_VIEW & ~WS_VISIBLE), // AFX_WS_DEFAULT_VIEW代表(WS_BORDER | WS_VISIBLE | WS_CHILD) // rect, m_pMainWnd, viewID[nView], &newContext); rect, m_pMainWnd, AFX_IDW_PANE_FIRST + nView, &newContext); } // 当文档模板创建视图的时候,会自动发送WM_INITIALUPDATE消息,因此对于我们自己创建的视图,需要人工发送这条消息 ((EnrolFormView*)m_pViews[1])->OnInitialUpdate(); ((CheckupFormView*)m_pViews[2])->OnInitialUpdate(); ((VerifyFormView*)m_pViews[3])->OnInitialUpdate(); ((MessageFormView*)m_pViews[4])->OnInitialUpdate(); ((ReferFormView*)m_pViews[5])->OnInitialUpdate();} 另外各个视的构造改protected:为public:// MessageFormView 窗体视图class MessageFormView : public CFormView{ DECLARE_DYNCREATE(MessageFormView)public://protected: MessageFormView(); // 动态创建所使用的受保护的构造函数 virtual ~MessageFormView(); 还有一句 #define NUMVIEWS 6 你好了之后顺便帮我想下这个问题啊http://community.csdn.net/Expert/topic/3192/3192965.xml?temp=.7633631 哈哈,我跟你说啊,我很久以前我就问过这个问题了,我也研究了很久,你看这里一下象不象再说当时我还没做到这个部分http://tech.163.com/2004w03/12500/2004w03_1080024749448.html 你好了之后顺便帮我想下这里的这个问题啊http://community.csdn.net/Expert/topic/3192/3192965.xml?temp=.7633631 http://www.vckbase.com/code/downcode.asp?id=2281 try { pConn->begintrans(); ModifyTable1(); ModifyTable2(); pConn->CommitTrans();} VC++ 重新登录系统的代码及思路? CFileDialog执行到DoModul有时出现未知误 各位大大教下小弟吧,关于edit输入框中输入数组问题,急!!!急!!!! 我下面的代码有递归吗?注意看类的成员函数,求真心深刻剖析 请教一个有名管道readfile的问题 菜鸟的疑惑! 消息处理与多线程 各位老大:谁有netbios协议的例子程序.发一个给小弟,急用. 新装的VC++ 6.0不好使! 我想从outlook中导出通讯录到我的程序中,用vc如何实现? 在此高分请教crystal report9.2的问题 急、急、急啊
//多个视图的切换。
//依如下步骤增加一个视图:
//a.)修改#define NUMVIEWS 的值
//b.)在CreateAllTheView()里相应位置增加:
// m_pViews[n] = (CView*) new MyViewClass;和
// ((MyViewClass*)m_pViews[n])->OnInitialUpdate();行
//c.)在GetIndex(int nFormID)里增加相应的case
//////////////////////////////////////////////////////////////////////////
CView * CDrivingLicenceApplicationApp::SwitchToView(int nViewID)
{
int nIndex = GetIndex(nViewID); ASSERT(nIndex>=0&&nIndex<NUMVIEWS);
CView* pNewView = m_pViews[nIndex];
CView* pActiveView =((CFrameWnd*) m_pMainWnd)->GetActiveView();
if ( !pActiveView ) // 当前没有激活的视图
return NULL;
if ( pNewView == pActiveView ) // 当前视图和需要切换的视图相同
return pActiveView; // 交换视图的窗口ID,使RecalcLayout()可以工作
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);
// 显示新的视图,隐藏前一个视图
pActiveView->ShowWindow(SW_HIDE);
pNewView->ShowWindow(SW_SHOW);
((CFrameWnd*) m_pMainWnd)->SetActiveView(pNewView);
((CFrameWnd*) m_pMainWnd)->RecalcLayout();
pNewView->Invalidate();
return pActiveView;
}// 根据Form的ID获得m_pViews[]中的下标
int CDrivingLicenceApplicationApp::GetIndex(int nFormID)
{
switch( nFormID)
{
case IDD_DRIVINGLICENCEAPPLICATION_FORM:
return 0;
case IDD_FORMVIEW_ENROL:
return 1;
case IDD_FORMVIEW_CHECKUP:
return 2;
case IDD_FORMVIEW_VERIFY:
return 3;
case IDD_FORMVIEW_MESSAGE:
return 4;
case IDD_FORMVIEW_REFER:
return 5;
default:
return -1;
}
// return 0;
}// 创建所有视
void CDrivingLicenceApplicationApp::CreateAllTheView(void)
{
m_pViews[0] = (CView*) new CDrivingLicenceApplicationView;
m_pViews[1] = (CView*) new EnrolFormView;
m_pViews[2] = (CView*) new CheckupFormView;
m_pViews[3] = (CView*) new VerifyFormView;
m_pViews[4] = (CView*) new MessageFormView;
m_pViews[5] = (CView*) new ReferFormView; CDocument* pCurrentDoc = ((CFrameWnd*) m_pMainWnd)->GetActiveDocument();
// 初始化创建上下文相关指针
CCreateContext newContext;
newContext.m_pNewViewClass = NULL;
newContext.m_pNewDocTemplate = NULL;
newContext.m_pLastView = NULL;
newContext.m_pCurrentFrame = NULL;
newContext.m_pCurrentDoc = pCurrentDoc;
// 最初激活视的ID为AFX_IDW_PANE_FIRST,对新创建的视图增加这个值,注意对CSplitterWnd不能这样使用
// UINT viewID[NUMVIEWS];
// viewID[1] = AFX_IDW_PANE_FIRST + 1;
CRect rect(0, 0, 0, 0);
for(int nView=1; nView<NUMVIEWS; nView++)
{
// 创建新的视图,创建的视图在应用中永久存在,直到应用程序退出,应用程序会自动删除新创建的视图
m_pViews[nView]->Create(NULL, NULL,
(AFX_WS_DEFAULT_VIEW & ~WS_VISIBLE),
// AFX_WS_DEFAULT_VIEW代表(WS_BORDER | WS_VISIBLE | WS_CHILD)
// rect, m_pMainWnd, viewID[nView], &newContext);
rect, m_pMainWnd, AFX_IDW_PANE_FIRST + nView, &newContext);
} // 当文档模板创建视图的时候,会自动发送WM_INITIALUPDATE消息,因此对于我们自己创建的视图,需要人工发送这条消息
((EnrolFormView*)m_pViews[1])->OnInitialUpdate();
((CheckupFormView*)m_pViews[2])->OnInitialUpdate();
((VerifyFormView*)m_pViews[3])->OnInitialUpdate();
((MessageFormView*)m_pViews[4])->OnInitialUpdate();
((ReferFormView*)m_pViews[5])->OnInitialUpdate();
}
{
DECLARE_DYNCREATE(MessageFormView)public://protected:
MessageFormView(); // 动态创建所使用的受保护的构造函数
virtual ~MessageFormView();
#define NUMVIEWS 6
http://community.csdn.net/Expert/topic/3192/3192965.xml?temp=.7633631
再说当时我还没做到这个部分
http://tech.163.com/2004w03/12500/2004w03_1080024749448.html
http://community.csdn.net/Expert/topic/3192/3192965.xml?temp=.7633631
{
pConn->begintrans(); ModifyTable1();
ModifyTable2();
pConn->CommitTrans();
}