Help Center

UncheckItemfunction

Unchecks a menu item.

Windowsfunctiondoc-orphan
No implementation located. This member is documented, but the source scan found no matching declaration. It is likely declared in a header this scan does not resolve, or provided by a macro.

Syntax

FUNCTION UncheckItem (BYVAL hMenu AS HMENU, BYVAL uItem AS DWORD, BYVAL fByPosition AS LONG = FALSE) AS LONG

Parameters

NameDescription
hMenuHandle to the menu that contains the menu item.
itemThe identifier or position of the menu item to get information about. The meaning of this parameter depends on the value of fByPosition.
fByPositionThe meaning of item. If this parameter is FALSE, item is a menu item identifier. Otherwise, it is a menu item position, where position = 1 for the first position, position = 2 for the second, and so on.

Return value

The return value specifies the previous state of the menu item (either MF_CHECKED or MF_UNCHECKED). If the menu item does not exist, the return value is -1.

Description

Unchecks a menu item.

Examples

CMenu.UncheckItem(hMenu, IDM_OPEN)

#define UNICODE #INCLUDE ONCE "AfxNova/CWindow.inc" #INCLUDE ONCE "AfxNova/CMenu.inc" USING AfxNova

DECLARE FUNCTION wWinMain (BYVAL hInstance AS HINSTANCE, _

BYVAL hPrevInstance AS HINSTANCE, _
                       BYVAL pwszCmdLine AS WSTRING PTR, _
                       BYVAL nCmdShow AS LONG) AS LONG

END wWinMain(GetModuleHandleW(NULL), NULL, wCommand(), SW_NORMAL)

' // Forward declaration DECLARE FUNCTION WndProc (BYVAL hwnd AS HWND, BYVAL uMsg AS UINT, BYVAL wParam AS WPARAM, BYVAL lParam AS LPARAM) AS LRESULT

' // Menu identifiers ENUM IDM_NEW = 1001 ' New file IDM_OPEN ' Open file... IDM_SAVE ' Save file IDM_SAVEAS ' Save file as... IDM_EXIT ' Exit

IDM_UNDO = 2001 ' Undo IDM_CUT ' Cut IDM_COPY ' Copy IDM_PASTE ' Paste

IDM_TILEH = 3001 ' Tile hosizontal IDM_TILEV ' Tile vertical IDM_CASCADE ' Cascade IDM_ARRANGE ' Arrange icons IDM_CLOSE ' Close IDM_CLOSEALL ' Close all END ENUM

' ======================================================================================== ' Build the menu ' ======================================================================================== FUNCTION BuildMenu () AS HMENU

DIM hMenu AS HMENU DIM hPopUpMenu AS HMENU

hMenu = CMenu.Create hPopUpMenu = CMenu.CreatePopup

CMenu.Append hMenu, MF_POPUP OR MF_ENABLED, CAST(UINT_PTR, hPopUpMenu), "&File"
     CMenu.Append hPopUpMenu, MF_ENABLED, IDM_NEW, "&New" & CHR(9) & "Ctrl+N"
     CMenu.Append hPopUpMenu, MF_ENABLED, IDM_OPEN, "&Open..." & CHR(9) & "Ctrl+O"
     CMenu.Append hPopUpMenu, MF_SEPARATOR, 0, ""
     CMenu.Append hPopUpMenu, MF_ENABLED, IDM_SAVE, "&Save" & CHR(9) & "Ctrl+S"
     CMenu.Append hPopUpMenu, MF_ENABLED, IDM_SAVEAS, "Save &As..."
     CMenu.Append hPopUpMenu, MF_SEPARATOR, 0, ""
     CMenu.Append hPopUpMenu, MF_ENABLED, IDM_EXIT, "E&xit" & CHR(9) & "Alt+F4"

hPopUpMenu = CMenu.CreatePopup

