如何使最大化、最小化和关闭按钮有效或无效(转载)

使最小化按
void CMainFrame::OnDisableMinbox()
{
    //获得窗口风格
    LONG style = ::GetWindowLong(m_hWnd,GWL_STYLE);

    //设置新的风格
    style &=  ~(WS_MINIMIZEBOX);
    ::SetWindowLong(m_hWnd,GWL_STYLE,style);

    //重化窗口边框
    CRect rc;
    GetWindowRect(&rc);
    ::SetWindowPos(m_hWnd,HWND_NOTOPMOST,rc.left,rc.top,rc.Width(),rc.Height(),SWP_DRAWFRAME);
}
//使最大化按钮无效
void CMainFrame::OnDisableMaxbox()
{
    //获得窗口风格
    LONG style = ::GetWindowLong(m_hWnd,GWL_STYLE);

    //设置新的风格
    style &=  ~(WS_MAXIMIZEBOX);
    ::SetWindowLong(m_hWnd,GWL_STYLE,style);

    //重化窗口边框
    CRect rc;
    GetWindowRect(&rc);
    ::SetWindowPos(m_hWnd,HWND_NOTOPMOST,rc.left,rc.top,rc.Width(),rc.Height(),SWP_DRAWFRAME);
}
//使关闭按钮无效
void CMainFrame::OnDisableClose()
{
    //获得系统菜单
    CMenu *pMenu=GetSystemMenu(FALSE);

    //获得关闭按钮的ID
    int x=pMenu->GetMenuItemCount();
    UINT pID=pMenu->GetMenuItemID(x-1);

    //使关闭按钮无效
    pMenu->EnableMenuItem(pID, MF_DISABLED);
}


//使最小化按钮有效
void CMainFrame::OnAbleMinbox()
{
    //获得窗口风格
    LONG style = ::GetWindowLong(m_hWnd,GWL_STYLE);

    //设置新的风格
    style |= WS_MINIMIZEBOX;
    ::SetWindowLong(m_hWnd,GWL_STYLE,style);
    //重化窗口边框
    CRect rc;
    GetWindowRect(&rc);
    ::SetWindowPos(m_hWnd,HWND_NOTOPMOST,rc.left,rc.top,rc.Width(),rc.Height(),SWP_DRAWFRAME);    
}
//使最大化按钮有效
void CMainFrame::OnAbleMaxbox()
{
    //获得窗口风格
    LONG style = ::GetWindowLong(m_hWnd,GWL_STYLE);

    //设置新的风格
    style |= WS_MAXIMIZEBOX;
    ::SetWindowLong(m_hWnd,GWL_STYLE,style);

    //重化窗口边框
    CRect rc;
    GetWindowRect(&rc);
    ::SetWindowPos(m_hWnd,HWND_NOTOPMOST,rc.left,rc.top,rc.Width(),rc.Height(),SWP_DRAWFRAME);
}
//使关闭按钮有效
void CMainFrame::OnAbleClose()
{
    //获得系统菜单
    CMenu *pMenu=GetSystemMenu(FALSE);

    //获得关闭按钮的ID
    int x=pMenu->GetMenuItemCount();
    UINT pID=pMenu->GetMenuItemID(x-1);

    //使关闭按钮有效
    pMenu->EnableMenuItem(pID, MF_ENABLED);
}
 

使对话框的关闭按钮无效:

在对话框的OnInitDialog中调用如下代码

 CMenu *mnu=this->GetSystemMenu(FALSE);
    mnu->ModifyMenu(SC_CLOSE,MF_BYCOMMAND|MF_GRAYED);
// mnu->EnableMenuItem(SC_CLOSE,MF_BYCOMMAND|MF_GRAYED);  也可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值