OpenGL + MFC界面设置优化

来源:互联网 发布:基站数据库下载 编辑:程序博客网 时间:2024/05/19 18:16

一、最大化子窗口并隐藏标题栏:
1.在类视图中打开CChildFrame的类向导,添加OnCreate函数:
这里写图片描述
这里写图片描述
(On…什么的函数都是在消息那个标签里,输入后面的单词就能快速查找到了)
键入代码:

int CChildFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){    if (CMDIChildWnd::OnCreate(lpCreateStruct) == -1)        return -1;    // 隐藏最大化,最小化,关闭按钮      ModifyStyle(WS_SYSMENU, 0);    // 隐藏标题栏      ModifyStyle(WS_CAPTION, 0);    // TODO:  在此添加您专用的创建代码    return 0;}

这里注意一下,如果是VS2010以及之前的版本,隐藏按钮的函数要注释掉,否则会编译报错。(在学校机房碰见的问题)

2.将子窗口最大化,并隐藏标题(这个标题显示在主窗口的标题旁,看起来很难看,建议隐藏了)(类向导虚函数里)

BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs){    // TODO:  在此处通过修改 CREATESTRUCT cs 来修改窗口类或样式    if (!CMDIChildWnd::PreCreateWindow(cs))        return FALSE;    cs.style &= ~FWS_ADDTOTITLE | WS_VISIBLE | WS_MAXIMIZE;//取消窗口上的文档标题    cs.style |= WS_VISIBLE | WS_MAXIMIZE; // 最大化    return TRUE;}

二、修改主窗口的标题:
那当然是修改主窗口的PreCreateWindow函数啦。
这里写图片描述

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs){    if (!CMDIFrameWnd::PreCreateWindow(cs))        return FALSE;    // TODO:  在此处通过修改    //  CREATESTRUCT cs 来修改窗口类或样式    cs.style &= ~FWS_ADDTOTITLE | WS_VISIBLE | WS_MAXIMIZE;//取消窗口上的文档标题    cs.lpszName = _T("直线剪裁"); // 文件上方标题重命名    return TRUE;}

三、启动程序时自动占满屏幕(我的电脑比较奇怪,这个操作用起来效果不好):
仍然是修改CMainFrame类,在OnCreate函数的return 0前面加上以下代码:

RECT rc;    ::GetWindowRect(::GetDesktopWindow(), &rc);    this->MoveWindow(&rc);

四、右下角的NUM太丑了,改成显示当前时间好了:
在CMainFrame中添加Timer函数:
这里写图片描述

void CMainFrame::OnTimer(UINT_PTR nIDEvent){    // TODO:  在此添加消息处理程序代码和/或调用默认值    CTime t = CTime::GetCurrentTime();    CString str = t.Format("当前时间 %H:%M:%S");    CClientDC dc(this);    CSize sz = dc.GetTextExtent(str);    int index = 0;    index = m_wndStatusBar.CommandToIndex(ID_INDICATOR_NUM);    m_wndStatusBar.SetPaneInfo(index, ID_INDICATOR_NUM, SBPS_NORMAL, sz.cx);    m_wndStatusBar.SetPaneText(index, str);    CMDIFrameWnd::OnTimer(nIDEvent);}

然后在窗口创建时启动这个函数,在OnCreate里添加:

SetTimer(1, 10, NULL);

五、去掉多余的顶部菜单:
这里写图片描述
右键删除掉不想要的菜单就行啦。


六、删除工具栏:(OnCreate函数注释掉下面的代码)

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){    if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)        return -1;    /*if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||        !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))    {        TRACE0("未能创建工具栏\n");        return -1;      // 未能创建    }*/    if (!m_wndStatusBar.Create(this))    {        TRACE0("未能创建状态栏\n");        return -1;      // 未能创建    }    m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT));    // TODO:  如果不需要可停靠工具栏,则删除这三行    /*m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);    EnableDocking(CBRS_ALIGN_ANY);    DockControlBar(&m_wndToolBar);*/    return 0;}

七、解决缩放窗口闪烁的问题:
在View类修改消息函数OnEraseBkgnd()

BOOL CMFCTestView::OnEraseBkgnd(CDC* pDC){    // TODO:  在此添加消息处理程序代码和/或调用默认值    return true;    // return CView::OnEraseBkgnd(pDC);}

最后的效果是这样的:
这里写图片描述