CMenu.Append hMenu, MF_POPUP OR MF_ENABLED, CAST(UINT_PTR, hPopUpMenu), "&Edit"
     CMenu.Append hPopUpMenu, MF_ENABLED, IDM_UNDO, "&Undo" & CHR(9) & "Ctrl+Z"
     CMenu.Append hPopUpMenu, MF_SEPARATOR, 0, ""
     CMenu.Append hPopUpMenu, MF_ENABLED, IDM_CUT, "Cu&t" & CHR(9) & "Ctrl+X"
     CMenu.Append hPopUpMenu, MF_ENABLED, IDM_COPY, "&Copy" & CHR(9) & "Ctrl+C"
     CMenu.Append hPopUpMenu, MF_ENABLED, IDM_PASTE, "&Paste" & CHR(9) & "Ctrl+V"

hPopUpMenu = CMenu.CreatePopup

CMenu.Append hMenu, MF_POPUP OR MF_ENABLED, CAST(UINT_PTR, hPopUpMenu), "&Window"
     CMenu.Append hPopUpMenu, MF_ENABLED, IDM_TILEH, "&Tile Horizontal"
     CMenu.Append hPopUpMenu, MF_ENABLED, IDM_TILEV, "Tile &Vertical"
     CMenu.Append hPopUpMenu, MF_ENABLED, IDM_CASCADE, "Ca&scade"
     CMenu.Append hPopUpMenu, MF_ENABLED, IDM_ARRANGE, "&Arrange &Icons"
     CMenu.Append hPopUpMenu, MF_SEPARATOR, 0, ""
     CMenu.Append hPopUpMenu, MF_ENABLED, IDM_CLOSE, "&Close" & CHR(9) & "Ctrl+F4"
     CMenu.Append hPopUpMenu, MF_ENABLED, IDM_CLOSEALL, "Close &All"

FUNCTION = hMenu

END FUNCTION ' ========================================================================================

' ======================================================================================== ' Main ' ======================================================================================== FUNCTION wWinMain (BYVAL hInstance AS HINSTANCE, _

BYVAL hPrevInstance AS HINSTANCE, _
               BYVAL pwszCmdLine AS WSTRING PTR, _
               BYVAL nCmdShow AS LONG) AS LONG

' // Set process DPI aware SetProcessDpiAwareness(PROCESS_SYSTEM_DPI_AWARE) ' // Enable visual styles without including a manifest file AfxEnableVisualStyles

' // Creates the main window DIM pWindow AS CWindow = "MyClassName" ' Use the name you wish DIM hWin AS HWND = pWindow.Create(NULL, "CWindow - Menu", @WndProc) ' // Sizes it by setting the wanted width and height of its client area pWindow.SetClientSize(400, 220) ' // Centers the window pWindow.Center

' // Creates the menu DIM hMenu AS HMENU = BuildMenu CMenu.SetMenu pWindow.hWindow, hMenu

' // Set the main window background color pWindow.SetBackColor(RGB_GOLD)

' // Adds a button pWindow.AddControl("Button", hWin, IDCANCEL, "&Close", 270, 155, 75, 30) ' // Anchors the button to the bottom and the right side of the main window pWindow.AnchorControl(IDCANCEL, AFX_ANCHOR_BOTTOM_RIGHT)

' // Displays the window and dispatches the Windows messages FUNCTION = pWindow.DoEvents(nCmdShow)

END FUNCTION ' ========================================================================================

' ======================================================================================== ' Main window procedure ' ======================================================================================== FUNCTION WndProc (BYVAL hwnd AS HWND, BYVAL uMsg AS UINT, BYVAL wParam AS WPARAM, BYVAL lParam AS LPARAM) AS LRESULT

SELECT CASE uMsg

