C++ 在弹出的子对话框中嵌入view,实现可滚动显示 本帖最后由 cdner 于 2011-05-07 20:48:40 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://topic.csdn.net/u/20100602/22/36e6c6b7-014d-4cc0-8ab9-5e08ab1398f7.html 不用那么麻烦 你创建一个CFrameWnd然后再它的OnCrete中创建一个View就行了 CPicViewEx *pView=(CPicViewEx *)((CFrameWnd*)pFrameWnd)->CreateView(&cc);不一样吗?还有这段代码中的 CDlgViewView 和 CDlgViewDoc 都是怎么添加的?为了继承CView,加入子类CDlgViewView ,但是 CDlgViewDoc 应该怎么添加呢?思路应该是 在dialog 里重新创建一个框架,已经框架对应的 文档/视图 结构,然后生成 View 吧?其中的文档类和视图类是怎么添加到工程里的? 是直接添加类吗? 它们跟其他类之间有关联的话,怎么处理的? 上面说的“这段代码”是这篇文章上的http://blog.csdn.net/mythma/archive/2008/08/29/2848568.aspx 可以在对话框中加入VIEW了,在OnInitDialog()函数中写入以下代码: //在dialog中嵌入view, CPicViewEx继承自CScrollView CWnd* pPosWnd = GetDlgItem(IDC_PIC); CRect rect; pPosWnd->GetWindowRect(&rect); CRect rectView = rect; ScreenToClient(&rect); m_pFrame = new CFrameWnd(); //对话框内视图的父窗口 m_pFrame->Create(NULL, NULL, WS_CHILD | WS_VISIBLE, rect, this); //m_pFrame->ScreenToClient(&rectView); ASSERT(m_pFrame); m_pView = (CPicViewEx*)RUNTIME_CLASS(CPicViewEx)->CreateObject(); m_pView->Create(NULL, NULL,WS_CHILD | WS_VISIBLE, rect, m_pFrame, IDC_PIC, NULL); m_pView->OnInitialUpdate();但是在VIEW中画图的位置不对,上面空出来一大截。void CPicViewEx::OnDraw(CDC* pDC){ CDocument* pDoc = GetDocument(); // TODO: 在此添加绘制代码 CRect rc; GetWindowRect(&rc); Draw(pDC->m_hDC, rc);}//重载擦除背景,效果也是上面空出来一部分白色BOOL CPicViewEx::OnEraseBkgnd(CDC* pDC){ // TODO: 在此添加消息处理程序代码和/或调用默认值 CRect rc; GetClientRect(&rc); CBrush m_BrushBackGround; COLORREF dlgbkColor = ::GetSysColor(COLOR_3DFACE); m_BrushBackGround.CreateSolidBrush(dlgbkColor); pDC->FillRect(&rc, &m_BrushBackGround); m_BrushBackGround.DeleteObject(); return TRUE; //return CScrollView::OnEraseBkgnd(pDC);}而且图像放大后并没有滚动条出现。 mfc写仿QQ通讯录菜单 请问:cmarkup里的函数setdoc和getdoc分别什么作用啊? 【求救!】mfc消息映射 CBitmap bitmapOEM; bitmapOEM.LoadOEMBitmap(OBM_COMBO);OBM_COMBO没有定义 linux程序,如何得到登陆用户名? Worker Threads 和 User-interface Threads的区别是什么? 求救! 最简单的socket问题。 怎样使Commbox控件无效? IIS6 编写ISAPI改写页面输出内容 加载dll失败问题 求救 状态栏样式 请求解析代码
CPicViewEx *pView=(CPicViewEx *)((CFrameWnd*)pFrameWnd)->CreateView(&cc);不一样吗?还有这段代码中的 CDlgViewView 和 CDlgViewDoc 都是怎么添加的?
为了继承CView,加入子类CDlgViewView ,但是 CDlgViewDoc 应该怎么添加呢?思路应该是 在dialog 里重新创建一个框架,已经框架对应的 文档/视图 结构,然后生成 View 吧?其中的文档类和视图类是怎么添加到工程里的? 是直接添加类吗? 它们跟其他类之间有关联的话,怎么处理的?
上面说的“这段代码”是这篇文章上的http://blog.csdn.net/mythma/archive/2008/08/29/2848568.aspx
CWnd* pPosWnd = GetDlgItem(IDC_PIC);
CRect rect;
pPosWnd->GetWindowRect(&rect);
CRect rectView = rect;
ScreenToClient(&rect);
m_pFrame = new CFrameWnd(); //对话框内视图的父窗口
m_pFrame->Create(NULL, NULL, WS_CHILD | WS_VISIBLE, rect, this);
//m_pFrame->ScreenToClient(&rectView);
ASSERT(m_pFrame); m_pView = (CPicViewEx*)RUNTIME_CLASS(CPicViewEx)->CreateObject();
m_pView->Create(NULL, NULL,WS_CHILD | WS_VISIBLE, rect, m_pFrame, IDC_PIC, NULL);
m_pView->OnInitialUpdate();
但是在VIEW中画图的位置不对,上面空出来一大截。void CPicViewEx::OnDraw(CDC* pDC)
{
CDocument* pDoc = GetDocument();
// TODO: 在此添加绘制代码
CRect rc;
GetWindowRect(&rc);
Draw(pDC->m_hDC, rc);
}
//重载擦除背景,效果也是上面空出来一部分白色
BOOL CPicViewEx::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CRect rc;
GetClientRect(&rc); CBrush m_BrushBackGround;
COLORREF dlgbkColor = ::GetSysColor(COLOR_3DFACE);
m_BrushBackGround.CreateSolidBrush(dlgbkColor);
pDC->FillRect(&rc, &m_BrushBackGround);
m_BrushBackGround.DeleteObject();
return TRUE;
//return CScrollView::OnEraseBkgnd(pDC);
}
而且图像放大后并没有滚动条出现。