请问让子窗口没有最小化、最大化(还原)按钮,但要保留关闭按钮,应该怎么做?

时间:2022-07-10 20:40:59
一个多文档/视的程序,想让子窗口一出来就最大化,不能改变窗口的大小,这已经做到了,但是右上角的这三个按钮好像是同生共死的,要么就三个都要,要么就三个都不要,但我现在只想要关闭按钮,请问怎么办?

18 个解决方案

#1


ModifyStyle
ModifyStyleEx

#2


BOOL CMyChildWnd::PreCreateWindow(CREATESTRUCT& cs) 

    // Create a child window without the maximize button 
    cs.style &= ~WS_MAXIMIZEBOX; 
    cs.style &= ~WS_MINIMIZEBOX; 

    // Call the base-class version
    return CMDIChildWnd::PreCreateWindow(cs); 
}

#3


PreCreateWindow里面添加

cs.style &= ~WS_MINIMIZEBOX; 
cs.style &= ~WS_MAXIMIZEBOX; 

#4


谢谢,我知道这个代码,但我的原意是想让子窗口一开始就最大化,然后最小化和最大化按钮(包括还原按钮)都失效,只剩一个关闭按钮!
但是执行上面的代码后,还原按钮还是有效的,按了后就会出现某些我不愿发生的小问题,所以我想把最小化、最大化和还原按钮都去掉!
还有什么办法吗?

#5


关注一下~

#6


改变其风格

#7


自己画客户区,只画出关闭按钮

#8


sorry,是自己画非客户区,在ncpaint里做,然后再lbuttondown里判断鼠标落下的位置,检查是否落在关闭按钮的区域,完成关闭的动作。

#9


自己画客户区,只画出关闭按钮

只有这个办法吗?

#10


解决办法:
BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
//  the CREATESTRUCT cs

if( !CBCGPMDIChildWnd::PreCreateWindow(cs) )
return FALSE;

cs.style = WS_CHILD | WS_VISIBLE | WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU
| FWS_ADDTOTITLE | WS_THICKFRAME;

return TRUE;
}

void CChildFrame::ActivateFrame(int nCmdShow)
{
// TODO: Modify this function to change how the frame is activated.

nCmdShow = SW_SHOWMAXIMIZED;
CBCGPMDIChildWnd::ActivateFrame(nCmdShow);
}

#11


WS_MINIMIZEBOX|WS_MAXIMIZEBOX

#12


关键是在子窗口最大化的情况下去掉最小化和最大化按钮。

#13


关注

#14


getiteasy(孤蚁)
关键是在子窗口最大化的情况下去掉最小化和最大化按钮。

我也是这个问题,所以帮你up一下!呵呵

#15


BOOL CXXXApp::InitInstance()
{   ....
m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED );
   ....
}

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

#16


晕啊,看上面,已经解决了啊!

BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CMDIChildWnd::PreCreateWindow(cs) )
return FALSE;

cs.style = WS_CHILD | WS_VISIBLE | WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU| FWS_ADDTOTITLE | WS_THICKFRAME;

return TRUE;
}

void CChildFrame::ActivateFrame(int nCmdShow)
{

nCmdShow = SW_SHOWMAXIMIZED;
CMDIChildWnd::ActivateFrame(nCmdShow);
}

还是谢谢大家!

#17


ActivateFrame是CFrameWnd的函数;要是在cview中怎么实现?

#18


FT~!知道了,嘿嘿,不好意思啊~!

#1


ModifyStyle
ModifyStyleEx

#2


BOOL CMyChildWnd::PreCreateWindow(CREATESTRUCT& cs) 

    // Create a child window without the maximize button 
    cs.style &= ~WS_MAXIMIZEBOX; 
    cs.style &= ~WS_MINIMIZEBOX; 

    // Call the base-class version
    return CMDIChildWnd::PreCreateWindow(cs); 
}

#3


PreCreateWindow里面添加

cs.style &= ~WS_MINIMIZEBOX; 
cs.style &= ~WS_MAXIMIZEBOX; 

#4


谢谢,我知道这个代码,但我的原意是想让子窗口一开始就最大化,然后最小化和最大化按钮(包括还原按钮)都失效,只剩一个关闭按钮!
但是执行上面的代码后,还原按钮还是有效的,按了后就会出现某些我不愿发生的小问题,所以我想把最小化、最大化和还原按钮都去掉!
还有什么办法吗?

#5


关注一下~

#6


改变其风格

#7


自己画客户区,只画出关闭按钮

#8


sorry,是自己画非客户区,在ncpaint里做,然后再lbuttondown里判断鼠标落下的位置,检查是否落在关闭按钮的区域,完成关闭的动作。

#9


自己画客户区,只画出关闭按钮

只有这个办法吗?

#10


解决办法:
BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
//  the CREATESTRUCT cs

if( !CBCGPMDIChildWnd::PreCreateWindow(cs) )
return FALSE;

cs.style = WS_CHILD | WS_VISIBLE | WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU
| FWS_ADDTOTITLE | WS_THICKFRAME;

return TRUE;
}

void CChildFrame::ActivateFrame(int nCmdShow)
{
// TODO: Modify this function to change how the frame is activated.

nCmdShow = SW_SHOWMAXIMIZED;
CBCGPMDIChildWnd::ActivateFrame(nCmdShow);
}

#11


WS_MINIMIZEBOX|WS_MAXIMIZEBOX

#12


关键是在子窗口最大化的情况下去掉最小化和最大化按钮。

#13


关注

#14


getiteasy(孤蚁)
关键是在子窗口最大化的情况下去掉最小化和最大化按钮。

我也是这个问题,所以帮你up一下!呵呵

#15


BOOL CXXXApp::InitInstance()
{   ....
m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED );
   ....
}

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

#16


晕啊,看上面,已经解决了啊!

BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CMDIChildWnd::PreCreateWindow(cs) )
return FALSE;

cs.style = WS_CHILD | WS_VISIBLE | WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU| FWS_ADDTOTITLE | WS_THICKFRAME;

return TRUE;
}

void CChildFrame::ActivateFrame(int nCmdShow)
{

nCmdShow = SW_SHOWMAXIMIZED;
CMDIChildWnd::ActivateFrame(nCmdShow);
}

还是谢谢大家!

#17


ActivateFrame是CFrameWnd的函数;要是在cview中怎么实现?

#18


FT~!知道了,嘿嘿,不好意思啊~!