按了最大化按钮之后,不希望窗体变成最大,重载哪个函数可以解决这个问题?
注意是我改变了窗体的外观,我发现它使用了
ModifyStyle(WS_BORDER,0);
去除了外框,自己画了一个外框,
现在的问题是每次最大化它,它都最大化到了屏幕底部,把任务栏都隐藏了,现在希望找到那个计算窗体返回的函数,重载一下,让它不会把任务栏都占了。
问题点数:100、回复次数:12Top
1 楼jackwuwei(吴羡鱼)回复于 2005-06-01 21:03:13 得分 20
在WindowProc中拦截WM_SYSCOMMAND消息,wParam = SC_MAXIMIZE为最大化Top
2 楼interceptor(拦截者)回复于 2005-06-01 21:04:47 得分 20
拦截 WM_SYSCOMMAND 消息 参数是SC_MAXIMIZETop
3 楼umbrella1984(雨伞(KEN))回复于 2005-06-01 21:05:37 得分 0
在什么地方拦截啊?Top
4 楼interceptor(拦截者)回复于 2005-06-01 21:06:45 得分 0
WindowProcTop
5 楼jackwuwei(吴羡鱼)回复于 2005-06-01 21:08:11 得分 0
重载WindowProc虚函数,用类向导可以添加Top
6 楼artmouse(艺术老鼠)回复于 2005-06-01 21:08:58 得分 0
难道是拦截了之后用SetWindowPos??
那任务栏那怎么处理阿?
由于用了ModifyStyle(WS_BORDER,0);
所以会把那个状态栏都占了
想找那个接收WM_SYSCOMMAND消息,wParam = SC_MAXIMIZE的函数,重载一下,是哪个阿Top
7 楼interceptor(拦截者)回复于 2005-06-01 21:16:21 得分 20
这样啊 你可以试试拦截WM_SIZE 参数SIZE_MAXIMIZED,自己设置大小Top
8 楼newbiestar()回复于 2005-06-01 21:24:56 得分 20
MFC的应用程序可以重写OnSize成员函数,判断参数是否为SC_MAXIMIZEDTop
9 楼vcmute(BCare4 H1Rest Good9!)回复于 2005-06-01 22:10:52 得分 0
OnSysCommandTop
10 楼artmouse(艺术老鼠)回复于 2005-06-01 23:22:08 得分 0
跟踪了一下,跑到这里去了,感觉是后面是api了,没得搞了.
LRESULT CMDIFrameWnd::DefWindowProc(UINT nMsg, WPARAM wParam, LPARAM lParam)
{
return ::DefFrameProc(m_hWnd, m_hWndMDIClient, nMsg, wParam, lParam);
}Top
11 楼artmouse(艺术老鼠)回复于 2005-06-02 11:26:50 得分 0
最后用这个搞定的
void CMainFrame::OnSysCommand(UINT nID, LPARAM lParam)
{
// TODO: Add your message handler code here and/or call default
if(nID==SC_MAXIMIZE){
Window_Max=TRUE;
}
CGnomeFrame::OnSysCommand(nID, lParam);
}
void CMainFrame::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos)
{
CGnomeFrame::OnWindowPosChanging(lpwndpos);
if(Window_Max==TRUE && lpwndpos->cy>0){
lpwndpos->cy-=30;
Window_Max=FALSE;
}
// TODO: Add your message handler code here
}
收个max消息做个标志,然后在OnWindowPosChanging这里改一下Top
12 楼newbiestar()回复于 2005-06-02 13:10:48 得分 20
只要处理WM_SIZE消息就可以了阿……在MFC里面重写窗口的OnSize函数就可以做到了……
OnSysCommand还有一些情况下面捕捉不到这种东西的,譬如按下Win+D,这个时候最小化OnSysCommand就捕捉不到……Top




