关于刷新客户区视图的问题,100分征!!!

byry 2003-11-26 01:29:19
通过某事件给客户区发送消息,改变了其中的成员变量,需要重新绘制客户区视图,我把绘制的函数加在了ONDRAW()事件中,(没有使用INVALIDATE()),发现视图没有被更新,但是使用鼠标改变窗口大小,发现这时视图发生了变化,请问该怎么解决?

如果在ONDRAW()中使用INVALIDATE(),视图就拼命的闪个不停,这可要怎么整?
...全文
116 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
fayifu 2003-11-27
  • 打赏
  • 举报
回复
已改好,基本完成你说的功能,请查收。
byry 2003-11-27
  • 打赏
  • 举报
回复
楼上的大哥,我发过去了,不大,请注意查收
fayifu 2003-11-27
  • 打赏
  • 举报
回复
大吗?不大就发到这
shw1970@163.com
byry 2003-11-27
  • 打赏
  • 举报
回复
是改变了,不然左视图也不会发生变化啊
canjian 2003-11-27
  • 打赏
  • 举报
回复
m_p3dMatrixView->m_changed
中的m_changed是不是改变了?
byry 2003-11-27
  • 打赏
  • 举报
回复
楼上:还是不行啊,还是需要调整窗口的Splitter,或者是将窗口最小化后再打开,这样视图才会发生变化,

有哪位高手愿意接招?帮我调试一下,我把程序发过去
byry 2003-11-27
  • 打赏
  • 举报
回复
我用SendMessage也试过了,但是更新右视图的事件中无法进行SendMessage的操作,总是崩溃。

fayifu(fayifu)兄弟已经把程序改好了,而且很好使,谢谢兄弟们!

给分!
Poseidon2 2003-11-27
  • 打赏
  • 举报
回复
上面写错了,是sendmessage
Poseidon2 2003-11-27
  • 打赏
  • 举报
回复
不知楼上的兄弟是怎么解决的,调用文档的updateallviews函数也行,它会更新所有的视图,你左边是视图吧,不是的话用sendmessang发一个消息给左边的东东也行,在响应函数里调用
invalidate或invalidaterect。
databasesql 2003-11-26
  • 打赏
  • 举报
回复
在最后加上UpdateWindow();

void CLeftView::Get3dMatrixView()
{
CMainFrame *pMainFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;
if (!pMainFrame)
return;
m_p3dMatrixView = (C3dMatrixView*)pMainFrame->GetRightPane();
Invalidate(TRUE);
UpdateWindow();
}

byry 2003-11-26
  • 打赏
  • 举报
回复
有哪位高手帮忙诊断一下啊?

整个流程是这样的:从另一个程序发送BUFFERS到该程序,该程序的右视图接到该BUFFERS,然后右视图发生改变,当右视图发生的改变的同时,需要让左视图也发生改变,就是这样
byry 2003-11-26
  • 打赏
  • 举报
回复
void CLeftView::Get3dMatrixView()
{
CMainFrame *pMainFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;
if (!pMainFrame)
return;
m_p3dMatrixView = (C3dMatrixView*)pMainFrame->GetRightPane();
Invalidate(TRUE);
}


void CLeftView::OnDraw(CDC* pDC)
{
C3dMatrixDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

// TODO: add draw code for native data here
if(m_p3dMatrixView->m_changed)//另一个视图发生改变
{
m_LeftIni = true;
Get3dMatrixView();
}

this->DrawText(pDC);

}

就着么简单,为什么只有我用鼠标触动中间的那个m_wndSplitter,左边视图才会发生变化呢?
bonus 2003-11-26
  • 打赏
  • 举报
回复
将源码贴出看一下
byry 2003-11-26
  • 打赏
  • 举报
回复
to: fayifu(fayifu)
在成员变量发生改变时,我加入了INVALIDATE(),但是只有改变客户区的窗口大小,视图才会发生变化,请问这是为什么?
bohut 2003-11-26
  • 打赏
  • 举报
回复
同意一楼,说的很精辟。
piero_csa 2003-11-26
  • 打赏
  • 举报
回复
对头,就是这样!来晚了,就顶一哈了!
fayifu 2003-11-26
  • 打赏
  • 举报
回复
在你改变成员变量的下面加入INVALIDATE(),它会帮你调用ONDRAW(),如果加在ONDRAW()中就是死循环了。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