Processing the WM_INITMENUPOPUP Message

Not all clipboard commands are available to the user at any given time. An application should process the WM_INITMENUPOPUP message to enable the menu items for available commands and disable unavailable commands.

Following is the WM_INITMENUPOPUP case for an application named Label.

case WM_INITMENUPOPUP:

InitMenu((HMENU) wParam);

break;

The InitMenu function is defined as follows.

  • oid WINAPI InitMenu(HMENU hmenu)

{

int cMenuItems = GetMenuItemCount(hmenu);

int nPos;

UINT id;

UINT fuFlags;

PLABELBOX pbox = (hwndSelected == NULL) ? NULL :

(PLABELBOX) GetWindowLong(hwndSelected, 0);

for (nPos = 0; nPos < cMenuItems; nPos++)

{

id = GetMenuItemID(hmenu, nPos);

switch (id)

{

case IDM_CUT:

case IDM_COPY:

case IDM_DELETE:

if (pbox == NULL || !pbox->fSelected)

fuFlags = MF_BYCOMMAND | MF_GRAYED;

else if (pbox->fEdit)

fuFlags = (id != IDM_DELETE && pbox->ichSel

== pbox->ichCaret) ?

MF_BYCOMMAND | MF_GRAYED :

MF_BYCOMMAND | MF_ENABLED;

else

fuFlags = MF_BYCOMMAND | MF_ENABLED;

EnableMenuItem(hmenu, id, fuFlags);

break;

case IDM_PASTE:

if (pbox != NULL && pbox->fEdit)

EnableMenuItem(hmenu, id,

IsClipboardFormatAvailable(CF_TEXT) ?

MF_BYCOMMAND | MF_ENABLED :

MF_BYCOMMAND | MF_GRAYED

);

else

EnableMenuItem(hmenu, id,

IsClipboardFormatAvailable(

uLabelFormat) ?

MF_BYCOMMAND | MF_ENABLED :

MF_BYCOMMAND | MF_GRAYED

);

}

}

}

Software for developers
Delphi Components
.Net Components
Software for Android Developers
More information resources
MegaDetailed.Net
Unix Manual Pages
Delphi Examples
Databases for Amazon shops developers
Amazon Categories Database
Browse Nodes Database