' // If an application processes this message, it should return zero to continue
  ' // creation of the window. If the application returns –1, the window is destroyed
  ' // and the CreateWindowExW function returns a NULL handle.
  CASE WM_CREATE
     AfxEnableDarkModeForWindow(hwnd)
     RETURN 0

  ' // Theme has changed
  CASE WM_THEMECHANGED
     AfxEnableDarkModeForWindow(hwnd)
     RETURN 0

  ' // Sent when the user selects a command item from a menu, when a control sends a
  ' // notification message to its parent window, or when an accelerator keystroke is translated.
  CASE WM_COMMAND
     SELECT CASE CBCTL(wParam, lParam)
        CASE IDCANCEL
           ' // If ESC key pressed, close the application by sending an WM_CLOSE message
           IF CBCTLMSG(wParam, lParam) = BN_CLICKED THEN SendMessageW(hwnd, WM_CLOSE, 0, 0)
        CASE IDM_NEW   ' IDM_OPEN, IDM_SAVE, etc.
           MessageBox hwnd, "New option clicked", "Menu", MB_OK
           EXIT FUNCTION
     END SELECT
     RETURN 0

  CASE WM_DESTROY
     ' // End the application by sending an WM_QUIT message
     PostQuitMessage(0)
     RETURN 0

END SELECT

' // Default processing of Windows messages FUNCTION = DefWindowProcW(hwnd, uMsg, wParam, lParam)

END FUNCTION ' ========================================================================================

#define UNICODE #define _WIN32_WINNT &h0602 #INCLUDE ONCE "windows.bi" #INCLUDE ONCE "AfxNova/CWindow.inc" #INCLUDE ONCE "AfxNova/CMenu.inc" USING AfxNova

' // Menu identifiers #define IDM_UNDO 1001 ' Undo #define IDM_REDO 1002 ' Redo #define IDM_HOME 1003 ' Home #define IDM_SAVE 1004 ' Save file #define IDM_EXIT 1005 ' Exit

DECLARE FUNCTION wWinMain (BYVAL hInstance AS HINSTANCE, _

BYVAL hPrevInstance AS HINSTANCE, _
                       BYVAL pwszCmdLine AS WSTRING PTR, _
                       BYVAL nCmdShow AS LONG) AS LONG

END wWinMain(GetModuleHandleW(NULL), NULL, WCOMMAND(), SW_NORMAL)

' // Forward declaration DECLARE FUNCTION WndProc (BYVAL hwnd AS HWND, BYVAL uMsg AS UINT, BYVAL wParam AS WPARAM, BYVAL lParam AS LPARAM) AS LRESULT

' ======================================================================================== ' Build the menu ' ======================================================================================== FUNCTION BuildMenu () AS HMENU

DIM hMenu AS HMENU DIM hPopUpMenu AS HMENU

hMenu = CMenu.Create hPopUpMenu = CMenu.CreatePopup

CMenu.Append hMenu, MF_POPUP OR MF_ENABLED, CAST(UINT_PTR, hPopUpMenu), "&File"
     CMenu.Append hPopUpMenu, MF_ENABLED, IDM_UNDO, "&Undo" & CHR(9) & "Ctrl+U"
     CMenu.Append hPopUpMenu, MF_ENABLED, IDM_REDO, "&Redo" & CHR(9) & "Ctrl+R"
     CMenu.Append hPopUpMenu, MF_ENABLED, IDM_HOME, "&Home" & CHR(9) & "Ctrl+H"
     CMenu.Append hPopUpMenu, MF_ENABLED, IDM_SAVE, "&Save" & CHR(9) & "Ctrl+S"
     CMenu.Append hPopUpMenu, MF_ENABLED, IDM_EXIT, "E&xit" & CHR(9) & "Alt+F4"

FUNCTION = hMenu

END FUNCTION ' ========================================================================================

' ======================================================================================== ' Main ' ======================================================================================== FUNCTION wWinMain (BYVAL hInstance AS HINSTANCE, _

BYVAL hPrevInstance AS HINSTANCE, _
               BYVAL pwszCmdLine AS WSTRING PTR, _
               BYVAL nCmdShow AS LONG) AS LONG

