15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Dialog based application

Jason R. Simpson -- doecreek@tir.com
Friday, December 13, 1996

Environment: VC++ 4.1, Windows95

Even though I disable the maximize button in the upper right hand corner =
of the dialog box through developer studio, the user still has the =
ability to maximize the dialog box.  By right clicking on the title bar, =
a menu is displayed that presents the user with the ability to maximize =
the dialog box.  I searched for examples of modifying the system menu =
and was able to come up with code for adding menu items.  Is there a way =
that I could simply gray out the maximize option on the system menu?




Amir Shoval -- torin@netvision.net.il
Monday, December 16, 1996

[Mini-digest: 4 responses]

Jason R. Simpson wrote:
> 
> Environment: VC++ 4.1, Windows95
> 
> Even though I disable the maximize button in the upper right hand corner of the dialog box through developer studio, the user still has the ability to maximize the dialog box.  By right clicking on the title bar, a menu is displayed that presents the user with the ability to maximize the dialog box.  I searched for examples of modifying the system menu and was able to come up with code for adding menu items.  Is there a way that I could simply gray out the maximize option on the system menu?

Well, you can just delete the maximize option from the system menu.
Try:

    CMenu* pMenu = GetSystemMenu (FALSE);
    pMenu->DeleteMenu (SC_MAXIMIZE, MF_BYCOMMAND);

This (I think) will also prevent the maximizing of the window by
double-clicking the title bar.

	Amir
-- 
--------------------------
Amir Shoval N.C.C. Israel
torin@netvision.net.il
--------------------------
-----From: "Rob Warner" 

In your CDialog::OnInitDialog():

    CMenu* pSysMenu = GetSystemMenu(FALSE);

    // Get rid of Maximize and Size
    pSysMenu->DeleteMenu(SC_MAXIMIZE, MF_BYCOMMAND);
    pSysMenu->DeleteMenu(SC_SIZE,     MF_BYCOMMAND);

HTH.
<<<<<>>>>>
Rob Warner
rhwarner@southeast.net
http://users.southeast.net/~rhwarner


----------
From: Jason R. Simpson 
To: 'mfc-l@netcom.com'
Subject: Dialog based application
Date: Friday, December 13, 1996 1:52 PM

Environment: VC++ 4.1, Windows95

Even though I disable the maximize button in the upper right hand corner of
the dialog box through developer studio, the user still has the ability to
maximize the dialog box.  By right clicking on the title bar, a menu is
displayed that presents the user with the ability to maximize the dialog
box.  I searched for examples of modifying the system menu and was able to
come up with code for adding menu items.  Is there a way that I could
simply gray out the maximize option on the system menu?

----------

-----From: Mario Contestabile

yourdlg::OnInitDialog(){

  CDialog::OnInitDialog();

  // Disable maximize and size
  CMenu* menu_ptr = GetSystemMenu(FALSE);
  if(menu_ptr){
    menu_ptr->EnableMenuItem(SC_MAXIMIZE, MF_BYCOMMAND | MF_DISABLED | 
MF_GRAYED);
    menu_ptr->EnableMenuItem(SC_SIZE, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); 
  }
}

mcontest@universal.com


>Even though I disable the maximize button in the upper right hand corner of 
the dialog box through developer studio, the user >still has the ability to 
maximize the dialog box.  By right clicking on the title bar, a menu is 
displayed that presents the user with >the ability to maximize the dialog box.  
I searched for examples of modifying the system menu and was able to come up 
with >code for adding menu items.  Is there a way that I could simply gray out 
the maximize option on the system menu?

-----From: "Keith Bottner" 

You can actually do this one of two ways.  Since you message says that you
know how to handle adding items to the system menu then I will assume you
know how to get the system menu's handle.  Take that handle and use the
standard menu API functions to disable the maximize option.  Or you can
handle the WM_SYSCOMMAND message handling the SC_MAXIMIZE command request.

If you need further information or examples let me know.

Keith Bottner
kbottner@macromedia.com
----------
From: Jason R. Simpson 
To: 'mfc-l@netcom.com'
Subject: Dialog based application
Date: Friday, December 13, 1996 12:52 PM

Environment: VC++ 4.1, Windows95

Even though I disable the maximize button in the upper right hand corner of
the dialog box through developer studio, the user still has the ability to
maximize the dialog box.  By right clicking on the title bar, a menu is
displayed that presents the user with the ability to maximize the dialog
box.  I searched for examples of modifying the system menu and was able to
come up with code for adding menu items.  Is there a way that I could
simply gray out the maximize option on the system menu?

----------




Rick Esterling -- rick@eco.twg.com
Tuesday, December 17, 1996

> Environment: VC++ 4.1, Windows95

> Even though I disable the maximize button in the upper right hand 
> corner of the dialog box through developer studio, the user still 
> has the ability to maximize the dialog box.  By right clicking on 
> the title bar, a menu is displayed that presents the user with the 
> ability to maximize the dialog box.  

Just so you know, they can also dbl-click the title bar or they can use the
system menu of your dialog (upper left hand corner) to maximize the app.

> I searched for examples of modifying the system menu and was able 
> to come up with code for adding menu items.  Is there a way that 
> I could simply gray out the maximize option on the system menu?

So you're sitting there in that big ol' help file on CMenu::AppendMenu and
suddenly you get the idea that this list will have a faster turn around
time than checking out the other member methods of CMenu?  Say, for
example, CMenu::EnableMenuItem or CMenu::RemoveMenu?  Utterly amazing.

To gray it out:

   CMenu* pSysMenu = GetSystemMenu( FALSE );
   pSysMenu->EnableMenuItem( SC_MAXIMIZE, 
                             MF_BYCOMMAND | MF_GRAYED );   

To remove it altogether:

   CMenu* pSysMenu = GetSystemMenu( FALSE );
   pSysMenu->RemoveMenu( SC_MAXIMIZE, 
                         MF_BYCOMMAND );

BTW, I feel compelled to add that BOTH calls are not necessary; this is an
either/or kind of thing.

Good luck (and plenty of it),
Rick

--------------------------------------------------------------------

Richard A. Esterling              Attachmate Core Technologies Group
Senior Software Engineer          Palo Alto, CA         415-962-7252
http://widget.eco.twg.com:1080    http://www.attachmate.com





| Вернуться в корень Архива |