界面问题,想达到这样的效果应该怎么做? 程序初始运行时是一个formview,上面是一些button,点击不同的button可以显示不同的View,(开始的formview当然不在了),哪儿有相关的文章吗?初学Vc望高手指教!谢谢!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以参考:http://www.vckbase.net/document/viewdoc/?id=691 这个例子中使用了三种View,你可以下载下来看看! ////////////////////////////////////////////////////////////////////////////多个视图的切换。 //依如下步骤增加一个视图://a.)修改#define NUMVIEWS 的值//b.)在CreateAllTheView()里相应位置增加: // m_pViews[n] = (CView*) new MyViewClass;和// ((MyViewClass*)m_pViews[n])->OnInitialUpdate();行//c.)在GetIndex(int nFormID)里增加相应的case//////////////////////////////////////////////////////////////////////////CView * CMyApp::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 CMyApp::GetIndex(int nFormID){ switch( nFormID) { case IDD_DRIVINGLICENCEAPPLICATION_FORM: return 0; case IDD_FORMVIEW_ENROL: return 1; case IDD_FORMVIEW_CHECKUP: return 2; default: return -1; }// return 0;}// 创建所有视void CMyApp::CreateAllTheView(void){ m_pViews[0] = (CView*) new CMyView; m_pViews[1] = (CView*) new EnrolFormView; m_pViews[2] = (CView*) new CheckupFormView; 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();} 窗体最大化后,状态栏怎么跟着变化呀?? 关于多线程下载的问题 学directx是不是从opengl开始学好一点? 自定义消息不响应的问题(我的问题比较复杂一些) 关于鼠标全局钩子,我想在程序窗口在未激活的状态下也能监视鼠标动作,包括鼠标所在整个显示屏幕位置,和鼠标点击的动作!以下是我代码,高手们看看有问题不? property page 问题 CSDN终于能上了 请问SDI程序标题中的“无标题”怎么修改? 关于线程, 各位高手们能否说说SAN(系统域网)技术 socket阻塞的问题。 求助:构造位图并显示出错.急!
//多个视图的切换。
//依如下步骤增加一个视图:
//a.)修改#define NUMVIEWS 的值
//b.)在CreateAllTheView()里相应位置增加:
// m_pViews[n] = (CView*) new MyViewClass;和
// ((MyViewClass*)m_pViews[n])->OnInitialUpdate();行
//c.)在GetIndex(int nFormID)里增加相应的case
//////////////////////////////////////////////////////////////////////////
CView * CMyApp::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 CMyApp::GetIndex(int nFormID)
{
switch( nFormID)
{
case IDD_DRIVINGLICENCEAPPLICATION_FORM:
return 0;
case IDD_FORMVIEW_ENROL:
return 1;
case IDD_FORMVIEW_CHECKUP:
return 2;
default:
return -1;
}
// return 0;
}// 创建所有视
void CMyApp::CreateAllTheView(void)
{
m_pViews[0] = (CView*) new CMyView;
m_pViews[1] = (CView*) new EnrolFormView;
m_pViews[2] = (CView*) new CheckupFormView; 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();
}