精华内容
下载资源
问答
  • Qt怎样禁止用户最大化窗口解决办法

    千次阅读 2014-06-14 17:47:39
    用Qt写一个窗口,如果继承QDialog,那窗口就只有关闭按钮,如果继承QWidget,那么就有关闭,最大化最小化三个按钮,怎样才能让最大化按钮不可用,但是关闭和最小化可用呢? 要求要能够跨平台,是不是Qt无法做到这...
    Qt怎样禁止用户最大化窗口
    用Qt写一个窗口,如果继承QDialog,那窗口就只有关闭按钮,如果继承QWidget,那么就有关闭,最大化,最小化三个按钮,怎样才能让最大化按钮不可用,但是关闭和最小化可用呢?
    要求要能够跨平台,是不是Qt无法做到这一点?

    ------解决方案--------------------
    当然做得到。
    把窗体最大值设定为你当前窗口的值即可 
    ------解决方案--------------------
    可以查看帮助文档:
    void setWindowFlags ( Qt::WindowFlags type )
    可以查看demo/example:
    Window Flags Example. 
    ------解决方案--------------------
    this->setWindowFlags(Qt::Dialog | Qt::WindowMinimizeButtonHint);、
    应该可以隐藏的,那样更好 
    ------解决方案--------------------
    setWindowFlags ( Qt::WindowFlags type )
    Qt::FrameWindowHint:没有边框的窗口
    Qt::WindowStaysOnTopHint://总在最上面的窗口
    Qt::CustomizeWindowHint://自定义窗口标题栏,以下标志必须与这个标志一起使用才有效,否则窗口将有默认的标题栏
    Qt::WindowTitleHint:显示窗口标题栏
    Qt::WindowSystemMenuHint://显示系统菜单
    Qt::WindowMinimizeButtonHint://显示最小化按钮
    Qt::WindowMaximizeButtonHint://显示最大化按钮
    Qt::WindowMinMaxButtonsHint://显示最小化按钮和最大化按钮
    Qt::WindowCloseButtonHint://显示关闭按钮 
    ------解决方案--------------------
    setWindowFlags(Qt::FramelessWindowHint);直接隐藏掉。。。
    展开全文
  • setWindowFlags设置窗口属性

    万次阅读 2018-04-09 11:00:21
    用Qt写一个窗口,如果继承QDialog,那窗口就只有关闭按钮,如果继承QWidget,那么就有关闭,最大化最小化三个按钮,怎样才能让最大化按钮不可用,但是关闭和最小化可用呢?要求要能够跨平台,是不是Qt无法做到这...
    用Qt写一个窗口,如果继承QDialog,那窗口就只有关闭按钮,如果继承QWidget,那么就有关闭,最大化,最小化三个按钮,怎样才能让最大化按钮不可用,但是关闭和最小化可用呢?
    要求要能够跨平台,是不是Qt无法做到这一点?

    ------解决方案--------------------
    当然做得到。
    把窗体最大值设定为你当前窗口的值即可 
    ------解决方案--------------------
    可以查看帮助文档:
    void setWindowFlags ( Qt::WindowFlags type )
    可以查看demo/example:
    Window Flags Example. 
    ------解决方案--------------------
    this->setWindowFlags(Qt::Dialog | Qt::WindowMinimizeButtonHint);、
    应该可以隐藏的,那样更好 
    ------解决方案--------------------
    setWindowFlags ( Qt::WindowFlags type )
    Qt::FrameWindowHint:没有边框的窗口
    Qt::WindowStaysOnTopHint://总在最上面的窗口
    Qt::CustomizeWindowHint://自定义窗口标题栏,以下标志必须与这个标志一起使用才有效,否则窗口将有默认的标题栏
    Qt::WindowTitleHint:显示窗口标题栏
    Qt::WindowSystemMenuHint://显示系统菜单
    Qt::WindowMinimizeButtonHint://显示最小化按钮
    Qt::WindowMaximizeButtonHint://显示最大化按钮
    Qt::WindowMinMaxButtonsHint://显示最小化按钮和最大化按钮

    Qt::WindowCloseButtonHint://显示关闭按钮 

    Qt::Drawer://去掉窗口左上角的图标,右上角的最大化最小化按钮(好像关闭按钮会变个样。。。)

    ------解决方案--------------------
    setWindowFlags(Qt::FramelessWindowHint);直接隐藏掉。。。
    展开全文
  • 1.窗口最大最小化按纽的控制 ①怎样在程序开始的时候让它最大化? ②vC++做出来的exe文件在窗体的右上方是没有最大化最小化按钮的,怎样实现这一功能? ③如何在显示窗口时,使最大化按钮变灰?   ①在App...
     
    

    1.窗口最大最小化按纽的控制

    ①怎样在程序开始的时候让它最大化?

    ②vC++做出来的exe文件在窗体的右上方是没有最大化和最小化按钮的,怎样实现这一功能?

    ③如何在显示窗口时,使最大化按钮变灰?

     

    ①在App类里的C…App::InitInstance()中把m_pMainWnd->ShowWindow(SW_SHOW)改成m_pMainWnd->ShowWindow(SW_MAXIMIZE);

    ②在CreateWidnow时用WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX 风格.

        ③ 第一种方法:

    BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
    {
    if( !CFrameWnd::PreCreateWindow(cs) )
    return FALSE;
    // TODO: Modify the Window class or styles here by modifying
    //  the CREATESTRUCT cs
    // disable the maxmini box
    cs.style &= ~WS_MAXIMIZEBOX;
    return TRUE;
    }

    第二种方法:

    CMenu *pMenu=AfxGetApp()->m_pMainWnd->GetSystemMenu(FALSE);
             int x=pMenu->GetMenuItemCount( );
             UINT pID=pMenu->GetMenuItemID(x-1);
             pMenu->EnableMenuItem(pID, MF_DISABLED);

    第三种方法:

    ModifyStyle(WS_MAXIMIZEBOX, 0);
    这个函数也可以是最大化按钮失效!
    并且可以在程序中动态的改变窗口的风格

     

    2.创建动态菜单

    void CMainFrame::OnSelectState(NMTOOLBAR* pnmtb, LRESULT *plr)

    {

        CMenu menu;

        if(!menu.CreateMenu())

        return;

        menu.AppendMenu(MF_STRING,0,"开始");

        menu.AppendMenu(MF_STRING,0,"结束");

        CRect rc;

        m_wndToolBar.SendMessage(TB_GETRECT, pnmtb->iItem, (LPARAM)&rc); 

        m_wndToolBar.ClientToScreen(&rc);

        menu.TrackMenu( TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL,

               rc.left, rc.bottom, this, &rc);

    //  menu.DestroyMenu();

        menu.detach();

    }

     

    3.如何禁止对话框关闭按钮和浮动工具条上的系统菜单

    1、禁止对话框中的关闭按钮有二种方法。
    第一种方法,用ModiftMenu()涵数来实现:

    CMenu* pMenu = this->GetSystemMenu(FALSE);
    pMenu->ModifyMenu(SC_CLOSE,MF_BYCOMMAND | MF_GRAYED );

    第二种方法,用EnableMenuItem()涵数来实现:

    CMenu* pMenu = this->GetSystemMenu(FALSE);
    pMenu->EnableMenuItem( SC_CLOSE, MF_BYCOMMAND|MF_GRAYED);

    2、禁止浮动工具条上的系统菜单。
    新建一个CToolBar的派生类CxxToolBar,在新类中的左键双击(CxxToolBar::OnLButtonDblClk(...))
    和左键单击(CxxToolBar:: OnLButtonDown(...))涵数中分别加入下面代码既可:
    if (IsFloating()) //工具条正在浮动状态中
    {
       CWnd* pMiniFrame;
       CWnd* pDockBar;

       pDockBar = GetParent();
       pMiniFrame = pDockBar->GetParent();

       //去除其上系统菜单
       pMiniFrame->ModifyStyle(WS_SYSMENU, NULL);

       //重绘工具条
       pMiniFrame->ShowWindow(SW_HIDE);
       pMiniFrame->ShowWindow(SW_SHOW);
    }

    3、禁止窗口最大化按钮
    在PreCreateWindow()涵数中去掉WS_MAXIMIZEBOX风格显示既可。
    BOOL CxxFrameWnd::PreCreateWindow(CREATESTRUCT& cs)
    {
        cs.style &= ~WS_MAXIMIZEBOX;
        return CFrameWnd::PreCreateWindow(cs);
    }

     

    4.如何将标题栏上的右键菜单屏蔽掉?

      [解决方法]
        右键菜单是系统菜单,只要将其WS_SYSMENU的属性去掉即可.
      [程序实现]
        int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
        {
             ........
       long style = GetWindowLong(m_hWnd, GWL_STYLE);
             style &= ~WS_SYSMENU;
             SetWindowLong(m_hWnd, GWL_STYLE, style);

       return 0;
        }

     

    5.修改标题栏高度

    NONCLIENTMETRICS nm

    调用SystemParametersInfo(SPI_GETNONCLIENTMETRICS,sizeof(nm),&nm,0)

    重设SystemParametersInfo(SPI_SETNONCLIENTMETRICS,sizeof(nm),&nm,0)

     

    6.窗口最大化、最小化及关闭的消息是什么?如何截获?

    最大化、最小化将发送WM_SYSCOMMAND消息。要处理该消息,可以这么做:
        1、在Form的头文件中添加:
         void __fastcall RestrictMinimizeMaximize(TMessage &Msg);
        
         BEGIN_MESSAGE_MAP
         MESSAGE_HANDLER(WM_SYSCOMMAND, TMessage, RestrictMinimizeMaximize)
         END_MESSAGE_MAP(TForm)
        2、在Form的单元文件中添加:
        
         void __fastcall TForm1::RestrictMinimizeMaximize(TMessage& Msg)
         {
         if (Msg.WParam == SC_MINIMIZE)
         {
         //catches minimize...
         }
         else if (Msg.WParam == SC_MAXIMIZE)
         {
         //catches maximize...
         }
         TForm::Dispatch(&Msg);
         // or "else TForm::Dispatch(&Msg)" to trap
         }
        关闭窗口的消息为WM_CLOSE,C++Builder提供了OnClose事件。

     

    7.如何改变窗口标题?

      [问题提出]
        在应用程序的不同运行时期,要反映当前状态往往会修改应用程序标题.

      [解决方法]
        在MFC类库中提供了CWnd::SetWindowText函数,通过该函数可以改变任何窗体(包括控件)的标题.
        改变主窗体的标题:
        CWnd *m_pMainWnd;
        m_pMainWnd=AfxGetMainWnd();
        m_pMainWnd->SetWindowText(_T("改变标题"));
        当改变多视MDI的子窗口的标题时,用:
        GetParentFrame()->SetWindowText(_T("MDI Child改变标题"));
        当改变按钮的标题时(假设按钮的ID=IDC_BUTTON1):
        GetDlgItem(IDC_BUTTON1)->SetWindowText(_T("Button 改变标题"));
        运行看看.

     

    8.如何用VC++ 动态修改应用程序菜单

      [问题提出]
        本文将介绍一些使用CMenu的方法,如查找指定菜单,在指定选项前添加菜单项.....

      [解决方法]
        使用CWnd::GetMenu( )访问主菜单,GetMenu( )返回指向CMenu对象的指针,它有一些成员函数,允许我们修改一个菜单。
        1) 如何实现找到一个菜单项:
        步骤如下:
        {
             //动态修改菜单:
             // Get the Main Menu
             CMenu* pMainMenu = AfxGetMainWnd()->GetMenu();
             CMenu* pSubMenu = NULL;
             int i;
             for (i=0; i<(int)pMainMenu->GetMenuItemCount(); i++)
             {
                pSubMenu = pMainMenu->GetSubMenu(i);
                if (pSubMenu && pSubMenu->GetMenuItemID(0) == ID_FILE_NEW)
                   break;
             }
             CString s;
             s.Format("%d",i);//菜单项的位数.
             AfxMessageBox(s);
             ASSERT(pSubMenu);
        }

        2) 动态编辑菜单:
        步骤如下(可以用上例的pSubMenu,要加的菜单你自己定义.):
        1) 添加一个称为Wzd2,命令ID为IDC_NAME_NEW1的菜单命令到该菜单中,可以用:
             pSubMenu->AppendMenu(0,IDC_NAME_NEW1,"New&1");

        2) 在New1前插入New2,可以用:
             pSubMenu->InsertMenu(IDC_NAME_NEW1,MF_BYCOMMAND,IDC_NAME_NEW2, "New&2");

        3) 把New1改变成New3,可以用:
             pSubMenu->ModifyMenu(IDC_NAME_NEW1,MF_BYCOMMAND,IDC_NAME_NEW3, "New&3");

        4) 删除该菜单中第二项,可以用:
             pSubMenu->RemoveMenu(1,MF_BYPOSITION);

     

    9.屏蔽掉子框架的右上角的关闭按钮

     int CChildFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
        if (CMDIChildWnd::OnCreate(lpCreateStruct) == -1)
            return -1;
    。。。
        CMenu* pSysMenu = GetSystemMenu(FALSE);
        pSysMenu->EnableMenuItem(SC_CLOSE,MF_BYCOMMAND |MF_DISABLED|MF_GRAYED);
        return 0;
    }

     

    10.隐藏标题栏和菜单栏

    隐藏标题栏 ModifyStyle(WS_CAPTION,0)
    隐藏菜单栏 SetMenu(NULL)

     

    11.动态增加或删除菜单

    1、 增加菜单
    添加

    CMenu *mainmenu;
    mainmenu=AfxGetMainWnd()->GetMenu(); //得到主菜单
    (mainmenu->GetSubMenu (0))->AppendMenu (MF_SEPARATOR);//添加分隔符
    (mainmenu->GetSubMenu (0))->AppendMenu(MF_STRING,ID_APP_ABOUT,
                                            _T("Always on &Top")); //添加新的菜单项
                                            DrawMenuBar(); //重画菜单

    2、 删除菜单

    删除

    CMenu *mainmenu;
    mainmenu=AfxGetMainWnd()->GetMenu(); //得到主菜单

    CString str ;
    for(int i=(mainmenu->GetSubMenu (0))->GetMenuItemCount()-1;i>=0;i--) //取得菜单的项数。
    {
        (mainmenu->GetSubMenu (0))->GetMenuString(i,str,MF_BYPOSITION);
        //将指定菜单项的标签拷贝到指定的缓冲区。MF_BYPOSITION的解释见上。
        if(str=="Always on &Top") //如果是刚才我们增加的菜单项,则删除。
        {
            (mainmenu->GetSubMenu (0))->DeleteMenu(i,MF_BYPOSITION);
            break;
        }
    }

     

    12.另一种改变窗口标题的方法

      使用语句 CWnd* m_pCWnd = AfxGetMainWnd( ),然后,再以如下形式调用SetWindowText()函数:

    SetWindowText( *m_pCWnd,(LPCTSTR)m_WindowText);// m_WindowText可以是一个CString类的变量。

     

    13.上下文菜单事件触发事件

    OnContextMenu事件

     

    14.显示和隐藏程序菜单

    CWnd *pWnd=AfxGetMainWnd();
    if(b_m) //隐藏菜单
    {
        pWnd->SetMenu(NULL);
        pWnd->DrawMenuBar();
        b_m=false;
    }
    else
    {
        CMenu menu;
        menu.LoadMenu(IDR_MAINFRAME); 显示菜单 也可改变菜单项
        pWnd->SetMenu(&menu);
        pWnd->DrawMenuBar();
        b_m=true;
        menu.Detach();
    }

    展开全文
  • 1.窗口最大最小化按纽的控制 ①怎样在程序开始的时候让它最大化? ②vC++做出来的exe文件在窗体的右上方是没有最大化最小化按钮的,怎样实现这一功能? ③如何在显示窗口时,使最大化按钮变灰? 解决...

    1.窗口最大最小化按纽的控制

    ①怎样在程序开始的时候让它最大化?

    ②vC++做出来的exe文件在窗体的右上方是没有最大化和最小化按钮的,怎样实现这一功能?

    ③如何在显示窗口时,使最大化按钮变灰?

    解决办法:

    在App类里的C…App::InitInstance()中把m_pMainWnd->ShowWindow(SW_SHOW)改成m_pMainWnd->ShowWindow(SW_MAXIMIZE);

    在CreateWidnow时用WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX 风格.

    ③ 第一种方法:

    BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) 

    if( !CFrameWnd::PreCreateWindow(cs) ) 
    return FALSE; 
    // TODO: Modify the Window class or styles here by modifying 
    //  the CREATESTRUCT cs 
    // disable the maxmini box 
    cs.style &= ~WS_MAXIMIZEBOX; 
    return TRUE; 
    }

    第二种方法:

    CMenu *pMenu=AfxGetApp()->m_pMainWnd->GetSystemMenu(FALSE); 
    int x=pMenu->GetMenuItemCount( ); 
    UINT pID=pMenu->GetMenuItemID(x-1); 
    pMenu->EnableMenuItem(pID, MF_DISABLED);

    第三种方法:

    ModifyStyle(WS_MAXIMIZEBOX, 0); 
    这个函数也可以是最大化按钮失效! 
    并且可以在程序中动态的改变窗口的风格

    2.创建动态菜单

    void CMainFrame::OnSelectState(NMTOOLBAR* pnmtb, LRESULT *plr)

    {

    CMenu menu;

    if(!menu.CreateMenu())

    return;

    menu.AppendMenu(MF_STRING,0,"开始");

    menu.AppendMenu(MF_STRING,0,"结束");

    CRect rc;

    m_wndToolBar.SendMessage(TB_GETRECT, pnmtb->iItem, (LPARAM)&rc);

    m_wndToolBar.ClientToScreen(&rc);

    menu.TrackMenu( TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL,

    rc.left, rc.bottom, this, &rc);

    // menu.DestroyMenu();

    menu.detach();

    }

    3.如何禁止对话框关闭按钮和浮动工具条上的系统菜单

    1、禁止对话框中的关闭按钮有二种方法。 
    第一种方法,用ModiftMenu()涵数来实现: 
    CMenu* pMenu = this->GetSystemMenu(FALSE); 
    pMenu->ModifyMenu(SC_CLOSE,MF_BYCOMMAND | MF_GRAYED ); 
    第二种方法,用EnableMenuItem()涵数来实现: 
    CMenu* pMenu = this->GetSystemMenu(FALSE); 
    pMenu->EnableMenuItem( SC_CLOSE, MF_BYCOMMAND|MF_GRAYED); 
    2、禁止浮动工具条上的系统菜单。 
    新建一个CToolBar的派生类CxxToolBar,在新类中的左键双击(CxxToolBar::OnLButtonDblClk(…)) 
    和左键单击(CxxToolBar:: OnLButtonDown(…))涵数中分别加入下面代码既可: 
    if (IsFloating()) //工具条正在浮动状态中 

       CWnd* pMiniFrame; 
       CWnd* pDockBar; 
       pDockBar = GetParent(); 
       pMiniFrame = pDockBar->GetParent(); 
       //去除其上系统菜单 
       pMiniFrame->ModifyStyle(WS_SYSMENU, NULL); 
       //重绘工具条 
       pMiniFrame->ShowWindow(SW_HIDE); 
       pMiniFrame->ShowWindow(SW_SHOW); 

    3、禁止窗口最大化按钮 
    在PreCreateWindow()涵数中去掉WS_MAXIMIZEBOX风格显示既可。 
    BOOL CxxFrameWnd::PreCreateWindow(CREATESTRUCT& cs) 

        cs.style &= ~WS_MAXIMIZEBOX; 
        return CFrameWnd::PreCreateWindow(cs); 
    }

    4.如何将标题栏上的右键菜单屏蔽掉?

      [解决方法] 
    右键菜单是系统菜单,只要将其WS_SYSMENU的属性去掉即可. 
      [程序实现] 
        int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 
        { 
             …….. 
       long style = GetWindowLong(m_hWnd, GWL_STYLE); 
             style &= ~WS_SYSMENU; 
             SetWindowLong(m_hWnd, GWL_STYLE, style); 
       return 0; 
        }

    5.修改标题栏高度

    NONCLIENTMETRICS nm

    调用SystemParametersInfo(SPI_GETNONCLIENTMETRICS,sizeof(nm),&nm,0)

    重设SystemParametersInfo(SPI_SETNONCLIENTMETRICS,sizeof(nm),&nm,0)

    6.窗口最大化、最小化及关闭的消息是什么?如何截获?

    最大化、最小化将发送WM_SYSCOMMAND消息。要处理该消息,可以这么做: 
        1、在Form的头文件中添加: 
         void __fastcall RestrictMinimizeMaximize(TMessage &Msg); 
         BEGIN_MESSAGE_MAP 
         MESSAGE_HANDLER(WM_SYSCOMMAND, TMessage, RestrictMinimizeMaximize) 
         END_MESSAGE_MAP(TForm) 
        2、在Form的单元文件中添加: 
         void __fastcall TForm1::RestrictMinimizeMaximize(TMessage& Msg) 
         { 
         if (Msg.WParam == SC_MINIMIZE) 
         { 
         //catches minimize… 
         } 
         else if (Msg.WParam == SC_MAXIMIZE) 
         { 
         //catches maximize… 
         } 
         TForm::Dispatch(&Msg); 
         // or "else TForm::Dispatch(&Msg)" to trap 
         } 
    关闭窗口的消息为WM_CLOSE,C++Builder提供了OnClose事件。

    7.如何改变窗口标题?

      [问题提出] 
    在应用程序的不同运行时期,要反映当前状态往往会修改应用程序标题. 
      [解决方法] 
    在MFC类库中提供了CWnd::SetWindowText函数,通过该函数可以改变任何窗体(包括控件)的标题.
    改变主窗体的标题: 
        CWnd *m_pMainWnd; 
        m_pMainWnd=AfxGetMainWnd(); 
        m_pMainWnd->SetWindowText(_T("改变标题")); 
    当改变多视MDI的子窗口的标题时,用: 
        GetParentFrame()->SetWindowText(_T("MDI Child改变标题")); 
    当改变按钮的标题时(假设按钮的ID=IDC_BUTTON1): 
        GetDlgItem(IDC_BUTTON1)->SetWindowText(_T("Button 改变标题")); 
    运行看看.

    8.如何用VC++ 动态修改应用程序菜单

      [问题提出] 
    本文将介绍一些使用CMenu的方法,如查找指定菜单,在指定选项前添加菜单项….. 
      [解决方法] 
    使用CWnd::GetMenu( )访问主菜单,GetMenu( )返回指向CMenu对象的指针,它有一些成员函数,允许我们修改一个菜单。 
        1) 如何实现找到一个菜单项: 
    步骤如下: 
        { 
             //动态修改菜单: 
             // Get the Main Menu 
             CMenu* pMainMenu = AfxGetMainWnd()->GetMenu(); 
             CMenu* pSubMenu = NULL; 
             int i; 
             for (i=0; i<(int)pMainMenu->GetMenuItemCount(); i++) 
             { 
                pSubMenu = pMainMenu->GetSubMenu(i); 
                if (pSubMenu && pSubMenu->GetMenuItemID(0) == ID_FILE_NEW) 
                   break; 
             } 
             CString s; 
             s.Format("%d",i);//菜单项的位数. 
             AfxMessageBox(s); 
             ASSERT(pSubMenu); 
        } 
        2) 动态编辑菜单: 
    步骤如下(可以用上例的pSubMenu,要加的菜单你自己定义.): 
        1) 添加一个称为Wzd2,命令ID为IDC_NAME_NEW1的菜单命令到该菜单中,可以用: 
             pSubMenu->AppendMenu(0,IDC_NAME_NEW1,"New&1"); 
        2) 在New1前插入New2,可以用: 
             pSubMenu->InsertMenu(IDC_NAME_NEW1,MF_BYCOMMAND,IDC_NAME_NEW2, "New&2"); 
        3) 把New1改变成New3,可以用: 
             pSubMenu->ModifyMenu(IDC_NAME_NEW1,MF_BYCOMMAND,IDC_NAME_NEW3, "New&3"); 
        4) 删除该菜单中第二项,可以用: 
             pSubMenu->RemoveMenu(1,MF_BYPOSITION);

    9.屏蔽掉子框架的右上角的关闭按钮

    int CChildFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 

        if (CMDIChildWnd::OnCreate(lpCreateStruct) == -1) 
            return -1; 
    。。。 
        CMenu* pSysMenu = GetSystemMenu(FALSE); 
        pSysMenu->EnableMenuItem(SC_CLOSE,MF_BYCOMMAND |MF_DISABLED|MF_GRAYED); 
        return 0; 
    }

    10.隐藏标题栏和菜单栏

    隐藏标题栏 ModifyStyle(WS_CAPTION,0) 
    隐藏菜单栏 SetMenu(NULL)

    11.动态增加或删除菜单

    1、 增加菜单 
    添加

    CMenu *mainmenu; 
    mainmenu=AfxGetMainWnd()->GetMenu(); //得到主菜单 
    (mainmenu->GetSubMenu (0))->AppendMenu (MF_SEPARATOR);//添加分隔符 
    (mainmenu->GetSubMenu (0))->AppendMenu(MF_STRING,ID_APP_ABOUT, 
                                            _T("Always on &Top")); //添加新的菜单项 
                                            DrawMenuBar(); //重画菜单

    2、 删除菜单

    删除

    CMenu *mainmenu; 
    mainmenu=AfxGetMainWnd()->GetMenu(); //得到主菜单 
    CString str ; 
    for(int i=(mainmenu->GetSubMenu (0))->GetMenuItemCount()-1;i>=0;i–) //取得菜单的项数。 

        (mainmenu->GetSubMenu (0))->GetMenuString(i,str,MF_BYPOSITION); 
        //将指定菜单项的标签拷贝到指定的缓冲区。MF_BYPOSITION的解释见上。 
        if(str=="Always on &Top") //如果是刚才我们增加的菜单项,则删除。 
        { 
            (mainmenu->GetSubMenu (0))->DeleteMenu(i,MF_BYPOSITION); 
            break; 
        } 
    }

    12.另一种改变窗口标题的方法

    使用语句 CWnd* m_pCWnd = AfxGetMainWnd( ),然后,再以如下形式调用SetWindowText()函数

    SetWindowText( *m_pCWnd,(LPCTSTR)m_WindowText);// m_WindowText可以是一个CString类的变量。

    13.上下文菜单事件触发事件

    OnContextMenu事件

    14.显示和隐藏程序菜单

    CWnd *pWnd=AfxGetMainWnd(); 
    if(b_m) //隐藏菜单 

        pWnd->SetMenu(NULL); 
        pWnd->DrawMenuBar(); 
        b_m=false; 

    else 

        CMenu menu; 
        menu.LoadMenu(IDR_MAINFRAME); 显示菜单 也可改变菜单项 
        pWnd->SetMenu(&menu); 
        pWnd->DrawMenuBar(); 
        b_m=true; 
        menu.Detach(); 
    }

    展开全文
  • MFC标题和菜单操作

    2011-10-21 08:12:19
    1.窗口最大最小化按纽的控制 ①怎样在程序开始的时候让它最大化? ②vC++做出来的exe文件在窗体的右上方是没有最大化最小化按钮的,怎样实现这一功能? ③如何在显示窗口时,使最大化按钮变灰? ①在App类里...
  • 1.窗口最大最小化按纽的控制 ①怎样在程序开始的时候让它最大化? ②vc++做出来的exe文件在窗体的右上方是没有最大化最小化按钮的,怎样实现这一功能? ③如何在显示窗口时,使最大化按钮变灰?   ①在App类里...
  • 1.窗口最大最小化按纽的控制①怎样在程式开始的时候让他最大化?②vC++做出来的exe文件在窗体的右上方是没有最大化最小化按钮的,怎样实现这一功能? ③怎么在显示窗口时,使最大化按钮变灰? ①在App类里的C…App:...
  • 窗口最大最小化按纽的控制①怎样在程式开始的时候让他最大化?②vC++做出来的exe文档在窗体的右上方是没有最大化最小化按钮的,怎样实现这一功能? ③如何在显示窗口时,使最大化按钮变灰?①在App类里的C…App::...
  • 1.窗口最大最小化按纽的控制 ①怎样在程式开始的时候让他最大化? ②vC++做出来的exe文件在窗体的右上方是没有最大化最小化按钮的,怎样实现这一功能? ③怎么在显示窗口时,使最大化按钮变灰? ①...
  • 控制程序运行一次

    2011-08-15 21:09:58
    假设应用程序名称为d7.exe,双击程序图标 ,假如该程序已经运行了(只是最小化而已),则怎样把程序窗口最大化?谢谢各位大虾 网友回复: 程序里面你向最大话的地方写:WindowState:=wsMaximized; 或者 SendMessage...
  • 窗口最大最小化按纽的控制 ①怎样在程序开始的时候让它最大化? ②vc++做出来的exe文件在窗体的右上方是没有最大化最小化按钮的,怎样实现这一功能? ③如何在显示窗口时,使最大化按钮变灰? ...
  • 窗口最大最小化按纽的控制 ①怎样在程序开始的时候让它最大化? ②vC++做出来的exe文件在窗体的右上方是没有最大化最小化按钮的,怎样实现这一功能? ③如何在显示窗口时,使最大化按钮变灰? ...
  • 控制程序运行一次

    2008-04-06 23:10:00
    假设应用程序名称为d7.exe,双击程序图标 ,假如该程序已经运行了(只是最小化而已),则怎样把程序窗口最大化?谢谢各位大虾 网友回复: 程序里面你向最大话的地方写:WindowState:=wsMaximized; 或者 SendMessage(Handle,...
  • delphi 开发经验技巧宝典源码

    热门讨论 2010-08-12 16:47:23
    0270 控制窗体的最大化最小化 178 0271 无标题栏时改变窗体的大小 178 0272 无标题栏最大化时不覆盖任务栏 178 0273 限制窗体的大小 179 0274 重定义去掉标题栏并最大化窗体 179 0275 使窗体一直居中 ...
  • B3.9 如何选择一个能最大化负熵的方向? 198 3.3.17 实际中如何在图像处理中进行ICA? 202 3.3.18 如何将ICA 用于信号处理? 208 3.3.19 什么是独立分量分析的主要特点? 213 3.3.20 将ICA 应用于图像处理和信号...
  • windowsnt 技术内幕

    2014-04-09 20:47:17
    设置复制操作的最大脉冲(PulseMaximum)参数 设置复制操作的变动日志大小(ChangeLogSize)参数 设置复制操作的同发脉冲(PulseConcurrency) 参数 使用服务器管理器强制触发同步事件 申请完全同步事件 设定不同的复制...
  • 多媒体教室

    2013-06-14 08:10:31
    启动教师机后,教师机主界面被最小化时,将鼠标移动到屏幕顶部(右半边)时,会出现以下工具条: 其中窗口按钮可显示教师机主界面,教师机主界面出现后,此工具条将不会弹出;设置按钮指系统设置;复位按钮可以结束...
  • 软件工程教程

    热门讨论 2012-07-06 23:10:29
    广东金宇恒(佛山最大软企)技术总监 曾获国家创新基金、广州科学技术奖 中联通炫铃广东/湖南/广西项目负责人(用户800万) 长期移动、民航、政府、互联网行业软件研发 项目一 软件工程概述 任务1 软件工程任务2 软件...
  • C#编程经验技巧宝典

    热门讨论 2008-06-01 08:59:33
    的值 52 <br>0069 求最大公约数 52 <br>0070 求最小公倍数 53 <br>0071 判断素数的算法 53 <br>0072 如何判断一个数是否是完数 54 <br>0073 歌德巴赫猜想的算法 54 <br>0074 八皇后...
  • 软件测试规范

    2018-04-23 09:16:12
    软件测试规范 目 录 一.概述 ...............................................................................................................................................................
  • flash shiti

    2014-03-14 10:32:41
    2. Flash 影片频率最大可以设置到多少? □ A. 99 □ B. 100 □ C. 120 □ D. 150 3. FListBox.addItem 和FListBox.addItemAt 有什么用 □ A. 添加列表框 □ B. 使用Value(值)对话框添加项目 □ C. 添加下拉菜单 ...
  • 但是,算法仅仅给出了一个笼统的实现策略,对于具体的数据类型、运算操作符及优先级情况、怎样支持函数调用、自定义内存变量如何实现等具体问题并无现成的解决方案,需要开发人员自己实际设计相应的算法解决,而这也...

空空如也

空空如也

1 2
收藏数 27
精华内容 10
关键字:

怎样把窗口最大化最小化