' // Set process DPI aware SetProcessDpiAwareness(PROCESS_SYSTEM_DPI_AWARE) ' // Enable visual styles without including a manifest file AfxEnableVisualStyles

DIM pWindow AS CWindow pWindow.Create(NULL, "CWindow with a menu", @WndProc) pWindow.SetClientSize(400, 250) pWindow.Center

' // Add a button DIM hButton AS HWND = pWindow.AddControl("Button", pWindow.hWindow, IDCANCEL, "&Close", 280, 180, 75, 23) SetFocus hButton

' // Module instance handle DIM hInst AS HINSTANCE = GetModuleHandle(NULL)

' // Create the menu DIM hMenu AS HMENU = BuildMenu CMenu.SetMenu pWindow.hWindow, hMenu

' // Create a keyboard accelerator table pWindow.AddAccelerator FVIRTKEY OR FCONTROL, "U", IDM_UNDO ' // Ctrl+U - Undo pWindow.AddAccelerator FVIRTKEY OR FCONTROL, "R", IDM_REDO ' // Ctrl+R - Redo pWindow.AddAccelerator FVIRTKEY OR FCONTROL, "H", IDM_HOME ' // Ctrl+H - Home pWindow.AddAccelerator FVIRTKEY OR FCONTROL, "S", IDM_SAVE ' // Ctrl+S - Save pWindow.CreateAcceleratorTable

' // Process Windows messages FUNCTION = pWindow.DoEvents(nCmdShow)

END FUNCTION ' ========================================================================================

' ======================================================================================== ' Window procedure ' ======================================================================================== FUNCTION WndProc (BYVAL hWnd AS HWND, BYVAL uMsg AS UINT, BYVAL wParam AS WPARAM, BYVAL lParam AS LPARAM) AS LRESULT

SELECT CASE uMsg

' // If an application processes this message, it should return zero to continue
  ' // creation of the window. If the application returns –1, the window is destroyed
  ' // and the CreateWindowExW function returns a NULL handle.
  CASE WM_CREATE
     AfxEnableDarkModeForWindow(hwnd)
     RETURN 0

  ' // Theme has changed
  CASE WM_THEMECHANGED
     AfxEnableDarkModeForWindow(hwnd)
     RETURN 0

  CASE WM_COMMAND
     SELECT CASE LOWORD(wParam)
        CASE IDCANCEL
           ' // If ESC key pressed, close the application sending an WM_CLOSE message
           IF HIWORD(wParam) = BN_CLICKED THEN
              SendMessageW hwnd, WM_CLOSE, 0, 0
              EXIT FUNCTION
           END IF
        CASE IDM_UNDO
           MessageBox hwnd, "Undo option clicked", "Menu", MB_OK
           EXIT FUNCTION
        CASE IDM_REDO
           MessageBox hwnd, "Redo option clicked", "Menu", MB_OK
           EXIT FUNCTION
        CASE IDM_HOME
           MessageBox hwnd, "Home option clicked", "Menu", MB_OK
           EXIT FUNCTION
        CASE IDM_SAVE
           MessageBox hwnd, "Save option clicked", "Menu", MB_OK
           EXIT FUNCTION
     END SELECT

  CASE WM_DESTROY
     PostQuitMessage(0)
     EXIT FUNCTION

END SELECT

FUNCTION = DefWindowProcW(hWnd, uMsg, wParam, lParam)

END FUNCTION ' ========================================================================================

'#RESOURCE "CW_Menu_Icons_01.rc" #define UNICODE #define _WIN32_WINNT &h0602 #INCLUDE ONCE "AfxNova/CWindow.inc" #INCLUDE ONCE "AfxNova/AfxGdiPlus.inc" #INCLUDE ONCE "AfxNova/CMenu.inc" USING AfxNova

