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

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


check and uncheck menu items in a pop-up window

James Shao -- jshao@pluto.dspt.com
Friday, October 11, 1996


Environment: Visual C++ 4.2, Win95

In my project, in addition to the main frame window, we also need to have 
several pop-up windows with their own menu.

For this purpose, I created a new class CMsgWnd which is derived from 
CWnd class. 

To have the window displayed, I first Create a new CMsgWnd object and 
attach a menu to it (I used CreateEx(...LoadMenu()) command) and them use 
ShowWindow to display it.  I can click any menu item to perform the 
corresponding task. The problem is that I cannot set check and uncheck to 
the menu items and I cannot enable or disable the menu items on calling the
ON_UPDATE_COMMAND_UI command as I did for the mainframe window menu items.

The following is the sample code to try to set the check or uncheck a 
menu item:

in the message map (in CMsgWnd class), I have

ON_UPDATE_COMMAND_UI(ID_QUIET, OnUpdateQuiet)

The code is:

void CMsgWnd::OnUpdateQuiet(CCmdUI* pCmdUI) 
{
	if (!quiet) 
		pCmdUI->SetCheck(0);
	else 
		pCmdUI->SetCheck(1);
}

where quiet is a BOOl variable.

No matter what the quiet value is, the menu item always keep the same 
initial check/uncheck status.

If the menu item is in the MainFrame window, the same code works fine.

What is the problem?


James Shao
DSP Technology







ganeshs@nationwide.com
Monday, October 14, 1996

[Mini-digest: 2 responses]

Environment: Visual C++ 4.2, Win95

> In my project, in addition to the main frame window, we also need to have
> several pop-up windows with their own menu.
>
> For this purpose, I created a new class CMsgWnd which is derived from
> CWnd class.
>
> To have the window displayed, I first Create a new CMsgWnd object and
> attach a menu to it (I used CreateEx(...LoadMenu()) command) and them use
> ShowWindow to display it.  I can click any menu item to perform the
> corresponding task. The problem is that I cannot set check and uncheck to
> the menu items and I cannot enable or disable the menu items on calling the
> ON_UPDATE_COMMAND_UI command as I did for the mainframe window menu items.
>
> The following is the sample code to try to set the check or uncheck a
> menu item:
>
> in the message map (in CMsgWnd class), I have
>
> ON_UPDATE_COMMAND_UI(ID_QUIET, OnUpdateQuiet)
>
> The code is:
>
> void CMsgWnd::OnUpdateQuiet(CCmdUI* pCmdUI)
> {
> |if (!quiet)
> ||pCmdUI->SetCheck(0);
> |else
> ||pCmdUI->SetCheck(1);
> }
>
> where quiet is a BOOl variable.
>
> No matter what the quiet value is, the menu item always keep the same
> initial check/uncheck status.
>
> If the menu item is in the MainFrame window, the same code works fine.
>
>What is the problem?

    CFrameWnd's    (and   hence,    it's   derivatives)    handler   for
WM_INITMENUPOPUP makes the  calls to update handlers.  Derive your class
from CFrameWnd instead of CWnd, and things will work as expected. If you
_have_ to derive from CWnd (for  whatever reason) on the other hand, you
would need the logic for calling  the update handlers duplicated in your
CWnd-derived class...

/ ___|    / ___| __ _ _ __   ___  ___| |    I do not speak for
\___ \   | |  _ / _` | '_ \ / _ \/ __| '_ \ Tata   Unisys   or
 ___) |  | |_| | (_| | | | |  __/\__ \ | | |Nationwide    Ins.
|____(_)  \____|\__,_|_| |_|\___||___/_| |_|------------------
-----From: Joseph Jones 

Are you sure that the menu messages for the menu comamnds are going to
your CMsgWnd dervied class and not tou your MainFrame Window first?

joe





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