无文档关联的FormView窗口中的控件初始化的问题

z9851214 2004-04-09 10:08:59
我在一个SDI文档中分割了视图,左右两个,左边为CSrollView与文档关联,右边为FormView与文档无关,在FormView中设置了slider控件来操作左边的文档数据。当时我不知道如何初始化slider控件。在CFormView::OnInitialUpdate()中设置 m_slider.SetRange和SetPos好像不起作用。小虾是初学者,请各位大虾多多指教!!!

m_slider为控件名
...全文
87 12 点赞 打赏 收藏 举报
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
z9851214 2004-04-10
非常感谢kongyunzhongque(云雀) 大侠,我的问题解决了
也非常感谢GSK168(锐)给我提供了源代码
  • 打赏
  • 举报
回复
kongyunzhongque 2004-04-09
void CMyFormView::OnInitialUpdate()
{
CSliderCtrl *psc=(CSliderCtrl*)GetDlgItem(IDC_SLIDER1);
psc->SetRange(0,100);
psc->SetTicFreq(10);
psc->SetPos(20);

CFormView::OnInitialUpdate();

}
//CSliderCtrl的Orientation为Verticl
void CMyFormView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{

CSliderCtrl *psc=(CSliderCtrl*)GetDlgItem(IDC_SLIDER1);
int iPos =psc->GetPos();
CString str;
str.Format("%d",iPos);
SetDlgItemText(IDC_EDIT1,str);
CFormView::OnVScroll(nSBCode, nPos, pScrollBar);
}
  • 打赏
  • 举报
回复
z9851214 2004-04-09
谢谢,我试了,但还是不行,调试的时候,发现m_slider 指向为空
  • 打赏
  • 举报
回复
kongyunzhongque 2004-04-09
OnCreate()试试!
  • 打赏
  • 举报
回复
kongyunzhongque 2004-04-09
m_wndSplitter.DeleteView(0, 0);
应替换为m_wndSplitter.DeleteView(0, 1);
  • 打赏
  • 举报
回复
kongyunzhongque 2004-04-09
说这么半天,用自己手动调用OnInitialUpdate();
void CMainFrame::OnViewSwitch()
{

CSize paneSize1(0, 0);

CCreateContext Context;
Context.m_pNewViewClass=RUNTIME_CLASS(CMyFormView);
Context.m_pCurrentDoc=GetActiveDocument();
Context.m_pCurrentFrame=this;
Context.m_pNewDocTemplate=NULL;
Context.m_pLastView=(CView*)m_wndSplitter.GetPane(0,0);

m_wndSplitter.DeleteView(0, 0);
m_wndSplitter.CreateView(0, 1,RUNTIME_CLASS(CMyFormView),paneSize1, &Context);
CView *pView=(CView*)m_wndSplitter.GetPane(0,1);
pView->GetParentFrame()->RecalcLayout();
m_wndSplitter.RecalcLayout();
pView->OnInitialUpdate();
m_wndSplitter.SetActivePane(0,1);
}
  • 打赏
  • 举报
回复
GSK168 2004-04-09
我有一个和你的情况相似的代码,你想参考一下吗,
说这么多,有时也是白费,QQ:108158579
  • 打赏
  • 举报
回复
z9851214 2004-04-09
谢谢各位,我的右边视图是可以切换的,可以切换几个FormView,其代码为:
CMyFormView1* pView=(CMyFormView1*)MainFrame1->m_wndSplitter.GetPane(0,1);


ASSERT(pView != NULL);

CDocument* pDoc = pView->GetDocument();

//删除掉当前的视图(即右视图)

MainFrame1->m_wndSplitter.DeleteView(0, 1);

//添加新的视图

CCreateContext ctxt;
ctxt.m_pCurrentDoc = pDoc;

VERIFY(MainFrame1->m_wndSplitter.CreateView(0, 1,
RUNTIME_CLASS(CMyFormView2), CSize(100, 100), &ctxt));
MainFrame1->m_wndSplitter.RecalcLayout();

程序开始时候,在MyFormView1上的SLIDER的位置是可以用kongyunzhongque(云雀)的方法设置的
但切换到MyFormView2后控件无法初始化,不知何故
kongyunzhongque(云雀)大虾,你知道原因吗?
  • 打赏
  • 举报
回复
YunLion 2004-04-09
在CMyApp::InitInstance()返回前调用你的初始化函数。
  • 打赏
  • 举报
回复
kongyunzhongque 2004-04-09
不知你的分割栏是在哪里设定的?
CMyFormView跟文档还是有关联的,通过CCreateContext* pContext

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{

VERIFY(m_wndSplitter.CreateStatic(this,1,2));

m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CSdittView),CSize(200,0),pContext);
m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CMyFormView),CSize(0,0),pContext);
return TRUE;
}
  • 打赏
  • 举报
回复
itmaster 2004-04-09
觉得kongyunzhongque(云雀)的方法是对的
思考ing
  • 打赏
  • 举报
回复
z9851214 2004-04-09
再次感谢,但我加了以上代码以后 程序没有反应,我设置断点调试
void CMyFormView::OnInitialUpdate()
{
/*在此处设断点*/CSliderCtrl *psc=(CSliderCtrl*)GetDlgItem(IDC_SLIDER1);
psc->SetRange(0,100);
psc->SetTicFreq(10);
psc->SetPos(20);

CFormView::OnInitialUpdate();

}
发现程序并没有在断点处运行,会不会是CMyFormView没有跟文档联系,OnInitialUpdate消息没有执行???我将上述代码加入int CMyFormView::OnCreate(LPCREATESTRUCT lpCreateStruct)中发现psc指向空,会不会是要指名GetDlgItem的第二个参数,如何加呢?



  • 打赏
  • 举报
回复
相关推荐
发帖
界面
创建于2007-09-28

1.5w+

社区成员

VC/MFC 界面
申请成为版主
帖子事件
创建了帖子
2004-04-09 10:08
社区公告
暂无公告