DECLARE FUNCTION wWinMain (BYVAL hInstance AS HINSTANCE, _

BYVAL hPrevInstance AS HINSTANCE, _
                       BYVAL pwszCmdLine AS WSTRING PTR, _
                       BYVAL nCmdShow AS LONG) AS LONG

END wWinMain(GetModuleHandleW(NULL), NULL, wCommand(), SW_NORMAL)

' // Forward declaration DECLARE FUNCTION WndProc (BYVAL hwnd AS HWND, BYVAL uMsg AS UINT, BYVAL wParam AS WPARAM, BYVAL lParam AS LPARAM) AS LRESULT

' // Menu identifiers ENUM IDM_UNDO = 1001 ' Undo IDM_REDO ' Redo IDM_HOME ' Home IDM_SAVE ' Save IDM_EXIT ' Exit END ENUM

' ======================================================================================== ' Build the menu ' ======================================================================================== FUNCTION BuildMenu () AS HMENU

DIM hMenu AS HMENU DIM hPopUpMenu AS HMENU

hMenu = CMenu.Create hPopUpMenu = CMenu.CreatePopUp

CMenu.Append hMenu, MF_POPUP OR MF_ENABLED, CAST(UINT_PTR, hPopUpMenu), "&File"
     CMenu.Append hPopUpMenu, MF_ENABLED, IDM_UNDO, "&Undo" & CHR(9) & "Ctrl+U"
     CMenu.Append hPopUpMenu, MF_ENABLED, IDM_REDO, "&Redo" & CHR(9) & "Ctrl+R"
     CMenu.Append hPopUpMenu, MF_ENABLED, IDM_HOME, "&Home" & CHR(9) & "Ctrl+H"
     CMenu.Append hPopUpMenu, MF_ENABLED, IDM_SAVE, "&Save" & CHR(9) & "Ctrl+S"
     CMenu.Append hPopUpMenu, MF_ENABLED, IDM_EXIT, "E&xit" & CHR(9) & "Alt+F4"

FUNCTION = hMenu

END FUNCTION ' ========================================================================================

' ======================================================================================== ' Main ' ======================================================================================== FUNCTION wWinMain (BYVAL hInstance AS HINSTANCE, _

BYVAL hPrevInstance AS HINSTANCE, _
               BYVAL pwszCmdLine AS WSTRING PTR, _
               BYVAL nCmdShow AS LONG) AS LONG

' // Set process DPI aware SetProcessDpiAwareness(PROCESS_SYSTEM_DPI_AWARE) ' // Enable visual styles without including a manifest file AfxEnableVisualStyles

' // Creates the main window DIM pWindow AS CWindow = "MyClassName" ' Use the name you wish DIM hWin AS HWND = pWindow.Create(NULL, "CWindow - Menu with icons", @WndProc) ' // Sizes it by setting the wanted width and height of its client area pWindow.SetClientSize(400, 220) ' // Centers the window pWindow.Center

' // Creates the menu DIM hMenu AS HMENU = BuildMenu CMenu.SetMenu pWindow.hWindow, hMenu

' // Add icons to the items of the File menu DIM hSubMenu AS HMENU = GetSubMenu(hMenu, 0) CMenu.AddIconToItem(hSubMenu, 0, TRUE, AfxGdipIconFromRes(hInstance, "IDI_ARROW_LEFT_32")) CMenu.AddIconToItem(hSubMenu, 1, TRUE, AfxGdipIconFromRes(hInstance, "IDI_ARROW_RIGHT_32")) CMenu.AddIconToItem(hSubMenu, 2, TRUE, AfxGdipIconFromRes(hInstance, "IDI_HOME_32")) CMenu.AddIconToItem(hSubMenu, 3, TRUE, AfxGdipIconFromRes(hInstance, "IDI_SAVE_32"))

' // Set the main window background color pWindow.SetBackColor(RGB_OLDLACE)

' // Adds a button pWindow.AddControl("Button", hWin, IDCANCEL, "&Close", 270, 155, 75, 30) ' // Anchors the button to the bottom and the right side of the main window pWindow.AnchorControl(IDCANCEL, AFX_ANCHOR_BOTTOM_RIGHT)

