CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

按了最大化按钮之后,不希望窗体变成最大,重载哪个函数可以解决这个问题?

楼主artmouse(艺术老鼠)2005-06-01 20:57:10 在 VC/MFC / 基础类 提问

注意是我改变了窗体的外观,我发现它使用了  
  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

相关问题

  • 我想重载窗体右上角的最大化、最小化和关闭按钮的处理函数。请问,他们都是什么?
  • 函数重载
  • 函数重载?
  • 窗体最大化问题
  • 窗体最大化问题?
  • 窗体启动时最大化窗体!
  • 响应CFormView窗体右上角的那个关闭小按钮的函数在那里重载?
  • 大菜鸟,到处跑,.....是重载窗体生成函数的简单问题,先谢了
  • 关于窗体最大化的问题
  • 窗体中控件最大化问题?

关键词

  • 函数
  • 消息
  • 重载
  • 窗体
  • 最大化
  • lpwndpos
  • onwindowposchanging
  • maximize
  • onsyscommand
  • 拦截

得分解答快速导航

  • 帖主:artmouse
  • jackwuwei
  • interceptor
  • interceptor
  • newbiestar
  • newbiestar

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo