VC++ 如何使窗体最大化或是最小化

最大化最小的使得的函数是 ShowWindow函数

 ShowWindow(SW_SHOWMINIMIZED);//最小化
 ShowWindow(SW_SHOWMAXIMIZED);//最大化
 ShowWindow(SW_RESTORE);//还原

 -------
 PostMessage(hwnd,WM_SYSCOMMAND,SC_MINIMIZE,0);
 SC_MAXIMIZE为最大化。

使用方法:

BOOL ShowWindow(    int nCmdShow  );

参数
nCmdShow
指定 CWnd 将如何显示。  它必须是下列值之一:
• SW_HIDE 隐藏该窗口并通过启动到另一个窗口。
• SW_MINIMIZE 最小化窗口并激活在系统的顶级窗口列表。
• SW_RESTORE 激活并显示窗口。  如果窗口处于最小化或最大化,Windows还原为其原始大小和位置。
• SW_SHOW 激活窗口并显示在其当前大小和位置。
• SW_SHOWMAXIMIZED 激活窗口并将其显示为最大化窗口的大小。
• SW_SHOWMINIMIZED 激活窗口并将其显示为图标。
• SW_SHOWMINNOACTIVE 显示窗口作为图标。  当前活动的窗口保持有效。
• SW_SHOWNA 显示在其当前状态的窗口。  当前活动的窗口保持有效。
• SW_SHOWNOACTIVATE 显示在其最近大小和位置的窗口。  当前活动的窗口保持有效。
• SW_SHOWNORMAL 激活并显示窗口。  如果窗口处于最小化或最大化,Windows还原为其原始大小和位置。
返回值
非零,则窗口先前是可见的,0,如果 CWnd 以前是隐藏的。 

也可使用消息的方法来解决:

PostMessage(hwnd,WM_SYSCOMMAND,SC_MAXIMIZE,0);

系统消息命令  SC_MAXIMIZE 最小化命令

hwnd是要操作的对象!

第一种方法:使用SetWindowPos函数
CWnd::SetWindowPos

BOOL   SetWindowPos(const   CWnd*   pWndInsertAfter,   int   x,   int   y,   int   cx,   int   cy,UINT   nFlags   );
  返回值如果函数成功,则返回非零值;否则返回0。

说明  
   
    调用这个成员函数以改变子窗口、弹出窗口和顶层窗口的大小、位置和Z轴次序。窗口在屏幕上按照它们的Z轴次序排序。在Z轴次序上处于顶端的窗口将程序在所有其它窗口的顶部。子窗口的所有坐标都是客户坐标(相对于父窗口客户区的左上角)。窗口可以被移动到Z轴次序的顶部,既可以通过将pWndInsertAfter参数设为&wndTopMost,并确保没有设置SWP_NOZORDER标志,也可以通过设置窗口的Z轴次序使它位于所有现存的顶层窗口上方。当一个非顶层窗口被设为顶层窗口时,它拥有的窗口也被设为顶层的。它的拥有者不发生变化。如果顶层窗口被重新定位到Z轴次序的底部(&wndBottom)或任何非顶层窗口之后,则它将不再是顶层窗口。当顶层窗口被变为非顶层窗口时,它所有的拥有者和它拥有的所有窗口都被变为非顶层窗口。如果既没有指定SWP_NOACTIVE标志也没有指定SWP_NOZORDER标志(这意味着应用程序要求窗口被同时激活并放入指定的Z轴次序),则pWndInsertAfter参数中指定的值将只在下列环境下适用:l   在pWndInsertAfter参数中既没有指定&wndTopMost也没有指定&wndNoTopMost。  
    这个窗口不是活动窗口。应用程序不能激活一个非活动窗口但同时又不把它带到Z轴次序的顶部。应用程序可以没有任何限制地改变活动窗口的Z轴次序。非顶层窗口可能拥有一个顶层窗口,但是反之则不成立。任何被顶层窗口拥有的窗口(例如对话框)都将自己变为顶层窗口,以确保所有被拥有的窗口位于它们的拥有者上方。在Windows   3.1或更新的版本中,可以将窗口移动到Z轴次序的顶部,并通过设置它们的WS_EX_TOPMOST风格而将之锁定在那里。这种顶层窗口即使在失去活动状态以后也会保持顶层位置。例如,选择WinHelp的Always   On   Top命令会使帮助窗口变为顶层,并且在你返回应用程序之后它还保持可见。要创建一个顶层窗口,应在调用SetWindowPos的时候将pWndInsertAfter参数设为&wndTopMost,或者在创建窗口的时候设置WS_EX_TOPMOST风格。如果Z轴次序中包含了任何具有WS_EX_TOPMOST风格的窗口,则用&wndTopMost移动的窗口将被放到所有非顶层窗口的顶部,但是位于任何顶层窗口的下面。当应用程序激活一个不具有WS_EX_TOPMOST风格的非活动窗口时,该窗口将被移动到所有非顶层窗口的上方,但是位于所有顶层窗口的下方。如果在调用SetWindowPos的时候pWndInsertAfter参数被设为&wndBottom,并且CWnd是一个顶层窗口,则该窗口失去顶层状态(WS_EX_BOTTOM风格被清除),并且系统将窗口放在Z轴次序的底部 。
   
  参数pWndInsertAfter  
  标识了在Z轴次序上位于这个CWnd对象之前的CWnd对象。这个参数可以是指向CWnd对象的指针,也可以是指向下列值的指针:  
    wndBottom       将窗口放在Z轴次序的底部。如果这个CWnd是一个顶层窗口,则窗口将失去它的顶层状态;系统将这个窗口放在其它所有窗口的底部。  
    wndTop       将窗口放在Z轴次序的顶部。  
    wndTopMost       将窗口放在所有非顶层窗口的上面。这个窗口将保持它的顶层位置,即使它失去了活动状态。  
    wndNoTopMost       将窗口重新定位到所有非顶层窗口的顶部(这意味着在所有的顶层窗口之下)。这个标志对那些已经是非顶层窗口的窗口没有作用。有关这个函数以及这些参数的使用规则参见说明部分。  
   
  x指定了窗口左边的新位置。  
  y指定了窗口顶部的新位置。  
  cx指定了窗口的新宽度。  
  cy指定了窗口的新高度。  
   
  nFlags指定了大小和位置选项。这个参数可以是下列值的组合:  
    SWP_DRAWFRAME       围绕窗口画出边框(在创建窗口的时候定义)。  
    SWP_FRAMECHANGED       向窗口发送一条WM_NCCALCSIZE消息,即使窗口的大小不会改变。如果没有指定这个标志,则仅当窗口的大小发生变化时才发送WM_NCCALCSIZE消息。  
    SWP_HIDEWINDOW       隐藏窗口。  
    SWP_NOACTIVATE       不激活窗口。如果没有设置这个标志,则窗口将被激活并移动到顶层或非顶层窗口组(依赖于pWndInsertAfter参数的设置)的顶部。  
    SWP_NOCOPYBITS       废弃这个客户区的内容。如果没有指定这个参数,则客户区的有效内容将被保存,并在窗口的大小或位置改变以后被拷贝回客户区。  
    SWP_NOMOVE       保持当前的位置(忽略x和y参数)。  
    SWP_NOOWNERZORDER       不改变拥有者窗口在Z轴次序上的位置。  
    SWP_NOREDRAW       不重画变化。如果设置了这个标志,则不发生任何种类的变化。这适用于客户区、非客户区(包括标题和滚动条)以及被移动窗口覆盖的父窗口的任何部分。当这个标志被设置的时候,应用程序必须明确地无效或重画要重画的窗口和父窗口的任何部分。  
    SWP_NOREPOSITION       与SWP_NOOWNERZORDER相同。  
    SWP_NOSENDCHANGING       防止窗口接收WM_WINDOWPOSCHANGING消息。  
    SWP_NOSIZE       保持当前的大小(忽略cx和cy参数)。  
    SWP_NOZORDER       保持当前的次序(忽略pWndInsertAfter)。  
    SWP_SHOWWINDOW       显示窗口。

========================================================================

第二种方法:使用MoveWindow函数
void   CWnd::MoveWindow(   int   x,   int   y,   int   nWidth,   int   nHeight,   BOOL   bRepaint   =   TRUE   );  
void   CWnd::MoveWindow(   LPCRECT   lpRect,   BOOL   bRepaint   =   TRUE   );  
    参数  
    x指定了CWnd的左边的新位置。  
    y指定了CWnd的顶部的新位置。  
    nWidth指定了CWnd的新宽度。  
    nHeight指定了CWnd的新高度。  
    bRepaint指定了是否要重画CWnd。如果为TRUE,则CWnd象通常那样在OnPaint消息处理函数中接收到一条WM_PAINT消息。如果这个参数为FALSE,则不会发生任何类型的重画操作。这应用于客户区、非客户区(包括标题条和滚动条)和由于CWnd移动而露出的父窗口的任何部分。当这个参数为FALSE的时候,应用程序必须明确地使CWnd和父窗口中必须重画的部分无效或重画。