' // Displays the window and dispatches the Windows messages FUNCTION = pWindow.DoEvents(nCmdShow)

END FUNCTION ' ========================================================================================

' ======================================================================================== ' Main window procedure ' ======================================================================================== FUNCTION WndProc (BYVAL hwnd AS HWND, BYVAL uMsg AS UINT, BYVAL wParam AS WPARAM, BYVAL lParam AS LPARAM) AS LRESULT

SELECT CASE uMsg

' // If an application processes this message, it should return zero to continue
  ' // creation of the window. If the application returns –1, the window is destroyed
  ' // and the CreateWindowExW function returns a NULL handle.
  CASE WM_CREATE
     AfxEnableDarkModeForWindow(hwnd)
     RETURN 0

  ' // Theme has changed
  CASE WM_THEMECHANGED
     AfxEnableDarkModeForWindow(hwnd)
     RETURN 0

  ' // Sent when the user selects a command item from a menu, when a control sends a
  ' // notification message to its parent window, or when an accelerator keystroke is translated.
  CASE WM_COMMAND
     SELECT CASE CBCTL(wParam, lParam)
        CASE IDCANCEL
           ' // If ESC key pressed, close the application by sending an WM_CLOSE message
           IF CBCTLMSG(wParam, lParam) = BN_CLICKED THEN SendMessageW(hwnd, WM_CLOSE, 0, 0)
        CASE IDM_UNDO   ' IDM_UNDO, IDM_Redo, etc.
           MessageBox hwnd, "Undo option clicked", "Menu", MB_OK
           EXIT FUNCTION
     END SELECT
     RETURN 0

  CASE WM_DESTROY
     ' // End the application by sending an WM_QUIT message
     PostQuitMessage(0)
     RETURN 0

END SELECT

' // Default processing of Windows messages FUNCTION = DefWindowProcW(hwnd, uMsg, wParam, lParam)

END FUNCTION ' ========================================================================================

' ######################################################################################## ' Microsoft Windows ' File: CW_Menu_NestedSubmenus_01.bas ' Contents: CWindow - Nested submenus ' Compiler: FreeBasic 32 & 64 bit ' Copyright (c) 2026 José Roca. Freeware. Use at your own risk. ' THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER ' EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF ' MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. ' ########################################################################################

#define UNICODE #INCLUDE ONCE "AfxNova/CWindow.inc" #INCLUDE ONCE "AfxNova/CMenu.inc" #INCLUDE ONCE "AfxNova/AfxMenu.inc" USING AfxNova

DECLARE FUNCTION wWinMain (BYVAL hInstance AS HINSTANCE, _

BYVAL hPrevInstance AS HINSTANCE, _
                       BYVAL pwszCmdLine AS WSTRING PTR, _
                       BYVAL nCmdShow AS LONG) AS LONG

END wWinMain(GetModuleHandleW(NULL), NULL, wCommand(), SW_NORMAL)

' // Forward declaration DECLARE FUNCTION WndProc (BYVAL hwnd AS HWND, BYVAL uMsg AS UINT, BYVAL wParam AS WPARAM, BYVAL lParam AS LPARAM) AS LRESULT

' // Menu identifiers ENUM IDM_NEW = 1001 ' New file IDM_OPEN ' Open file... IDM_SAVE ' Save file IDM_SAVEAS ' Save file as... IDM_EXIT ' Exit

IDM_UNDO = 2001 ' Undo IDM_CUT ' Cut IDM_COPY ' Copy IDM_PASTE ' Paste

IDM_TILEH = 3001 ' Tile hosizontal IDM_TILEV ' Tile vertical IDM_CASCADE ' Cascade IDM_ARRANGE ' Arrange icons IDM_CLOSE ' Close IDM_CLOSEALL ' Close all END ENUM

