MFC MDI结构,
每次新建一个文档,对应一个窗口, 每个窗口都是左边是视图区,右边是一个对话框,视图区应该除去对话框的区域,如果用:
//
CCtlPaneDlg m_CtlPaneDlg;
////
m_CtlPaneDlg.Create( IDD_DLG_CTLPANE, this );
//m_CtlPaneDlg.SetWindowPos ( NULL, 0, 0, 250, cy, SWP_SHOWWINDOW );的方式,虽然可以出现对话框,但视图区还是没有变化,只是在View上覆盖了对话框。
如果用分割窗口的话,好像闪烁就更厉害了! 不知道怎么做?可以让spy++ ,查看时,窗口为两个窗口区,坐标为View,右边为dialog
每次新建一个文档,对应一个窗口, 每个窗口都是左边是视图区,右边是一个对话框,视图区应该除去对话框的区域,如果用:
//
CCtlPaneDlg m_CtlPaneDlg;
////
m_CtlPaneDlg.Create( IDD_DLG_CTLPANE, this );
//m_CtlPaneDlg.SetWindowPos ( NULL, 0, 0, 250, cy, SWP_SHOWWINDOW );的方式,虽然可以出现对话框,但视图区还是没有变化,只是在View上覆盖了对话框。
如果用分割窗口的话,好像闪烁就更厉害了! 不知道怎么做?可以让spy++ ,查看时,窗口为两个窗口区,坐标为View,右边为dialog
解决方案 »
- VC6.0 判断结果集是否为空
- error C2143: syntax error : missing ';' before '<'--别人的机子能篇,为嘛我这儿不行?
- VC编绎问题(能正常运行,但单步跟踪却如下提示ntdll.dll: no matching symbolic information )
- 网络编程时窗口大小什么意思?
- 怎样改变ListCtrl里的所有Item的高度?
- 一个简单而重要的问题:VC6能用到多少年后不能用了?
- 请问大哥哥CRichEditCtrl与CEdit 有什么区别?
- 如何在vc里面显示万分号
- WinSetHook拦截消息的问题
- 想做让用户设置PATH的对话框。
- vs2010中Sleep()调试正常/运行出错
- 关于frf格式文件和vc联接的问题
这样似乎不太好,
而不是view里
然后 movewindow view 以及你创建的对话框到合适的位置
在CMainFrame 类中 添加 一个 MyDialogBar 对象,然后创建,停靠,,我做过相关的程序,现在不太记得了;
回schlafenhamster 和 VisualEleven :
采用拆分窗口的办法, 左视图嵌入一个Dialog, 然后拖动View的窗口时, 感觉Dialog闪烁的很厉害! 不知道怎么改善?
在拖动窗口时,左边的Dialog有时候会消失!
int CChildFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIChildWndEx::OnCreate(lpCreateStruct) == -1)
return -1;
// 创建一个视图以占用框架的工作区
if (!m_wndView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW,
CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL))
{
TRACE0("未能创建视图窗口\n");
return -1;
}
return 0;
}BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: 在此添加专用代码和/或调用基类
m_splitterWnd.CreateStatic( this, 1, 2 );
m_splitterWnd.CreateView( 0, 0, RUNTIME_CLASS(CViewLeft), CSize(0,0), pContext );
m_splitterWnd.CreateView( 0, 1, RUNTIME_CLASS(CViewRight), CSize(0,0), pContext);
m_splitterWnd.SetColumnInfo( 0, 250, 10 );
return TRUE;
return CMDIChildWndEx::OnCreateClient(lpcs, pContext);
}在OnCreate中创建的View: m_wndView
和OnCreateClient中创建的分割窗口m_splitterWnd;
和 CChildFrame 三者是什么关系?
你在precreatewindow的时候可以把clipchildren
属性设置上
即子窗口区域不重绘
如果 只有一个 view 要 分割,那么 要分割 的 view 所用的 CChildFrame 必须派生。
{
// TODO: 在此处通过修改 CREATESTRUCT cs 来修改窗口类或样式
if( !CMDIChildWndEx::PreCreateWindow(cs) )
return FALSE; return TRUE;
}还是:BOOL CChildView::PreCreateWindow(CREATESTRUCT& cs)
{
if (!CWnd::PreCreateWindow(cs))
return FALSE; cs.dwExStyle |= WS_EX_CLIENTEDGE;
cs.style &= ~WS_BORDER;
cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS,
::LoadCursor(NULL, IDC_ARROW), reinterpret_cast<HBRUSH>(COLOR_WINDOW+1), NULL); return TRUE;
}
加入:
cs.style |=WS_CLIPCHILDREN;
都无效,拖动视图窗口时,还是闪烁的厉害!看来我得好好研究哈 MFC的MDI结构了!
不能理解:
“如果 只有一个 view 要 分割,那么 要分割 的 view 所用的 CChildFrame 必须派生。 ”
如果 只有一个 view 要 分割,那么 要分割 的 view 所用的 CChildFrame 必须派生。
其他的 view 还用 原来的 CChildFrame。
谢谢你的回复!我的是单view的,一个文档对应一个view!
多文档的, 多子窗口的,但一个文档对应一个View
View "
那不等于 多 view