lpRectCRect对象或RECT结构,指定了新的大小和位置。说明这个函数改变窗口的位置和大小。对于顶层的CWnd对象,x和y参数是相对于屏幕的左上角的。对于子对象,它们是相对于父窗口客户区的左上角的。  
  MoveWindow函数发送一条WM_GETMINMAXINFO消息。处理这个消息时,CWnd得到一个改变最大和最小的窗口缺省值的机会。如果传递给MoveWindow成员函数的参数超过了这些值,则在WM_GETMINMAXINFO处理函数中可以用最小或最大值来代替这些值。

时间: 2024-12-16 19:27:40

VC++ 如何使窗体最大化或是最小化的相关文章

自定义窗体的最大化,最小化,关闭功能

namespace 自定义窗体的最大化_最小化和关闭按钮 { partial class Form1 { /// <summary> /// 必需的设计器变量. /// </summary> private System.ComponentModel.IContainer components = null; /// <summary> /// 清理所有正在使用的资源. /// </summary> /// <param name="disp

(转)WPF中让窗体不显示最大化,最小化,关闭按钮

1.在WPF中如果不想让窗体显示最大化,最小化,以及关闭按钮的话,可以再窗体的属性面板设置 将ResizeMode=NoResize时,将不会显示最大化最小化,只有关闭按钮:如下图: 将ResizeMode=CanMinimize时,最大化按钮被禁用,但是还是会显示,不能按,最小化,关闭按钮正常显示: 将WindowStyle=None时,将不会显示出最大化,最小化,以及关闭按钮,周围的边框也不存在. 还有一种方式: WPF:窗体不显示或禁用最大化.最小化.关闭按钮.图标以及对话框显示

qt5.2.1在linux下去除最大化和最小化按钮

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 #include <QtGui/QGuiApplication> #include <QDebug> #include <QScreen> #include "qtquick2applicationviewer.h" int main(int argc, char *argv[]) {     QGuiAppl

如何去掉WinForm或者WPF的最大化和最小化按钮

博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:如何去掉WinForm或者WPF的最大化和最小化按钮.

QDialog 添加最大化、最小化按钮和关闭按钮,并且要正常显示

在使用QDialog时,默认情况下只有“这是什么”和“关闭”按钮(不知道为什么QT要这么做),但是我们习惯有最大化和最小化按钮.本文介绍如何在该模式下如何设置. 新建一个QDialog工程,然后打开Dialog.cpp文件,在Dialog的构造函数里写入如下的代码即可: [cpp] view plain copy print? Qt::WindowFlags flags=Qt::Dialog; flags |=Qt::WindowMinMaxButtonsHint; flags |=Qt::Wi

Effective Item 9 - 尽量使可访问性最小化

模块设计是否良好,有个重要的因素在于,相对外部模块是否隐藏内部数据以及实现细节. 设计良好的模块会隐藏实现细节,并将API与其实现隔离开来. 模块之间通过API进行通信,对于内部工作情况互不可见. 即,封装(encapsulation)--软件设计的基本原则之一. 为什么要封装? 通过封装可以有效地接触各个模块之间的耦合关系,使这些模块可以独立地开发.测试.优化.使用.理解和修改. 即: ·可以增加开发效率,模块可以并行开发. ·封装可以减轻维护的负担,可以更有效的进行优化,且不会影响其他模块的

C# WinForm 禁止最大化、最小化、双击标题栏、双击图标等操作

protected override void WndProc(ref Message m){ if (m.Msg==0x112) { switch ((int) m.WParam) { //禁止双击标题栏关闭窗体 case 0xF063: case 0xF093: m.WParam = IntPtr.Zero; break; //禁止拖拽标题栏还原窗体 case 0xF012: case 0xF010: m.WParam = IntPtr.Zero; break; //禁止双击标题栏 case

WinForm窗体的托盘最小化实现代码

//窗体最小化时候将窗体隐藏掉,同时让托盘控件显示 private void Form1_SizeChanged(object sender, EventArgs e) { if(this.WindowState == FormWindowState.Minimized) { this.Hide(); this.notifyIcon1.Visible = true; } } private void notifyIcon1_MouseDoubleClick(object sender, Mous

让程序界面最大化、最小化到任务栏上的消息

SendMessage(Handle,WM_SYSCOMMAND,SC_MINIMIZE,0);   //相当于点最小化按钮 (-) SendMessage(Handle,WM_SYSCOMMAND,SC_MANIMIZE,0); //相当于点击最大化按钮 (■)