' ======================================================================================== ' Build the menu ' ======================================================================================== FUNCTION BuildMenu () AS HMENU

DIM hMenu AS HMENU DIM hPopUpMenu AS HMENU

hMenu = CMenu.Create hPopUpMenu = CMenu.NewPopup

CMenu.Append hMenu, MF_POPUP OR MF_ENABLED, CAST(UINT_PTR, hPopUpMenu), "&File"
     CMenu.Append hPopUpMenu, MF_ENABLED, IDM_NEW, "&New" & CHR(9) & "Ctrl+N"
     CMenu.Append hPopUpMenu, MF_ENABLED, IDM_OPEN, "&Open..." & CHR(9) & "Ctrl+O"
     CMenu.Append hPopUpMenu, MF_SEPARATOR, 0, ""
     CMenu.Append hPopUpMenu, MF_ENABLED, IDM_SAVE, "&Save" & CHR(9) & "Ctrl+S"
     CMenu.Append hPopUpMenu, MF_ENABLED, IDM_SAVEAS, "Save &As..."
     CMenu.Append hPopUpMenu, MF_SEPARATOR, 0, ""
     CMenu.Append hPopUpMenu, MF_ENABLED, IDM_EXIT, "E&xit" & CHR(9) & "Alt+F4"

hPopUpMenu = CMenu.CreatePopUp

CMenu.Append hMenu, MF_POPUP OR MF_ENABLED, CAST(UINT_PTR, hPopUpMenu), "&Edit"
     CMenu.Append hPopUpMenu, MF_ENABLED, IDM_UNDO, "&Undo" & CHR(9) & "Ctrl+Z"
     CMenu.Append hPopUpMenu, MF_SEPARATOR, 0, ""
     CMenu.Append hPopUpMenu, MF_ENABLED, IDM_CUT, "Cu&t" & CHR(9) & "Ctrl+X"
     CMenu.Append hPopUpMenu, MF_ENABLED, IDM_COPY, "&Copy" & CHR(9) & "Ctrl+C"
     CMenu.Append hPopUpMenu, MF_ENABLED, IDM_PASTE, "&Paste" & CHR(9) & "Ctrl+V"

hPopUpMenu = CMenu.CreatePopUp

CMenu.Append hMenu, MF_POPUP OR MF_ENABLED, CAST(UINT_PTR, hPopUpMenu), "&Window"
     CMenu.Append hPopUpMenu, MF_ENABLED, IDM_TILEH, "&Tile Horizontal"
     CMenu.Append hPopUpMenu, MF_ENABLED, IDM_TILEV, "Tile &Vertical"
     CMenu.Append hPopUpMenu, MF_ENABLED, IDM_CASCADE, "Ca&scade"
     CMenu.Append hPopUpMenu, MF_ENABLED, IDM_ARRANGE, "&Arrange &Icons"
     CMenu.Append hPopUpMenu, MF_SEPARATOR, 0, ""
     CMenu.Append hPopUpMenu, MF_ENABLED, IDM_CLOSE, "&Close" & CHR(9) & "Ctrl+F4"
     CMenu.Append hPopUpMenu, MF_ENABLED, IDM_CLOSEALL, "Close &All"
     CMenu.Append hPopUpMenu, MF_SEPARATOR, 0, ""

' // Nested menus DIM hSubPopUpMenu AS HMENU = CMenu.CreatePopUp

CMenu.AddPopup hPopUpMenu, hSubPopUpMenu, MF_ENABLED, 4001, "Nested submenu 1"
     CMenu.Append hSubPopUpMenu, MF_ENABLED, 4002, "Nested submenu 1 item 1"
     CMenu.Append hSubPopUpMenu, MF_ENABLED, 4003, "Nested submenu 1 item 2"
     CMenu.Append hSubPopUpMenu, MF_SEPARATOR, 0, ""

DIM hSubPopUpMenu2 AS HMENU = CMenu.CreatePopUp

