我百毒不侵你101 2020-06-21 17:14 采纳率: 50%
浏览 358
已结题

MFC分割窗口后不能正确显示尺寸问题,OnSize里面我也重新指定了,求大神解决

以下是我的代码
我想要的效果是分割为上下两个视图,比例按照上8下2,并且窗口发生变化时还是按照这个比例
//创建
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/, CCreateContext* pContext)
{
CRect rect;
GetClientRect(&rect);
int w = rect.Width();
int h = rect.Height();
if (!m_wndSplitter.CreateStatic(this, 2, 1))
return FALSE;
//创建视图并给它分配大小
m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CDrawView), CSize(rect.Width(), rect.Height()*8/10), pContext);
m_wndSplitter.CreateView(1, 0, RUNTIME_CLASS(CInfoView), CSize(rect.Width(), rect.Height()*2/10), pContext);
m_bIsSplitterCreate = TRUE; //创建成功
return TRUE;
}
//重新指定大小
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
CFrameWndEx::OnSize(nType, cx, cy);
// TODO: 在此处添加消息处理程序代码
CRect rect;
GetClientRect(&rect);
if (m_bIsSplitterCreate)
{
CRect rect; GetWindowRect(&rect);
int nHeight = rect.Height() - 80;
m_wndSplitter.SetRowInfo(0, nHeight, 10);
m_wndSplitter.SetRowInfo(1, 80, 80);
m_wndSplitter.RecalcLayout();
}
}

图片说明

  • 写回答

2条回答 默认 最新

  • jid_223 2021-08-08 11:59
    关注

    如下,要注释掉OnCreate里创建视图的代码,因创建的这个视图把分窗给庶住了
    int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    if (CFrameWnd::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))
    //{
    //    LOG_ERROR("未能创建视图窗口");
    //    return -1;
    //}
    
    评论

报告相同问题?

悬赏问题

  • ¥15 可以实现这个有不同背景颜色的九九乘法表吗?
  • ¥50 python写segy数据时出错2
  • ¥20 关于R studio 做精确稳定检验的问题!(语言-r语言)
  • ¥50 用贝叶斯决策方法,设计CAD程序
  • ¥20 关于#目标检测#的问题:(qq收集表到时间才能填写,填写的份数有上限)
  • ¥50 ZYNQ7020双核FLAHS烧写的问题
  • ¥20 ue 5 中想要实现第一人称人物左右行走摆动的效果,摄像头只向右摆动一次(关键词-结点)
  • ¥15 AD9164瞬时带宽1.8G,怎么计算出来?
  • ¥15 鼠标右键,撤销删除 复制 移动,要怎样删除? HKEY_CLASSES_ROOT*\shellex\ContextMenuHandlers 没用
  • ¥15 服务器安装php5.6版本