///////////////////////////////////////////////////////////////////////////////
// Name:        wx/msw/private/menu.h
// Purpose:     Structs used to custom draw and measure menu bar in wxMSW
// Author:      Vadim Zeitlin
// Created:     2025-01-24
// Copyright:   (c) 2025 wxWidgets development team
// Licence:     wxWindows licence
///////////////////////////////////////////////////////////////////////////////

#ifndef _WX_MSW_PRIVATE_MENU_H_
#define _WX_MSW_PRIVATE_MENU_H_

namespace wxMSWMenuImpl
{

// Definitions for undocumented messages and structs used in this code.
constexpr int WM_MENUBAR_DRAWMENU = 0x91;
constexpr int WM_MENUBAR_DRAWMENUITEM = 0x92;
constexpr int WM_MENUBAR_INITMENU = 0x93;
constexpr int WM_MENUBAR_MEASUREMENUITEM = 0x94;

// This is passed via LPARAM of WM_MENUBAR_DRAWMENU.
struct MenuBarDrawMenu
{
    HMENU hmenu;
    HDC hdc;
    DWORD dwReserved;
};

struct MenuBarMenuItem
{
    int iPosition;

    // There are more fields in this (undocumented) struct but we don't
    // currently need them, so don't bother with declaring them.
};

struct MenuBarDrawMenuItem
{
    DRAWITEMSTRUCT dis;
    MenuBarDrawMenu mbdm;
    MenuBarMenuItem mbmi;
};

struct MenuBarMeasureMenuItem
{
    MEASUREITEMSTRUCT mis;
    MenuBarDrawMenu mbdm;
    MenuBarMenuItem mbmi;
};

} // namespace wxMSWMenuImpl

#endif // _WX_MSW_PRIVATE_MENU_H_