CMenu.AddPopup hSubPopUpMenu, hSubPopUpMenu2, MF_ENABLED, 5001, "Nested submenu 2"
     CMenu.Append hSubPopUpMenu2, MF_ENABLED, 5002, "Nested submenu 2 item 1"
     CMenu.Append hSubPopUpMenu2, MF_ENABLED, 5003, "Nested submenu 2 item 2"

FUNCTION = hMenu

END FUNCTION ' ========================================================================================

' ======================================================================================== ' Main ' ======================================================================================== FUNCTION wWinMain (BYVAL hInstance AS HINSTANCE, _

BYVAL hPrevInstance AS HINSTANCE, _
               BYVAL pwszCmdLine AS WSTRING PTR, _
               BYVAL nCmdShow AS LONG) AS LONG

' // Set process DPI aware SetProcessDpiAwareness(PROCESS_SYSTEM_DPI_AWARE) ' // Enable visual styles without including a manifest file AfxEnableVisualStyles

' // Creates the main window DIM pWindow AS CWindow = "MyClassName" ' Use the name you wish DIM hWin AS HWND = pWindow.Create(NULL, "CWindow - Menu", @WndProc) ' // Sizes it by setting the wanted width and height of its client area pWindow.SetClientSize(400, 220) ' // Centers the window pWindow.Center

' // Creates the menu DIM hMenu AS HMENU = BuildMenu CMenu.SetMenu pWindow.hWindow, hMenu

' // Set the main window background color pWindow.SetBackColor(RGB_GOLD)

' // Adds a button pWindow.AddControl("Button", hWin, IDCANCEL, "&Close", 270, 155, 75, 30) ' // Anchors the button to the bottom and the right side of the main window pWindow.AnchorControl(IDCANCEL, AFX_ANCHOR_BOTTOM_RIGHT)

' // Displays the window and dispatches the Windows messages FUNCTION = pWindow.DoEvents(nCmdShow)

END FUNCTION ' ========================================================================================

' ======================================================================================== ' Main window procedure ' ======================================================================================== FUNCTION WndProc (BYVAL hwnd AS HWND, BYVAL uMsg AS UINT, BYVAL wParam AS WPARAM, BYVAL lParam AS LPARAM) AS LRESULT

SELECT CASE uMsg

' // If an application processes this message, it should return zero to continue
  ' // creation of the window. If the application returns –1, the window is destroyed
  ' // and the CreateWindowExW function returns a NULL handle.
  CASE WM_CREATE
     AfxEnableDarkModeForWindow(hwnd)
     RETURN 0

  ' // Theme has changed
  CASE WM_THEMECHANGED
     AfxEnableDarkModeForWindow(hwnd)
     RETURN 0

  ' // Sent when the user selects a command item from a menu, when a control sends a
  ' // notification message to its parent window, or when an accelerator keystroke is translated.
  CASE WM_COMMAND
     SELECT CASE CBCTL(wParam, lParam)
        CASE IDCANCEL
           ' // If ESC key pressed, close the application by sending an WM_CLOSE message
           IF CBCTLMSG(wParam, lParam) = BN_CLICKED THEN SendMessageW(hwnd, WM_CLOSE, 0, 0)
        CASE IDM_NEW   ' IDM_OPEN, IDM_SAVE, etc.
           MessageBox hwnd, "New option clicked", "Menu", MB_OK
           EXIT FUNCTION
     END SELECT
     RETURN 0

  CASE WM_DESTROY
     ' // End the application by sending an WM_QUIT message
     PostQuitMessage(0)
     RETURN 0

END SELECT

' // Default processing of Windows messages FUNCTION = DefWindowProcW(hwnd, uMsg, wParam, lParam)

END FUNCTION ' ========================================================================================

Builds a menu using CWindow and CMenu.

Reference

  • Documented in Windows/WIndows Controls/CMenu Class.md
  • Topic: About Menus