ReactOS  0.4.12-dev-75-g00dd17e
StartMenu Struct Reference

#include <startmenu.h>

Inheritance diagram for StartMenu:
Collaboration diagram for StartMenu:

Public Types

typedef ExtContextMenuHandlerT< OwnerDrawParent< DialogWindow > > super
 
- Public Types inherited from ExtContextMenuHandlerT< OwnerDrawParent< DialogWindow > >
typedef OwnerDrawParent< DialogWindowsuper
 
- Public Types inherited from OwnerDrawParent< DialogWindow >
typedef DialogWindow super
 
- Public Types inherited from DialogWindow
typedef Window super
 
- Public Types inherited from Window
typedef map< HWND, Window * > WindowMap
 
typedef Window *(* CREATORFUNC) (HWND)
 
typedef Window *(* CREATORFUNC_INFO) (HWND, const void *)
 

Public Member Functions

 StartMenu (HWND hwnd, int icon_size=ICON_SIZE_SMALL)
 
 StartMenu (HWND hwnd, const StartMenuCreateInfo &create_info, int icon_size=ICON_SIZE_SMALL)
 
 ~StartMenu ()
 
- Public Member Functions inherited from ExtContextMenuHandlerT< OwnerDrawParent< DialogWindow > >
 ExtContextMenuHandlerT (HWND hwnd)
 
 ExtContextMenuHandlerT (HWND hwnd, const PARA &info)
 
LRESULT WndProc (UINT nmsg, WPARAM wparam, LPARAM lparam)
 
- Public Member Functions inherited from OwnerDrawParent< DialogWindow >
 OwnerDrawParent (HWND hwnd)
 
LRESULT WndProc (UINT nmsg, WPARAM wparam, LPARAM lparam)
 
- Public Member Functions inherited from DialogWindow
 DialogWindow (HWND hwnd)
 
 ~DialogWindow ()
 
- Public Member Functions inherited from Window
 Window (HWND hwnd)
 
virtual ~Window ()
 
LRESULT SendParent (UINT nmsg, WPARAM wparam=0, LPARAM lparam=0)
 
LRESULT PostParent (UINT nmsg, WPARAM wparam=0, LPARAM lparam=0)
 

Static Public Member Functions

static HWND Create (int x, int y, const StartMenuFolders &, HWND hwndParent, LPCTSTR title, CREATORFUNC_INFO creator=s_def_creator, void *info=NULL, const String &filter="")
 
- Static Public Member Functions inherited from Window
static HWND Create (CREATORFUNC creator, DWORD dwExStyle, LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int w, int h, HWND hwndParent=0, HMENU hMenu=0)
 
static HWND Create (CREATORFUNC_INFO creator, const void *info, DWORD dwExStyle, LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int w, int h, HWND hwndParent=0, HMENU hMenu=0)
 
static Windowcreate_mdi_child (const ChildWndInfo &info, const MDICREATESTRUCT &mcs, CREATORFUNC_INFO creator)
 
static LRESULT CALLBACK WindowWndProc (HWND hwnd, UINT nmsg, WPARAM wparam, LPARAM lparam)
 
static INT_PTR CALLBACK DialogProc (HWND hwnd, UINT nmsg, WPARAM wparam, LPARAM lparam)
 
static Windowget_window (HWND hwnd)
 get window controller from window handle More...
 
template<typename CLASS >
static CLASS * get_window (HWND hwnd)
 
static void register_pretranslate (HWND hwnd)
 
static void unregister_pretranslate (HWND hwnd)
 
static BOOL pretranslate_msg (LPMSG pmsg)
 
static void register_dialog (HWND hwnd)
 
static void unregister_dialog (HWND hwnd)
 
static BOOL dispatch_dialog_msg (LPMSG pmsg)
 
static int MessageLoop ()
 
static void CancelModes ()
 

Static Public Attributes

static CREATORFUNC_INFO s_def_creator = STARTMENU_CREATOR(StartMenu)
 

Protected Types

enum  SCROLL_MODE { SCROLL_NOT, SCROLL_UP, SCROLL_DOWN }
 

Protected Member Functions

LRESULT Init (LPCREATESTRUCT pcs)
 
LRESULT WndProc (UINT nmsg, WPARAM wparam, LPARAM lparam)
 
int Command (int id, int code)
 
void ResizeButtons (int cx)
 
virtual void AddEntries ()
 
ShellEntryMap::iterator AddEntry (const String &title, ICON_ID icon_id, Entry *entry)
 
ShellEntryMap::iterator AddEntry (const String &title, ICON_ID icon_id=ICID_NONE, int id=-1)
 
ShellEntryMap::iterator AddEntry (const ShellFolder folder, ShellEntry *entry)
 
ShellEntryMap::iterator AddEntry (const ShellFolder folder, Entry *entry)
 
void AddShellEntries (const ShellDirectory &dir, int max=-1, const String &ignore="")
 
void AddButton (LPCTSTR title, ICON_ID icon_id=ICID_NONE, bool hasSubmenu=false, int id=-1, bool enabled=true)
 
void AddSeparator ()
 
bool CloseSubmenus ()
 
bool CloseOtherSubmenus (int id=0)
 
void CreateSubmenu (int id, LPCTSTR title, CREATORFUNC_INFO creator=s_def_creator, void *info=NULL)
 
bool CreateSubmenu (int id, int folder, LPCTSTR title, CREATORFUNC_INFO creator=s_def_creator, void *info=NULL)
 
bool CreateSubmenu (int id, int folder1, int folder2, LPCTSTR title, CREATORFUNC_INFO creator=s_def_creator, void *info=NULL)
 
void CreateSubmenu (int id, const StartMenuFolders &new_folders, LPCTSTR title, CREATORFUNC_INFO creator=s_def_creator, void *info=NULL)
 
void ActivateEntry (int id, const ShellEntrySet &entries)
 
virtual void CloseStartMenu (int id=0)
 close all windows of the start menu popup More...
 
bool GetButtonRect (int id, PRECT prect) const
 
void DrawFloatingButton (HDC hdc)
 
void GetFloatingButtonRect (LPRECT prect)
 
void GetArrowButtonRects (LPRECT prect_up, LPRECT prect_down, int icon_size)
 
void DrawArrows (HDC hdc, int icon_size)
 
void Paint (PaintCanvas &canvas)
 
void UpdateIcons ()
 
- Protected Member Functions inherited from Window
virtual int Notify (int id, NMHDR *pnmh)
 

Static Protected Member Functions

static BtnWindowClassGetWndClasss ()
 
- Static Protected Member Functions inherited from Window
static Windowcreate_controller (HWND hwnd)
 create controller for a new window More...
 
static StaticWindowDataGetStaticWindowData ()
 
static LRESULT CALLBACK MDICBTHookProc (int code, WPARAM wparam, LPARAM lparam)
 
static LRESULT CALLBACK PropSheetCBTHookProc (int code, WPARAM wparam, LPARAM lparam)
 

Protected Attributes

int _next_id
 
ShellEntryMap _entries
 
StartMenuShellDirs _dirs
 
int _submenu_id
 
WindowHandle _submenu
 
int _border_left
 
int _border_top
 
int _bottom_max
 
bool _floating_btn
 
bool _arrow_btns
 
POINT _last_pos
 
enum StartMenu::SCROLL_MODE _scroll_mode
 
int _scroll_pos
 
int _invisible_lines
 
StartMenuCreateInfo _create_info
 
int _icon_size
 
- Protected Attributes inherited from ExtContextMenuHandlerT< OwnerDrawParent< DialogWindow > >
CtxMenuInterfaces _cm_ifs
 

Additional Inherited Members

- Public Attributes inherited from Window
IAccessible IAccessible_iface
 
IOleWindow IOleWindow_iface
 
IEnumVARIANT IEnumVARIANT_iface
 
LONG ref
 
- Static Protected Attributes inherited from Window
static WindowMap s_wnd_map
 
static const voids_new_info = NULL
 
static CREATORFUNC s_window_creator = NULL
 
static HHOOK s_hcbtHook = 0
 
static WindowSet s_pretranslate_windows
 
static WindowSet s_dialogs
 

Detailed Description

Startmenu window. To create a start menu call its Create() function.

Definition at line 199 of file startmenu.h.

Member Typedef Documentation

◆ super

Member Enumeration Documentation

◆ SCROLL_MODE

Enumerator
SCROLL_NOT 
SCROLL_UP 
SCROLL_DOWN 

Definition at line 245 of file startmenu.h.

Constructor & Destructor Documentation

◆ StartMenu() [1/2]

StartMenu::StartMenu ( HWND  hwnd,
int  icon_size = ICON_SIZE_SMALL 
)

Definition at line 47 of file startmenu.cpp.

48  : super(hwnd),
50 {
52  _submenu_id = 0;
53 
54  _border_left = 0;
55  _border_top = 0;
57 
58  _floating_btn = false;
59  _arrow_btns = false;
61  _scroll_pos = 0;
62  _invisible_lines = 0;
63 
64  _last_pos = WindowRect(hwnd).pos();
65 #ifdef _LIGHT_STARTMENU
66  _selected_id = -1;
67  _last_mouse_pos = 0;
68 #endif
69 }
int _icon_size
Definition: startmenu.h:251
#define INT_MAX
Definition: limits.h:40
int _border_top
Definition: startmenu.h:238
POINT _last_pos
Definition: startmenu.h:244
int _bottom_max
Definition: startmenu.h:239
int _border_left
Definition: startmenu.h:237
int _submenu_id
Definition: startmenu.h:234
int _next_id
Definition: startmenu.h:230
enum StartMenu::SCROLL_MODE _scroll_mode
bool _floating_btn
Definition: startmenu.h:241
bool _arrow_btns
Definition: startmenu.h:242
int _scroll_pos
Definition: startmenu.h:246
#define IDC_FIRST_MENU
Definition: desktopbar.h:64
int _invisible_lines
Definition: startmenu.h:247
ExtContextMenuHandlerT< OwnerDrawParent< DialogWindow > > super
Definition: startmenu.h:209
iconPos iconPos icon_size
Definition: startmenu.cpp:1416

◆ StartMenu() [2/2]

StartMenu::StartMenu ( HWND  hwnd,
const StartMenuCreateInfo create_info,
int  icon_size = ICON_SIZE_SMALL 
)

Definition at line 71 of file startmenu.cpp.

72  : super(hwnd),
73  _create_info(create_info),
75 {
76  for(StartMenuFolders::const_iterator it=create_info._folders.begin(); it!=create_info._folders.end(); ++it)
77  if (*it)
79 
81  _submenu_id = 0;
82 
83  _border_left = 0;
84  _border_top = create_info._border_top;
86 
87  _floating_btn = create_info._border_top? true: false;
88  _arrow_btns = false;
90  _scroll_pos = 0;
91  _invisible_lines = 0;
92 
93  _last_pos = WindowRect(hwnd).pos();
94 #ifdef _LIGHT_STARTMENU
95  _selected_id = -1;
96  _last_mouse_pos = 0;
97 #endif
98 }
void push_back(const_reference __x)
Definition: _list.h:509
iterator begin()
Definition: _list.h:367
StartMenuFolders _folders
Definition: startmenu.h:141
int _icon_size
Definition: startmenu.h:251
#define INT_MAX
Definition: limits.h:40
int _border_top
Definition: startmenu.h:238
StartMenuShellDirs _dirs
Definition: startmenu.h:232
shell folder entry
Definition: shellfs.h:53
POINT _last_pos
Definition: startmenu.h:244
StartMenuCreateInfo _create_info
Definition: startmenu.h:249
_STLP_PRIV _List_iterator< ShellPath, _Const_traits< ShellPath > > const_iterator
Definition: _list.h:276
int _bottom_max
Definition: startmenu.h:239
int _border_left
Definition: startmenu.h:237
int _submenu_id
Definition: startmenu.h:234
int _next_id
Definition: startmenu.h:230
enum StartMenu::SCROLL_MODE _scroll_mode
ShellFolder & GetDesktopFolder()
bool _floating_btn
Definition: startmenu.h:241
iterator end()
Definition: _list.h:370
bool _arrow_btns
Definition: startmenu.h:242
int _scroll_pos
Definition: startmenu.h:246
#define IDC_FIRST_MENU
Definition: desktopbar.h:64
int _invisible_lines
Definition: startmenu.h:247
ExtContextMenuHandlerT< OwnerDrawParent< DialogWindow > > super
Definition: startmenu.h:209
iconPos iconPos icon_size
Definition: startmenu.cpp:1416

◆ ~StartMenu()

StartMenu::~StartMenu ( )

Definition at line 100 of file startmenu.cpp.

101 {
103 }
#define PM_STARTMENU_CLOSED
Definition: startmenu.h:40
LRESULT SendParent(UINT nmsg, WPARAM wparam=0, LPARAM lparam=0)
Definition: window.cpp:657

Member Function Documentation

◆ ActivateEntry()

void StartMenu::ActivateEntry ( int  id,
const ShellEntrySet entries 
)
protected
Todo:
If the user explicitly clicked on a submenu, display this folder as floating start menu.
Todo:
launch in the background; specify correct HWND for error message box titles

Definition at line 1292 of file startmenu.cpp.

Referenced by Command().

1293 {
1294  StartMenuFolders new_folders;
1295  String title;
1296 
1297  for(ShellEntrySet::const_iterator it=entries.begin(); it!=entries.end(); ++it) {
1298  Entry* entry = const_cast<Entry*>(*it);
1299 
1300  if (entry->_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
1301 
1303 
1304  if (entry->_etype == ET_SHELL)
1305  new_folders.push_back(entry->create_absolute_pidl());
1306  else {
1307  TCHAR path[MAX_PATH];
1308 
1309  if (entry->get_path(path, COUNTOF(path)))
1310  new_folders.push_back(path);
1311  }
1312 
1313  if (title.empty())
1314  title = entry->_display_name;
1315  } else {
1316  // The entry is no subdirectory, so there can only be one shell entry.
1317  assert(entries.size()==1);
1318 
1319  HWND hparent = GetParent(_hwnd);
1320  ShellPath shell_path = entry->create_absolute_pidl();
1321 
1322  // close start menus when launching the selected entry
1323  CloseStartMenu(id);
1324 
1326  SHELLEXECUTEINFO shexinfo;
1327 
1328  shexinfo.cbSize = sizeof(SHELLEXECUTEINFO);
1329  shexinfo.fMask = SEE_MASK_IDLIST; // SEE_MASK_INVOKEIDLIST is also possible.
1330  shexinfo.hwnd = hparent;
1331  shexinfo.lpVerb = NULL;
1332  shexinfo.lpFile = NULL;
1333  shexinfo.lpParameters = NULL;
1334  shexinfo.lpDirectory = NULL;
1335  shexinfo.nShow = SW_SHOWNORMAL;
1336 
1337  shexinfo.lpIDList = &*shell_path;
1338 
1339  // add PIDL to the recent file list
1341 
1342  if (!ShellExecuteEx(&shexinfo))
1343  display_error(hparent, GetLastError());
1344 
1345  // we may have deleted 'this' - ensure we leave the loop and function
1346  return;
1347  }
1348  }
1349 
1350  if (!new_folders.empty()) {
1351  // Only open one submenu at a time.
1352  if (!CloseOtherSubmenus(id))
1353  return;
1354 
1355  CreateSubmenu(id, new_folders, title);
1356  }
1357 }
virtual void CloseStartMenu(int id=0)
close all windows of the start menu popup
Definition: startmenu.cpp:1361
virtual ShellPath create_absolute_pidl() const
Definition: entries.h:126
#define ShellExecuteEx
Definition: shellapi.h:680
void push_back(const_reference __x)
Definition: _list.h:509
void CreateSubmenu(int id, LPCTSTR title, CREATORFUNC_INFO creator=s_def_creator, void *info=NULL)
Definition: startmenu.cpp:1217
WIN32_FIND_DATA _data
Definition: entries.h:100
uint8_t entry
Definition: isohybrid.c:63
SHELLEXECUTEINFOA SHELLEXECUTEINFO
Definition: shellapi.h:667
#define assert(x)
Definition: debug.h:53
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
static WCHAR String[]
Definition: stringtable.c:55
virtual bool get_path(PTSTR path, size_t path_count) const =0
void WINAPI SHAddToRecentDocs(UINT uFlags, LPCVOID pv)
Definition: shellord.c:669
bool CloseOtherSubmenus(int id=0)
Definition: startmenu.cpp:1197
smooth NULL
Definition: ftsmooth.c:416
#define FILE_ATTRIBUTE_DIRECTORY
Definition: nt_native.h:705
char TCHAR
Definition: xmlstorage.h:189
ENTRY_TYPE _etype
Definition: entries.h:107
LPCSTR lpParameters
Definition: shellapi.h:312
#define MAX_PATH
Definition: compat.h:26
void display_error(HWND hwnd, DWORD error)
Definition: utility.cpp:98
size_type size() const
Definition: _set.h:160
iterator begin()
Definition: _set.h:151
LPCSTR lpDirectory
Definition: shellapi.h:313
HWND WINAPI GetParent(_In_ HWND)
#define SW_SHOWNORMAL
Definition: winuser.h:764
Definition: services.c:325
#define SEE_MASK_IDLIST
Definition: shellapi.h:27
iterator end()
Definition: _set.h:152
#define SHARD_PIDL
Definition: shlobj.h:1077
_Rep_type::const_iterator const_iterator
Definition: _set.h:74
bool empty() const
Definition: _list.h:177
#define COUNTOF(x)
Definition: utility.h:93
static char title[]
Definition: ps.c:92
wrapper class for item ID lists
Definition: shellclasses.h:651
base of all file and directory entries
Definition: entries.h:82
LPTSTR _display_name
Definition: entries.h:103

◆ AddButton()

void StartMenu::AddButton ( LPCTSTR  title,
ICON_ID  icon_id = ICID_NONE,
bool  hasSubmenu = false,
int  id = -1,
bool  enabled = true 
)
protected

Definition at line 1137 of file startmenu.cpp.

Referenced by StartMenuRoot::AddEntries(), SettingsMenu::AddEntries(), BrowseMenu::AddEntries(), SearchMenu::AddEntries(), FavoritesMenu::AddEntries(), Init(), and StartMenuRoot::Init().

1138 {
1139 #ifdef _LIGHT_STARTMENU
1140  _buttons.push_back(SMBtnInfo(title, icon_id, id, hasSubmenu, enabled));
1141 #else
1143 
1144  WindowRect rect(_hwnd);
1145  ClientRect clnt(_hwnd);
1146 
1147  // increase window height to make room for the new button
1149 
1150  // move down if we are too high now
1151  if (rect.top < 0) {
1154  }
1155 
1156  WindowCanvas canvas(_hwnd);
1157  FontSelection font(canvas, GetStockFont(DEFAULT_GUI_FONT));
1158 
1159  // widen window, if it is too small
1160  int text_width = GetStartMenuBtnTextWidth(canvas, title, _hwnd) + icon_size + 10/*placeholder*/ + 16/*arrow*/;
1161 
1162  int cx = clnt.right - _border_left;
1163  if (text_width > cx)
1164  rect.right += text_width-cx;
1165 
1166  MoveWindow(_hwnd, rect.left, rect.top, rect.right-rect.left, rect.bottom-rect.top, TRUE);
1167 
1168  StartMenuCtrl(_hwnd, _border_left, clnt.bottom, rect.right-rect.left-_border_left,
1169  title, id, g_Globals._icon_cache.get_icon(icon_id)._hIcon, hasSubmenu, style);
1170 #endif
1171 }
#define WS_DISABLED
Definition: pedump.c:621
#define BS_OWNERDRAW
Definition: pedump.c:661
#define TRUE
Definition: types.h:120
#define GetStockFont(i)
Definition: windowsx.h:283
Definition: mk_font.cpp:20
#define STARTMENU_LINE_HEIGHT(icon_size)
Definition: startmenu.h:34
#define WS_CHILD
Definition: pedump.c:617
GLenum GLenum GLsizei const GLuint GLboolean enabled
Definition: glext.h:7750
& rect
Definition: startmenu.cpp:1413
int _border_left
Definition: startmenu.h:237
unsigned long DWORD
Definition: ntddk_ex.h:95
#define DEFAULT_GUI_FONT
Definition: wingdi.h:907
int GetStartMenuBtnTextWidth(HDC hdc, LPCTSTR title, HWND hwnd)
Definition: startmenu.cpp:1371
ExplorerGlobals g_Globals
Definition: explorer.cpp:52
const Icon & get_icon(int icon_id)
Definition: explorer.cpp:625
BOOL WINAPI MoveWindow(_In_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ BOOL)
_Out_opt_ int * cx
Definition: commctrl.h:570
Arabic default style
Definition: afstyles.h:93
#define WS_VISIBLE
Definition: pedump.c:620
static char title[]
Definition: ps.c:92
IconCache _icon_cache
Definition: globals.h:285
iconPos iconPos icon_size
Definition: startmenu.cpp:1416

◆ AddEntries()

void StartMenu::AddEntries ( )
protectedvirtual

Reimplemented in FavoritesMenu, RecentStartMenu, SearchMenu, BrowseMenu, SettingsMenu, and StartMenuRoot.

Definition at line 209 of file startmenu.cpp.

Referenced by StartMenuRoot::AddEntries(), SettingsMenu::AddEntries(), BrowseMenu::AddEntries(), SearchMenu::AddEntries(), FavoritesMenu::AddEntries(), and Init().

210 {
211  for(StartMenuShellDirs::iterator it=_dirs.begin(); it!=_dirs.end(); ++it) {
212  StartMenuDirectory& smd = *it;
213  ShellDirectory& dir = smd._dir;
214 
215  if (!dir._scanned) {
216  WaitCursor wait;
217 
218 #ifdef _LAZY_ICONEXTRACT
219  dir.smart_scan(SORT_NAME, SCAN_DONT_EXTRACT_ICONS); // lazy icon extraction, try to read directly from filesystem
220 #else
221  dir.smart_scan(SORT_NAME);
222 #endif
223  }
224 
225  AddShellEntries(dir, -1, smd._ignore);
226  }
227 }
iterator begin()
Definition: _list.h:367
StartMenuShellDirs _dirs
Definition: startmenu.h:232
void AddShellEntries(const ShellDirectory &dir, int max=-1, const String &ignore="")
Definition: startmenu.cpp:243
shell folder entry
Definition: shellfs.h:53
unsigned int dir
Definition: maze.c:112
void smart_scan(SORT_ORDER sortOrder=SORT_NAME, int scan_flags=0)
Definition: entries.cpp:353
#define SORT_NAME
Definition: xpath.c:441
_STLP_PRIV _List_iterator< StartMenuDirectory, _Nonconst_traits< StartMenuDirectory > > iterator
Definition: _list.h:275
StartMenuDirectory is used to store the base directory of start menus.
Definition: startmenu.h:52
iterator end()
Definition: _list.h:370
ShellDirectory _dir
Definition: startmenu.h:64
bool _scanned
Definition: entries.h:97

◆ AddEntry() [1/4]

ShellEntryMap::iterator StartMenu::AddEntry ( const String title,
ICON_ID  icon_id,
Entry entry 
)
protected
Todo:
speed up by using a map indexed by name

Definition at line 1068 of file startmenu.cpp.

Referenced by AddEntry(), and AddShellEntries().

1069 {
1070  // search for an already existing subdirectory entry with the same name
1071  if (entry->_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
1072  {
1073  for(ShellEntryMap::iterator it=_entries.begin(); it!=_entries.end(); ++it) {
1074  StartMenuEntry& sme = it->second;
1075 
1076  if (!_tcsicmp(sme._title, title))
1077  {
1078  for(ShellEntrySet::iterator it2=sme._entries.begin(); it2!=sme._entries.end(); ++it2) {
1079  if ((*it2)->_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
1080  // merge the new shell entry with the existing of the same name
1081  sme._entries.insert(entry);
1082 
1083  return it;
1084  }
1085  }
1086  }
1087  }
1088  }
1089 
1090  ShellEntryMap::iterator sme = AddEntry(title, icon_id);
1091 
1092  sme->second._entries.insert(entry);
1093 
1094  return sme;
1095 }
ShellEntryMap::iterator AddEntry(const String &title, ICON_ID icon_id, Entry *entry)
Definition: startmenu.cpp:1068
WIN32_FIND_DATA _data
Definition: entries.h:100
#define _tcsicmp
Definition: xmlstorage.h:205
String _title
Definition: startmenu.h:76
pair< iterator, bool > insert(const value_type &__x)
Definition: _set.h:168
#define FILE_ATTRIBUTE_DIRECTORY
Definition: nt_native.h:705
_Rep_type::iterator iterator
Definition: _set.h:73
iterator begin()
Definition: _set.h:151
ShellEntrySet _entries
Definition: startmenu.h:78
ShellEntryMap _entries
Definition: startmenu.h:231
iterator end()
Definition: _set.h:152
structure holding information about one start menu entry
Definition: startmenu.h:72
iterator begin()
Definition: _map.h:163
static char title[]
Definition: ps.c:92
_Rep_type::iterator iterator
Definition: _map.h:85
iterator end()
Definition: _map.h:165

◆ AddEntry() [2/4]

ShellEntryMap::iterator StartMenu::AddEntry ( const String title,
ICON_ID  icon_id = ICID_NONE,
int  id = -1 
)
protected

Definition at line 1097 of file startmenu.cpp.

1098 {
1099  if (id == -1)
1100  id = ++_next_id;
1101 
1102  StartMenuEntry sme;
1103 
1104  sme._title = title;
1105  sme._icon_id = icon_id;
1106 
1107  ShellEntryMap::iterator it = _entries.insert(make_pair(id, sme)).first;
1108 
1109  return it;
1110 }
pair< _T1, _T2 > _STLP_CALL make_pair(_T1 __x, _T2 __y)
Definition: _pair.h:124
ICON_ID _icon_id
Definition: startmenu.h:77
String _title
Definition: startmenu.h:76
pair< iterator, bool > insert(const value_type &__x)
Definition: _map.h:188
int _next_id
Definition: startmenu.h:230
ShellEntryMap _entries
Definition: startmenu.h:231
structure holding information about one start menu entry
Definition: startmenu.h:72
static char title[]
Definition: ps.c:92
_Rep_type::iterator iterator
Definition: _map.h:85

◆ AddEntry() [3/4]

ShellEntryMap::iterator StartMenu::AddEntry ( const ShellFolder  folder,
ShellEntry entry 
)
protected

Definition at line 1112 of file startmenu.cpp.

1113 {
1114  ICON_ID icon_id;
1115 
1116  if (entry->_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
1117  icon_id = ICID_APPS;
1118  else
1119  icon_id = (ICON_ID)/*@@*/ entry->_icon_id;
1120 
1121  return AddEntry(folder.get_name(entry->_pidl), icon_id, entry);
1122 }
ShellEntryMap::iterator AddEntry(const String &title, ICON_ID icon_id, Entry *entry)
Definition: startmenu.cpp:1068
WIN32_FIND_DATA _data
Definition: entries.h:100
ICON_ID
Definition: globals.h:62
uint8_t entry
Definition: isohybrid.c:63
int _icon_id
Definition: entries.h:108
String get_name(LPCITEMIDLIST pidl, SHGDNF flags=SHGDN_NORMAL) const
#define FILE_ATTRIBUTE_DIRECTORY
Definition: nt_native.h:705
ShellPath _pidl
Definition: shellfs.h:44

◆ AddEntry() [4/4]

ShellEntryMap::iterator StartMenu::AddEntry ( const ShellFolder  folder,
Entry entry 
)
protected

Definition at line 1124 of file startmenu.cpp.

1125 {
1126  ICON_ID icon_id;
1127 
1128  if (entry->_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
1129  icon_id = ICID_APPS;
1130  else
1131  icon_id = (ICON_ID)/*@@*/ entry->_icon_id;
1132 
1133  return AddEntry(entry->_display_name, icon_id, entry);
1134 }
ShellEntryMap::iterator AddEntry(const String &title, ICON_ID icon_id, Entry *entry)
Definition: startmenu.cpp:1068
WIN32_FIND_DATA _data
Definition: entries.h:100
ICON_ID
Definition: globals.h:62
int _icon_id
Definition: entries.h:108
#define FILE_ATTRIBUTE_DIRECTORY
Definition: nt_native.h:705
LPTSTR _display_name
Definition: entries.h:103

◆ AddSeparator()

void StartMenu::AddSeparator ( )
protected

Definition at line 1173 of file startmenu.cpp.

Referenced by StartMenuRoot::Init().

1174 {
1175 #ifdef _LIGHT_STARTMENU
1176  _buttons.push_back(SMBtnInfo(NULL, ICID_NONE, -1, false));
1177 #else
1178  WindowRect rect(_hwnd);
1179  ClientRect clnt(_hwnd);
1180 
1181  // increase window height to make room for the new separator
1183 
1184  // move down if we are too high now
1185  if (rect.top < 0) {
1188  }
1189 
1190  MoveWindow(_hwnd, rect.left, rect.top, rect.right-rect.left, rect.bottom-rect.top, TRUE);
1191 
1192  StartMenuSeparator(_hwnd, _border_left, clnt.bottom, rect.right-rect.left-_border_left);
1193 #endif
1194 }
#define TRUE
Definition: types.h:120
#define STARTMENU_LINE_HEIGHT(icon_size)
Definition: startmenu.h:34
separator between start menu entries
Definition: startmenu.h:123
& rect
Definition: startmenu.cpp:1413
smooth NULL
Definition: ftsmooth.c:416
int _border_left
Definition: startmenu.h:237
BOOL WINAPI MoveWindow(_In_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ BOOL)
#define STARTMENU_SEP_HEIGHT(icon_size)
Definition: startmenu.h:35
iconPos iconPos icon_size
Definition: startmenu.cpp:1416

◆ AddShellEntries()

void StartMenu::AddShellEntries ( const ShellDirectory dir,
int  max = -1,
const String ignore = "" 
)
protected

Definition at line 243 of file startmenu.cpp.

Referenced by AddEntries(), and RecentStartMenu::AddEntries().

244 {
245  TCHAR ignore_path[MAX_PATH], ignore_dir[MAX_PATH], ignore_name[_MAX_FNAME], ignore_ext[_MAX_EXT];
246  TCHAR dir_path[MAX_PATH];
247 
248  if (!ignore.empty()) {
249  _tsplitpath_s(ignore, ignore_path, COUNTOF(ignore_path), ignore_dir, COUNTOF(ignore_dir), ignore_name, COUNTOF(ignore_name), ignore_ext, COUNTOF(ignore_ext));
250 
251  _tcscat(ignore_path, ignore_dir);
252  _tcscat(ignore_name, ignore_ext);
253 
254  dir.get_path(dir_path, COUNTOF(dir_path));
255 
256  if (_tcsicmp(trim_path_slash(dir_path), trim_path_slash(ignore_path)))
257  *ignore_name = '\0';
258  } else
259  *ignore_name = '\0';
260 
261  String lwr_filter = _create_info._filter;
262  lwr_filter.toLower();
263 
264  int cnt = 0;
265  for(Entry*entry=dir._down; entry; entry=entry->_next) {
266  // hide files like "desktop.ini"
267  if (entry->_shell_attribs & SFGAO_HIDDEN)
268  //not appropriate for drive roots: if (entry->_data.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN)
269  continue;
270 
271  // hide "Programs" subfolders if requested
272  if (*ignore_name && !_tcsicmp(entry->_data.cFileName, ignore_name))
273  continue;
274 
275  // only 'max' entries shall be added.
276  if (++cnt == max)
277  break;
278 
279  // filter only non-directory entries
280  if (!(entry->_data.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) && !lwr_filter.empty()) {
281  String lwr_name = entry->_data.cFileName;
282  String lwr_disp = entry->_display_name;
283 
284  lwr_name.toLower();
285  lwr_disp.toLower();
286 
287  if (!_tcsstr(lwr_name,lwr_filter) && !_tcsstr(lwr_disp,lwr_filter))
288  continue;
289  }
290 
291  if (entry->_etype == ET_SHELL)
292  AddEntry(dir._folder, static_cast<ShellEntry*>(entry));
293  else
294  AddEntry(dir._folder, entry);
295  }
296 }
ShellEntryMap::iterator AddEntry(const String &title, ICON_ID icon_id, Entry *entry)
Definition: startmenu.cpp:1068
#define max(a, b)
Definition: svc.c:63
#define _tsplitpath_s
Definition: tchar.h:687
#define _tcsicmp
Definition: xmlstorage.h:205
int ignore(int trapCode, ppc_trap_frame_t *trap)
Definition: mmuobject.c:296
uint8_t entry
Definition: isohybrid.c:63
static WCHAR String[]
Definition: stringtable.c:55
#define _MAX_FNAME
Definition: utility.h:74
StartMenuCreateInfo _create_info
Definition: startmenu.h:249
#define FILE_ATTRIBUTE_DIRECTORY
Definition: nt_native.h:705
#define _tcsstr
Definition: xmlstorage.h:199
char TCHAR
Definition: xmlstorage.h:189
Entry * _down
Definition: entries.h:93
#define MAX_PATH
Definition: compat.h:26
ShellFolder _folder
Definition: shellfs.h:112
#define _MAX_EXT
Definition: utility.h:76
_TCHAR * _tcscat(_TCHAR *s, const _TCHAR *append)
Definition: tcscat.h:8
virtual bool get_path(PTSTR path, size_t path_count) const
Definition: shellfs.cpp:155
#define COUNTOF(x)
Definition: utility.h:93
static LPTSTR trim_path_slash(LPTSTR path)
Definition: startmenu.cpp:230
base of all file and directory entries
Definition: entries.h:82

◆ CloseOtherSubmenus()

bool StartMenu::CloseOtherSubmenus ( int  id = 0)
protected

Definition at line 1197 of file startmenu.cpp.

Referenced by ActivateEntry(), FavoritesMenu::Command(), CreateSubmenu(), StartMenuRoot::ProcessKey(), and WndProc().

1198 {
1199  if (_submenu) {
1200  if (IsWindow(_submenu)) {
1201  if (_submenu_id == id)
1202  return false;
1203  else {
1204  _submenu_id = 0;
1206  // _submenu should be reset automatically by PM_STARTMENU_CLOSED, but safety first...
1207  }
1208  }
1209 
1210  _submenu = 0;
1211  }
1212 
1213  return true;
1214 }
BOOL WINAPI IsWindow(_In_opt_ HWND)
WindowHandle _submenu
Definition: startmenu.h:235
BOOL WINAPI DestroyWindow(_In_ HWND)
int _submenu_id
Definition: startmenu.h:234

◆ CloseStartMenu()

void StartMenu::CloseStartMenu ( int  id = 0)
protectedvirtual

close all windows of the start menu popup

Reimplemented in StartMenuRoot.

Definition at line 1361 of file startmenu.cpp.

Referenced by ActivateEntry(), Command(), and WndProc().

1362 {
1363  if (!(GetWindowStyle(_hwnd) & WS_CAPTION)) { // don't automatically close floating menus
1364  if (!SendParent(PM_STARTENTRY_LAUNCHED, id, (LPARAM)_hwnd))
1365  DestroyWindow(_hwnd);
1366  } else if (_submenu) // instead close submenus of floating parent menus
1367  CloseSubmenus();
1368 }
WindowHandle _submenu
Definition: startmenu.h:235
BOOL WINAPI DestroyWindow(_In_ HWND)
#define GetWindowStyle(hwnd)
Definition: windowsx.h:290
LONG_PTR LPARAM
Definition: windef.h:208
bool CloseSubmenus()
Definition: startmenu.h:286
#define WS_CAPTION
Definition: pedump.c:624
#define PM_STARTENTRY_LAUNCHED
Definition: startmenu.h:41
LRESULT SendParent(UINT nmsg, WPARAM wparam=0, LPARAM lparam=0)
Definition: window.cpp:657

◆ CloseSubmenus()

bool StartMenu::CloseSubmenus ( )
inlineprotected

Definition at line 286 of file startmenu.h.

Referenced by CloseStartMenu(), StartMenuRoot::CloseStartMenu(), and WndProc().

286 {return CloseOtherSubmenus();}
bool CloseOtherSubmenus(int id=0)
Definition: startmenu.cpp:1197

◆ Command()

int StartMenu::Command ( int  id,
int  code 
)
protectedvirtual

Reimplemented from Window.

Reimplemented in FavoritesMenu, StartMenuRoot, and StartMenuHandler.

Definition at line 1041 of file startmenu.cpp.

Referenced by WndProc().

1042 {
1043 #ifndef _LIGHT_STARTMENU
1044  switch(id) {
1045  case IDCANCEL:
1046  CloseStartMenu(id);
1047  break;
1048 
1049  default: {
1050 #endif
1052 
1053  if (found != _entries.end()) {
1054  ActivateEntry(id, found->second._entries);
1055  return 0;
1056  }
1057 
1058  return super::Command(id, code);
1059 #ifndef _LIGHT_STARTMENU
1060  }
1061  }
1062 
1063  return 0;
1064 #endif
1065 }
virtual void CloseStartMenu(int id=0)
close all windows of the start menu popup
Definition: startmenu.cpp:1361
void ActivateEntry(int id, const ShellEntrySet &entries)
Definition: startmenu.cpp:1292
_STLP_TEMPLATE_FOR_CONT_EXT iterator find(const _KT &__x)
Definition: _map.h:210
ShellEntryMap _entries
Definition: startmenu.h:231
virtual int Command(int id, int code)
Definition: window.cpp:285
#define IDCANCEL
Definition: winuser.h:825
_Rep_type::iterator iterator
Definition: _map.h:85
iterator end()
Definition: _map.h:165

◆ Create()

HWND StartMenu::Create ( int  x,
int  y,
const StartMenuFolders folders,
HWND  hwndParent,
LPCTSTR  title,
CREATORFUNC_INFO  creator = s_def_creator,
void info = NULL,
const String filter = "" 
)
static

Definition at line 118 of file startmenu.cpp.

Referenced by CreateSubmenu(), and WndProc().

120 {
121  UINT style, ex_style;
122  int top_height;
123 
124  if (hwndParent) {
126  ex_style = 0;
127  top_height = STARTMENU_TOP_BTN_SPACE;
128  } else {
130  ex_style = WS_EX_TOOLWINDOW;
131  top_height = 0;
132  }
133 
135  RECT rect = {x, y-STARTMENU_LINE_HEIGHT(icon_size)-top_height, x+STARTMENU_WIDTH_MIN, y};
136 
137 #ifndef _LIGHT_STARTMENU
138  rect.top += STARTMENU_LINE_HEIGHT(icon_size);
139 #endif
140 
141  AdjustWindowRectEx(&rect, style, FALSE, ex_style);
142 
143  StartMenuCreateInfo create_info;
144 
145  create_info._folders = folders;
146  create_info._border_top = top_height;
147  create_info._creator = creator;
148  create_info._info = info;
149  create_info._filter = filter;
150 
151  if (title)
152  create_info._title = title;
153 
154  HWND hwnd = Window::Create(creator, &create_info, ex_style, GetWndClasss(), title,
155  style, rect.left, rect.top, rect.right-rect.left, rect.bottom-rect.top, hwndParent);
156 
157  // make sure the window is not off the screen
158  MoveVisible(hwnd);
159 
160  return hwnd;
161 }
#define WS_THICKFRAME
Definition: pedump.c:630
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
StartMenuFolders _folders
Definition: startmenu.h:141
void MoveVisible(HWND hwnd)
Definition: utility.cpp:72
#define STARTMENU_LINE_HEIGHT(icon_size)
Definition: startmenu.h:34
LONG top
Definition: windef.h:297
BOOL WINAPI AdjustWindowRectEx(_Inout_ LPRECT, _In_ DWORD, _In_ BOOL, _In_ DWORD)
LONG left
Definition: windef.h:296
#define WS_CLIPCHILDREN
Definition: pedump.c:619
LONG right
Definition: windef.h:298
#define WS_EX_TOOLWINDOW
Definition: winuser.h:404
& rect
Definition: startmenu.cpp:1413
struct _test_info info[]
Definition: SetCursorPos.c:19
INT INT y
Definition: msvc.h:62
Window::CREATORFUNC_INFO _creator
Definition: startmenu.h:144
static BtnWindowClass & GetWndClasss()
Definition: startmenu.cpp:108
static HWND Create(CREATORFUNC creator, DWORD dwExStyle, LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int w, int h, HWND hwndParent=0, HMENU hMenu=0)
Definition: window.cpp:87
#define WS_CAPTION
Definition: pedump.c:624
unsigned int UINT
Definition: ndis.h:50
#define ICON_SIZE_SMALL
Definition: globals.h:169
iconPos x
Definition: startmenu.cpp:1416
structor containing information for creating of start menus
Definition: startmenu.h:137
#define STARTMENU_WIDTH_MIN
Definition: startmenu.h:33
INT x
Definition: msvc.h:62
#define STARTMENU_TOP_BTN_SPACE
Definition: startmenu.h:36
#define WS_POPUP
Definition: pedump.c:616
LONG bottom
Definition: windef.h:299
Arabic default style
Definition: afstyles.h:93
#define WS_VISIBLE
Definition: pedump.c:620
#define WS_SYSMENU
Definition: pedump.c:629
static char title[]
Definition: ps.c:92
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
Definition: glext.h:7005
iconPos iconPos icon_size
Definition: startmenu.cpp:1416

◆ CreateSubmenu() [1/4]

void StartMenu::CreateSubmenu ( int  id,
LPCTSTR  title,
CREATORFUNC_INFO  creator = s_def_creator,
void info = NULL 
)
protected

Definition at line 1217 of file startmenu.cpp.

Referenced by ActivateEntry(), StartMenuHandler::Command(), FavoritesMenu::Command(), and CreateSubmenu().

1218 {
1219  CreateSubmenu(id, StartMenuFolders(), title, creator, info);
1220 }
void CreateSubmenu(int id, LPCTSTR title, CREATORFUNC_INFO creator=s_def_creator, void *info=NULL)
Definition: startmenu.cpp:1217
list< ShellPath > StartMenuFolders
Definition: startmenu.h:134
static char title[]
Definition: ps.c:92

◆ CreateSubmenu() [2/4]

bool StartMenu::CreateSubmenu ( int  id,
int  folder,
LPCTSTR  title,
CREATORFUNC_INFO  creator = s_def_creator,
void info = NULL 
)
protected

Definition at line 1222 of file startmenu.cpp.

1223 {
1224  try {
1225  SpecialFolderPath folder(folder_id, _hwnd);
1226 
1227  StartMenuFolders new_folders;
1228  new_folders.push_back(folder);
1229 
1230  CreateSubmenu(id, new_folders, title, creator, info);
1231 
1232  return true;
1233  } catch(COMException&) {
1234  // ignore Exception and don't display anything
1235  CloseOtherSubmenus(id);
1236  _buttons[GetSelectionIndex()]._enabled = false; // disable entries for non-existing folders
1237  return false;
1238  }
1239 }
void push_back(const_reference __x)
Definition: _list.h:509
void CreateSubmenu(int id, LPCTSTR title, CREATORFUNC_INFO creator=s_def_creator, void *info=NULL)
Definition: startmenu.cpp:1217
Definition: fci.c:115
Retrieval of special shell folder paths.
Definition: shellclasses.h:981
Exception with context information.
Definition: shellclasses.h:113
bool CloseOtherSubmenus(int id=0)
Definition: startmenu.cpp:1197
struct CFFOLDER folder
Definition: fdi.c:110
static char title[]
Definition: ps.c:92

◆ CreateSubmenu() [3/4]

bool StartMenu::CreateSubmenu ( int  id,
int  folder1,
int  folder2,
LPCTSTR  title,
CREATORFUNC_INFO  creator = s_def_creator,
void info = NULL 
)
protected

Definition at line 1241 of file startmenu.cpp.

1242 {
1243  StartMenuFolders new_folders;
1244 
1245  try {
1246  new_folders.push_back(SpecialFolderPath(folder_id1, _hwnd));
1247  } catch(COMException&) {
1248  }
1249 
1250  try {
1251  new_folders.push_back(SpecialFolderPath(folder_id2, _hwnd));
1252  } catch(COMException&) {
1253  }
1254 
1255  if (!new_folders.empty()) {
1256  CreateSubmenu(id, new_folders, title, creator, info);
1257  return true;
1258  } else {
1259  CloseOtherSubmenus(id);
1260  _buttons[GetSelectionIndex()]._enabled = false; // disable entries for non-existing folders
1261  return false;
1262  }
1263 }
void push_back(const_reference __x)
Definition: _list.h:509
void CreateSubmenu(int id, LPCTSTR title, CREATORFUNC_INFO creator=s_def_creator, void *info=NULL)
Definition: startmenu.cpp:1217
Retrieval of special shell folder paths.
Definition: shellclasses.h:981
Exception with context information.
Definition: shellclasses.h:113
bool CloseOtherSubmenus(int id=0)
Definition: startmenu.cpp:1197
bool empty() const
Definition: _list.h:177
static char title[]
Definition: ps.c:92

◆ CreateSubmenu() [4/4]

void StartMenu::CreateSubmenu ( int  id,
const StartMenuFolders new_folders,
LPCTSTR  title,
CREATORFUNC_INFO  creator = s_def_creator,
void info = NULL 
)
protected

Definition at line 1265 of file startmenu.cpp.

1266 {
1267  // Only open one submenu at a time.
1268  if (!CloseOtherSubmenus(id))
1269  return;
1270 
1271  RECT rect;
1272  int x, y;
1273 
1274  if (GetButtonRect(id, &rect)) {
1275  ClientToScreen(_hwnd, &rect);
1276 
1277  x = rect.right; // Submenus should overlap their parent a bit.
1278  const int icon_size = _icon_size;
1279  y = rect.top+STARTMENU_LINE_HEIGHT(icon_size) +_border_top/*own border*/ -STARTMENU_TOP_BTN_SPACE/*border of new submenu*/;
1280  } else {
1281  WindowRect pos(_hwnd);
1282 
1283  x = pos.right;
1284  y = pos.top;
1285  }
1286 
1287  _submenu_id = id;
1288  _submenu = StartMenu::Create(x, y, new_folders, _hwnd, title, creator, info, _create_info._filter);
1289 }
BOOL WINAPI ClientToScreen(_In_ HWND, _Inout_ LPPOINT)
int _icon_size
Definition: startmenu.h:251
int _border_top
Definition: startmenu.h:238
#define STARTMENU_LINE_HEIGHT(icon_size)
Definition: startmenu.h:34
WindowHandle _submenu
Definition: startmenu.h:235
LONG top
Definition: windef.h:297
LONG right
Definition: windef.h:298
& rect
Definition: startmenu.cpp:1413
bool CloseOtherSubmenus(int id=0)
Definition: startmenu.cpp:1197
iconPos iconPos y
Definition: startmenu.cpp:1416
StartMenuCreateInfo _create_info
Definition: startmenu.h:249
bool GetButtonRect(int id, PRECT prect) const
Definition: startmenu.cpp:781
int _submenu_id
Definition: startmenu.h:234
iconPos x
Definition: startmenu.cpp:1416
static HWND Create(int x, int y, const StartMenuFolders &, HWND hwndParent, LPCTSTR title, CREATORFUNC_INFO creator=s_def_creator, void *info=NULL, const String &filter="")
Definition: startmenu.cpp:118
#define STARTMENU_TOP_BTN_SPACE
Definition: startmenu.h:36
GLenum GLuint id
Definition: glext.h:5579
static char title[]
Definition: ps.c:92
iconPos iconPos icon_size
Definition: startmenu.cpp:1416

◆ DrawArrows()

void StartMenu::DrawArrows ( HDC  hdc,
int  icon_size 
)
protected

Definition at line 835 of file startmenu.cpp.

Referenced by Paint().

836 {
837  int cx = icon_size / 2;
838  int cy = icon_size / 4;
839 
840  ResIconEx arrowUpIcon(IDI_ARROW_UP, cx, cy);
841  ResIconEx arrowDownIcon(IDI_ARROW_DOWN, cx, cy);
842 
843  ClientRect clnt(_hwnd);
844 
845  DrawIconEx(hdc, clnt.right/2-cx/2, _floating_btn?3:1, arrowUpIcon, cx, cy, 0, 0, DI_NORMAL);
846  DrawIconEx(hdc, clnt.right/2-cx/2, clnt.bottom-cy-1, arrowDownIcon, cx, cy, 0, 0, DI_NORMAL);
847 }
#define IDI_ARROW_DOWN
Definition: resource.h:119
_Out_opt_ int _Out_opt_ int * cy
Definition: commctrl.h:570
HDC hdc
Definition: msvc.h:53
convenient loading of icon resources with specified sizes
Definition: globals.h:331
BOOL WINAPI DrawIconEx(_In_ HDC, _In_ int, _In_ int, _In_ HICON, _In_ int, _In_ int, _In_ UINT, _In_opt_ HBRUSH, _In_ UINT)
Definition: cursoricon.c:1997
#define IDI_ARROW_UP
Definition: resource.h:118
#define DI_NORMAL
Definition: wingdi.h:72
bool _floating_btn
Definition: startmenu.h:241
_Out_opt_ int * cx
Definition: commctrl.h:570
iconPos iconPos icon_size
Definition: startmenu.cpp:1416

◆ DrawFloatingButton()

void StartMenu::DrawFloatingButton ( HDC  hdc)
protected

Definition at line 816 of file startmenu.cpp.

Referenced by Paint().

817 {
818  static ResIconEx floatingIcon(IDI_FLOATING, 8, 4);
819 
820  ClientRect clnt(_hwnd);
821 
822  DrawIconEx(hdc, clnt.right-12, 0, floatingIcon, 8, 4, 0, 0, DI_NORMAL);
823 }
#define IDI_FLOATING
Definition: resource.h:80
HDC hdc
Definition: msvc.h:53
convenient loading of icon resources with specified sizes
Definition: globals.h:331
BOOL WINAPI DrawIconEx(_In_ HDC, _In_ int, _In_ int, _In_ HICON, _In_ int, _In_ int, _In_ UINT, _In_opt_ HBRUSH, _In_ UINT)
Definition: cursoricon.c:1997
#define DI_NORMAL
Definition: wingdi.h:72

◆ GetArrowButtonRects()

void StartMenu::GetArrowButtonRects ( LPRECT  prect_up,
LPRECT  prect_down,
int  icon_size 
)
protected

Definition at line 849 of file startmenu.cpp.

Referenced by WndProc().

850 {
851  int cx = icon_size / 2;
852  int cy = icon_size / 4;
853 
854  GetClientRect(_hwnd, prect_up);
855  *prect_down = *prect_up;
856 
857 // prect_up->left = prect_up->right/2 - cx/2;
858 // prect_up->right = prect_up->left + cy;
859  prect_up->right -= cx;
860  prect_up->top = _floating_btn? cy-1: 1;
861  prect_up->bottom = prect_up->top + cy;
862 
863 // prect_down->left = prect_down->right/2 - cx/2;
864 // prect_down->right = prect_down->left + cy;
865  prect_down->right -= cx;
866  prect_down->top = prect_down->bottom - cy - 1;
867 }
LONG top
Definition: windef.h:297
LONG right
Definition: windef.h:298
_Out_opt_ int _Out_opt_ int * cy
Definition: commctrl.h:570
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
bool _floating_btn
Definition: startmenu.h:241
_Out_opt_ int * cx
Definition: commctrl.h:570
LONG bottom
Definition: windef.h:299
iconPos iconPos icon_size
Definition: startmenu.cpp:1416

◆ GetButtonRect()

bool StartMenu::GetButtonRect ( int  id,
PRECT  prect 
) const
protected

Definition at line 781 of file startmenu.cpp.

Referenced by CreateSubmenu(), and Paint().

782 {
783 #ifdef _LIGHT_STARTMENU
784  ClientRect clnt(_hwnd);
785  const int icon_size = _icon_size;
786  RECT rect = {_border_left, _border_top, clnt.right, STARTMENU_LINE_HEIGHT(icon_size)};
787 
788  for(SMBtnVector::const_iterator it=_buttons.begin()+_scroll_pos; it!=_buttons.end(); ++it) {
789  const SMBtnInfo& info = *it;
790 
791  rect.bottom = rect.top + (info._id==-1? STARTMENU_SEP_HEIGHT(icon_size): STARTMENU_LINE_HEIGHT(icon_size));
792 
793  if (info._id == id) {
794  *prect = rect;
795  return true;
796  }
797 
798  rect.top = rect.bottom;
799  }
800 
801  return false;
802 #else
803  HWND btn = GetDlgItem(_hwnd, id);
804 
805  if (btn) {
806  GetWindowRect(btn, prect);
807  ScreenToClient(_hwnd, prect);
808 
809  return true;
810  } else
811  return false;
812 #endif
813 }
int _icon_size
Definition: startmenu.h:251
int _border_top
Definition: startmenu.h:238
#define STARTMENU_LINE_HEIGHT(icon_size)
Definition: startmenu.h:34
LONG top
Definition: windef.h:297
& rect
Definition: startmenu.cpp:1413
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
int _border_left
Definition: startmenu.h:237
int _scroll_pos
Definition: startmenu.h:246
LONG bottom
Definition: windef.h:299
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
#define STARTMENU_SEP_HEIGHT(icon_size)
Definition: startmenu.h:35
BOOL WINAPI ScreenToClient(_In_ HWND, _Inout_ LPPOINT)
iconPos iconPos icon_size
Definition: startmenu.cpp:1416

◆ GetFloatingButtonRect()

void StartMenu::GetFloatingButtonRect ( LPRECT  prect)
protected

Definition at line 825 of file startmenu.cpp.

Referenced by WndProc().

826 {
827  GetClientRect(_hwnd, prect);
828 
829  prect->right -= 4;
830  prect->left = prect->right - 8;
831  prect->bottom = 4;
832 }
LONG left
Definition: windef.h:296
LONG right
Definition: windef.h:298
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
LONG bottom
Definition: windef.h:299

◆ GetWndClasss()

BtnWindowClass & StartMenu::GetWndClasss ( )
staticprotected

Definition at line 108 of file startmenu.cpp.

Referenced by Create(), and StartMenuRoot::Create().

109 {
110  static BtnWindowClass s_wcStartMenu(CLASSNAME_STARTMENU);
111 
112  return s_wcStartMenu;
113 }
window class with gray background color
Definition: window.h:248
#define CLASSNAME_STARTMENU
Definition: startmenu.h:29

◆ Init()

LRESULT StartMenu::Init ( LPCREATESTRUCT  pcs)
protectedvirtual

Reimplemented from Window.

Reimplemented in StartMenuRoot.

Definition at line 164 of file startmenu.cpp.

Referenced by StartMenuRoot::Init().

165 {
166  try {
167  AddEntries();
168 
169  if (super::Init(pcs))
170  return 1;
171 
172  // create buttons for registered entries in _entries
173  for(ShellEntryMap::const_iterator it=_entries.begin(); it!=_entries.end(); ++it) {
174  const StartMenuEntry& sme = it->second;
175  bool hasSubmenu = false;
176 
177  for(ShellEntrySet::const_iterator it=sme._entries.begin(); it!=sme._entries.end(); ++it)
178  if ((*it)->_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
179  hasSubmenu = true;
180 
181 #ifdef _LIGHT_STARTMENU
182  _buttons.push_back(SMBtnInfo(sme, it->first, hasSubmenu));
183 #else
184  AddButton(sme._title, sme._hIcon, hasSubmenu, it->first);
185 #endif
186  }
187 
188 #ifdef _LIGHT_STARTMENU
189  if (_buttons.empty())
190 #else
191  if (!GetWindow(_hwnd, GW_CHILD))
192 #endif
193  AddButton(ResString(IDS_EMPTY), ICID_NONE, false, 0, false);
194 
195 #ifdef _LIGHT_STARTMENU
196  ResizeToButtons();
197 #endif
198 
199 #ifdef _LAZY_ICONEXTRACT
200  PostMessage(_hwnd, PM_UPDATE_ICONS, 0, 0);
201 #endif
202  } catch(COMException& e) {
203  HandleException(e, pcs->hwndParent); // destroys the start menu window while switching focus
204  }
205 
206  return 0;
207 }
#define GW_CHILD
Definition: winuser.h:758
virtual LRESULT Init(LPCREATESTRUCT pcs)
Definition: window.cpp:241
_Rep_type::const_iterator const_iterator
Definition: _map.h:86
#define PM_UPDATE_ICONS
Definition: startmenu.h:47
Exception with context information.
Definition: shellclasses.h:113
virtual void AddEntries()
Definition: startmenu.cpp:209
String _title
Definition: startmenu.h:76
#define e
Definition: ke_i.h:82
#define FILE_ATTRIBUTE_DIRECTORY
Definition: nt_native.h:705
#define PostMessage
Definition: winuser.h:5698
void HandleException(COMException &e, HWND hwnd)
Exception Handler for COM exceptions.
HWND WINAPI GetWindow(_In_ HWND, _In_ UINT)
void AddButton(LPCTSTR title, ICON_ID icon_id=ICID_NONE, bool hasSubmenu=false, int id=-1, bool enabled=true)
Definition: startmenu.cpp:1137
iterator begin()
Definition: _set.h:151
ShellEntrySet _entries
Definition: startmenu.h:78
#define IDS_EMPTY
Definition: resource.h:17
ShellEntryMap _entries
Definition: startmenu.h:231
iterator end()
Definition: _set.h:152
_Rep_type::const_iterator const_iterator
Definition: _set.h:74
structure holding information about one start menu entry
Definition: startmenu.h:72
convenient loading of string resources
Definition: globals.h:303
iterator begin()
Definition: _map.h:163
iterator end()
Definition: _map.h:165

◆ Paint()

void StartMenu::Paint ( PaintCanvas &  canvas)
protected

Definition at line 870 of file startmenu.cpp.

Referenced by StartMenuRoot::Paint(), and WndProc().

871 {
872  if (_floating_btn)
873  DrawFloatingButton(canvas);
874 
875 #ifdef _LIGHT_STARTMENU
876  if (_arrow_btns)
877  DrawArrows(canvas, _icon_size);
878 
879  ClientRect clnt(_hwnd);
880  const int icon_size = _icon_size;
881  RECT rect = {_border_left, _border_top, clnt.right, STARTMENU_LINE_HEIGHT(icon_size)};
882 
883  int sep_width = rect.right-rect.left - 4;
884 
885  FontSelection font(canvas, GetStockFont(DEFAULT_GUI_FONT));
886  BkMode bk_mode(canvas, TRANSPARENT);
887 
888  for(SMBtnVector::const_iterator it=_buttons.begin()+_scroll_pos; it!=_buttons.end(); ++it) {
889  const SMBtnInfo& btn = *it;
890 
891  if (rect.top > canvas.rcPaint.bottom)
892  break;
893 
894  if (btn._id == -1) { // a separator?
895  rect.bottom = rect.top + STARTMENU_SEP_HEIGHT(icon_size);
896 
897  if (rect.bottom > _bottom_max)
898  break;
899 
900  BrushSelection brush_sel(canvas, GetSysColorBrush(COLOR_BTNSHADOW));
901  PatBlt(canvas, rect.left+2, rect.top+STARTMENU_SEP_HEIGHT(icon_size)/2-1, sep_width, 1, PATCOPY);
902 
904  PatBlt(canvas, rect.left+2, rect.top+STARTMENU_SEP_HEIGHT(icon_size)/2, sep_width, 1, PATCOPY);
905  } else {
906  rect.bottom = rect.top + STARTMENU_LINE_HEIGHT(icon_size);
907 
908  if (rect.bottom > _bottom_max)
909  break;
910 
911  if (rect.top >= canvas.rcPaint.top)
912  DrawStartMenuButton(canvas, rect, btn._title, btn, btn._id==_selected_id, false, _icon_size);
913  }
914 
915  rect.top = rect.bottom;
916  }
917 #endif
918 }
int _icon_size
Definition: startmenu.h:251
#define GetStockFont(i)
Definition: windowsx.h:283
void DrawFloatingButton(HDC hdc)
Definition: startmenu.cpp:816
Definition: mk_font.cpp:20
int _border_top
Definition: startmenu.h:238
#define STARTMENU_LINE_HEIGHT(icon_size)
Definition: startmenu.h:34
LONG top
Definition: windef.h:297
#define COLOR_BTNHIGHLIGHT
Definition: winuser.h:925
LONG left
Definition: windef.h:296
LONG right
Definition: windef.h:298
& rect
Definition: startmenu.cpp:1413
BOOL WINAPI PatBlt(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ DWORD)
void DrawStartMenuButton(HDC hdc, const RECT &rect, LPCTSTR title, HICON hIcon, bool hasSubmenu, bool enabled, bool has_focus, bool pushed, int icon_size)
void DrawArrows(HDC hdc, int icon_size)
Definition: startmenu.cpp:835
#define TRANSPARENT
Definition: wingdi.h:948
int _bottom_max
Definition: startmenu.h:239
int _border_left
Definition: startmenu.h:237
#define DEFAULT_GUI_FONT
Definition: wingdi.h:907
#define PATCOPY
Definition: wingdi.h:333
bool _floating_btn
Definition: startmenu.h:241
#define COLOR_BTNSHADOW
Definition: winuser.h:920
bool _arrow_btns
Definition: startmenu.h:242
int _scroll_pos
Definition: startmenu.h:246
LONG bottom
Definition: windef.h:299
#define SelectBrush(hdc, hbr)
Definition: windowsx.h:485
#define STARTMENU_SEP_HEIGHT(icon_size)
Definition: startmenu.h:35
HBRUSH WINAPI GetSysColorBrush(_In_ int)
iconPos iconPos icon_size
Definition: startmenu.cpp:1416

◆ ResizeButtons()

void StartMenu::ResizeButtons ( int  cx)
protected

Definition at line 1019 of file startmenu.cpp.

Referenced by WndProc().

1020 {
1021  HDWP hdwp = BeginDeferWindowPos(10);
1022 
1024  ClientRect rt(ctrl);
1025 
1026  if (rt.right != cx) {
1027  int height = rt.bottom - rt.top;
1028 
1029  // special handling for separator controls
1030  if (!height && (GetWindowStyle(ctrl)&SS_TYPEMASK)==SS_ETCHEDHORZ)
1031  height = 2;
1032 
1033  hdwp = DeferWindowPos(hdwp, ctrl, 0, 0, 0, cx, height, SWP_NOMOVE|SWP_NOZORDER|SWP_NOACTIVATE);
1034  }
1035  }
1036 
1037  EndDeferWindowPos(hdwp);
1038 }
#define GW_HWNDNEXT
Definition: winuser.h:756
HDWP WINAPI BeginDeferWindowPos(_In_ int)
#define GW_CHILD
Definition: winuser.h:758
#define GetNextWindow(h, c)
Definition: winuser.h:4596
#define SS_TYPEMASK
Definition: winuser.h:362
#define SWP_NOZORDER
Definition: winuser.h:1232
#define GetWindowStyle(hwnd)
Definition: windowsx.h:290
BOOL WINAPI EndDeferWindowPos(_In_ HDWP)
#define ctrl
Definition: input.c:1669
#define SS_ETCHEDHORZ
Definition: winuser.h:343
HDWP WINAPI DeferWindowPos(_In_ HDWP, _In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
#define SWP_NOACTIVATE
Definition: winuser.h:1227
HWND WINAPI GetWindow(_In_ HWND, _In_ UINT)
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
_Out_opt_ int * cx
Definition: commctrl.h:570
#define SWP_NOMOVE
Definition: winuser.h:1229

◆ UpdateIcons()

void StartMenu::UpdateIcons ( )
protected

Referenced by Paint(), and WndProc().

◆ WndProc()

LRESULT StartMenu::WndProc ( UINT  nmsg,
WPARAM  wparam,
LPARAM  lparam 
)
protectedvirtual
Todo:
do something similar to StartMenuRoot::TrackStartmenu() in order to automatically close submenus when clicking on the desktop background
Todo:
use TrackMouseEvent() and WM_MOUSEHOVER to wait a bit before opening submenus

Reimplemented from Window.

Reimplemented in StartMenuRoot.

Definition at line 299 of file startmenu.cpp.

Referenced by StartMenuRoot::WndProc().

300 {
301  switch(nmsg) {
302  case WM_PAINT: {
303  PaintCanvas canvas(_hwnd);
304  Paint(canvas);
305  break;}
306 
307  case WM_SIZE:
309  break;
310 
311  case WM_MOVE: {
312  POINTS pos;
313  pos.x = LOWORD(lparam);
314  pos.y = HIWORD(lparam);
315 
316  // move open submenus of floating menus
317  if (_submenu) {
318  int dx = pos.x - _last_pos.x;
319  int dy = pos.y - _last_pos.y;
320 
321  if (dx || dy) {
322  WindowRect rt(_submenu);
323  SetWindowPos(_submenu, 0, rt.left+dx, rt.top+dy, 0, 0, SWP_NOSIZE|SWP_NOACTIVATE);
324  //MoveVisible(_submenu);
325  }
326  }
327 
328  _last_pos.x = pos.x;
329  _last_pos.y = pos.y;
330  goto def;}
331 
332  case WM_NCHITTEST: {
334 
335  if (res>=HTSIZEFIRST && res<=HTSIZELAST)
336  return HTCLIENT; // disable window resizing
337 
338  return res;}
339 
340  case WM_LBUTTONDOWN: {
341  RECT rect;
342 
343  // check mouse cursor for coordinates of floating button
344  GetFloatingButtonRect(&rect);
345 
346  if (PtInRect(&rect, Point(lparam))) {
347  // create a floating copy of the current start menu
348  WindowRect pos(_hwnd);
349 
352  CloseStartMenu();
353  }
354 
355 #ifdef _LIGHT_STARTMENU
356  int id = ButtonHitTest(Point(lparam));
357 
358  if (id)
359  Command(id, BN_CLICKED);
360 #endif
361  break;}
362 
363  case WM_SYSCOMMAND:
364  if ((wparam&0xFFF0) == SC_SIZE)
365  return 0; // disable window resizing
366  goto def;
367 
368  case WM_ACTIVATEAPP:
369  // close start menu when activating another application
370  if (!wparam)
371  CloseStartMenu();
372  break; // don't call super::WndProc in case "this" has been deleted
373 
374  case WM_CANCELMODE:
375  CloseStartMenu();
376 
377 #ifdef _LIGHT_STARTMENU
378  if (_scroll_mode != SCROLL_NOT) {
379  ReleaseCapture();
380  KillTimer(_hwnd, 0);
381  }
382 #endif
383  break;
384 
385 #ifdef _LIGHT_STARTMENU
386  case WM_MOUSEMOVE: {
387  // automatically set the focus to startmenu entries when moving the mouse over them
388  if (lparam != _last_mouse_pos) { // don't process WM_MOUSEMOVE when opening submenus using keyboard navigation
389  Point pt(lparam);
390 
391  if (_arrow_btns) {
392  RECT rect_up, rect_down;
393 
394  GetArrowButtonRects(&rect_up, &rect_down, _icon_size);
395 
396  SCROLL_MODE scroll_mode = SCROLL_NOT;
397 
398  if (PtInRect(&rect_up, pt))
399  scroll_mode = SCROLL_UP;
400  else if (PtInRect(&rect_down, pt))
401  scroll_mode = SCROLL_DOWN;
402 
403  if (scroll_mode != _scroll_mode) {
404  if (scroll_mode == SCROLL_NOT) {
405  ReleaseCapture();
406  KillTimer(_hwnd, 0);
407  } else {
408  CloseSubmenus();
409  SetTimer(_hwnd, 0, 150, NULL); // 150 ms scroll interval
410  SetCapture(_hwnd);
411  }
412 
413  _scroll_mode = scroll_mode;
414  }
415  }
416 
417  int new_id = ButtonHitTest(pt);
418 
419  if (new_id>0 && new_id!=_selected_id)
420  SelectButton(new_id);
421 
422  _last_mouse_pos = lparam;
423  }
424  break;}
425 
426  case WM_TIMER:
427  if (_scroll_mode == SCROLL_UP) {
428  if (_scroll_pos > 0) {
429  --_scroll_pos;
430  InvalidateRect(_hwnd, NULL, TRUE);
431  }
432  } else {
433  if (_scroll_pos <= _invisible_lines) {
434  ++_scroll_pos;
435  InvalidateRect(_hwnd, NULL, TRUE);
436  }
437  }
438  break;
439 
440  case WM_KEYDOWN:
441  ProcessKey(wparam);
442  break;
443 #else
444  case PM_STARTENTRY_FOCUSED: {
445  BOOL hasSubmenu = wparam;
446  HWND hctrl = (HWND)lparam;
447 
448  // automatically open submenus
449  if (hasSubmenu) {
450  UpdateWindow(_hwnd); // draw focused button before waiting on submenu creation
451  //SendMessage(_hwnd, WM_COMMAND, MAKEWPARAM(GetDlgCtrlID(hctrl),BN_CLICKED), (LPARAM)hctrl);
453  } else {
454  // close any open submenu
456  }
457  break;}
458 #endif
459 
460 #ifdef _LAZY_ICONEXTRACT
461  case PM_UPDATE_ICONS:
462  UpdateIcons(/*wparam*/);
463  break;
464 #endif
465 
467  if (GetWindowStyle(_hwnd) & WS_CAPTION) // don't automatically close floating menus
468  return 0;
469 
470  // route message to the parent menu and close menus after launching an entry
471  if (!SendParent(nmsg, wparam, lparam))
472  CloseStartMenu();
473  return 1; // signal that we have received and processed the message
474 
475  case PM_STARTMENU_CLOSED:
476  _submenu = 0;
477  break;
478 
479  case PM_SELECT_ENTRY:
480  SelectButtonIndex(0, wparam!=0);
481  break;
482 
483 #ifdef _LIGHT_STARTMENU
484  case WM_CONTEXTMENU: {
485  Point screen_pt(lparam), clnt_pt=screen_pt;
486  ScreenToClient(_hwnd, &clnt_pt);
487 
488  int id = ButtonHitTest(clnt_pt);
489 
490  if (id) {
491  StartMenuEntry& sme = _entries[id];
492 
493  for(ShellEntrySet::iterator it=sme._entries.begin(); it!=sme._entries.end(); ++it) {
494  Entry* entry = *it;
495 
496  if (entry) {
497  CHECKERROR(entry->do_context_menu(_hwnd, screen_pt, _cm_ifs)); // may close start menu because of focus loss
499  break;
500  }
501  }
502  }
503  break;}
504 #endif
505 
506  default: def:
507  return super::WndProc(nmsg, wparam, lparam);
508  }
509 
510  return 0;
511 }
virtual void CloseStartMenu(int id=0)
close all windows of the start menu popup
Definition: startmenu.cpp:1361
StartMenuFolders _folders
Definition: startmenu.h:141
#define TRUE
Definition: types.h:120
long y
Definition: polytest.cpp:48
#define WM_CONTEXTMENU
Definition: richedit.h:64
#define WM_LBUTTONDOWN
Definition: winuser.h:1752
int _icon_size
Definition: startmenu.h:251
long x
Definition: polytest.cpp:48
#define pt(x, y)
Definition: drawing.c:79
uint8_t entry
Definition: isohybrid.c:63
WindowHandle _submenu
Definition: startmenu.h:235
BOOL WINAPI UpdateWindow(_In_ HWND)
HANDLE HWND
Definition: compat.h:13
#define WM_MOVE
Definition: winuser.h:1592
#define WM_NCHITTEST
Definition: winuser.h:1668
POINT _last_pos
Definition: startmenu.h:244
virtual HRESULT do_context_menu(HWND hwnd, const POINT &pos, CtxMenuInterfaces &cm_ifs)
Definition: entries.cpp:519
#define PM_STARTMENU_CLOSED
Definition: startmenu.h:40
& rect
Definition: startmenu.cpp:1413
#define PM_UPDATE_ICONS
Definition: startmenu.h:47
#define GetWindowStyle(hwnd)
Definition: windowsx.h:290
Window::CREATORFUNC_INFO _creator
Definition: startmenu.h:144
int WINAPI GetDlgCtrlID(_In_ HWND)
void ResizeButtons(int cx)
Definition: startmenu.cpp:1019
bool CloseOtherSubmenus(int id=0)
Definition: startmenu.cpp:1197
bool CloseSubmenus()
Definition: startmenu.h:286
void GetFloatingButtonRect(LPRECT prect)
Definition: startmenu.cpp:825
smooth NULL
Definition: ftsmooth.c:416
#define WM_KEYDOWN
Definition: winuser.h:1691
SHORT x
Definition: windef.h:332
int Command(int id, int code)
Definition: startmenu.cpp:1041
StartMenuCreateInfo _create_info
Definition: startmenu.h:249
#define CHECKERROR(hr)
Definition: shellclasses.h:162
#define HTSIZEFIRST
Definition: winuser.h:2442
UINT_PTR WINAPI SetTimer(_In_opt_ HWND, _In_ UINT_PTR, _In_ UINT, _In_opt_ TIMERPROC)
#define WS_CAPTION
Definition: pedump.c:624
unsigned int BOOL
Definition: ntddk_ex.h:94
void UpdateIcons()
#define WM_SIZE
Definition: winuser.h:1593
int _border_left
Definition: startmenu.h:237
#define SWP_NOACTIVATE
Definition: winuser.h:1227
_Rep_type::iterator iterator
Definition: _set.h:73
#define WM_TIMER
Definition: winuser.h:1718
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
#define PM_SELECT_ENTRY
Definition: startmenu.h:48
#define BN_CLICKED
Definition: winuser.h:1886
#define WM_PAINT
Definition: winuser.h:1602
BOOL WINAPI KillTimer(_In_opt_ HWND, _In_ UINT_PTR)
LRESULT WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam)
struct Point Point
enum StartMenu::SCROLL_MODE _scroll_mode
#define WM_CANCELMODE
Definition: winuser.h:1617
static HWND Create(int x, int y, const StartMenuFolders &, HWND hwndParent, LPCTSTR title, CREATORFUNC_INFO creator=s_def_creator, void *info=NULL, const String &filter="")
Definition: startmenu.cpp:118
iterator begin()
Definition: _set.h:151
UINT WPARAM LPARAM lparam
Definition: msvc.h:92
#define SWP_NOSIZE
Definition: winuser.h:1230
SHORT y
Definition: windef.h:333
HWND WINAPI SetCapture(_In_ HWND hWnd)
#define WM_ACTIVATEAPP
Definition: winuser.h:1614
INT INT dy
Definition: msvc.h:65
#define SC_SIZE
Definition: winuser.h:2538
ShellEntrySet _entries
Definition: startmenu.h:78
#define WM_MOUSEMOVE
Definition: winuser.h:1751
bool _arrow_btns
Definition: startmenu.h:242
ShellEntryMap _entries
Definition: startmenu.h:231
BOOL WINAPI PtInRect(_In_ LPCRECT, _In_ POINT)
int _scroll_pos
Definition: startmenu.h:246
BOOL WINAPI ReleaseCapture(void)
Definition: message.c:2864
GLuint res
Definition: glext.h:9613
iterator end()
Definition: _set.h:152
void Paint(PaintCanvas &canvas)
Definition: startmenu.cpp:870
#define HIWORD(l)
Definition: typedefs.h:246
GLenum GLuint id
Definition: glext.h:5579
#define PM_STARTENTRY_LAUNCHED
Definition: startmenu.h:41
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
LRESULT SendParent(UINT nmsg, WPARAM wparam=0, LPARAM lparam=0)
Definition: window.cpp:657
int _invisible_lines
Definition: startmenu.h:247
structure holding information about one start menu entry
Definition: startmenu.h:72
#define HTCLIENT
Definition: winuser.h:2429
BOOL WINAPI ScreenToClient(_In_ HWND, _Inout_ LPPOINT)
LONG_PTR LRESULT
Definition: windef.h:209
void GetArrowButtonRects(LPRECT prect_up, LPRECT prect_down, int icon_size)
Definition: startmenu.cpp:849
#define PM_STARTENTRY_FOCUSED
Definition: startmenu.h:44
#define WM_SYSCOMMAND
Definition: winuser.h:1717
#define LOWORD(l)
Definition: pedump.c:82
base of all file and directory entries
Definition: entries.h:82
#define HTSIZELAST
Definition: winuser.h:2450
UINT WPARAM wparam
Definition: msvc.h:92
INT dx
Definition: msvc.h:65

Member Data Documentation

◆ _arrow_btns

bool StartMenu::_arrow_btns
protected

Definition at line 242 of file startmenu.h.

Referenced by if(), Paint(), StartMenu(), and WndProc().

◆ _border_left

int StartMenu::_border_left
protected

◆ _border_top

int StartMenu::_border_top
protected

Definition at line 238 of file startmenu.h.

Referenced by CreateSubmenu(), GetButtonRect(), if(), Paint(), StartMenu(), and WndProc().

◆ _bottom_max

int StartMenu::_bottom_max
protected

Definition at line 239 of file startmenu.h.

Referenced by if(), Paint(), StartMenu(), and WndProc().

◆ _create_info

StartMenuCreateInfo StartMenu::_create_info
protected

Definition at line 249 of file startmenu.h.

Referenced by FavoritesMenu::AddEntries(), AddShellEntries(), CreateSubmenu(), and WndProc().

◆ _dirs

StartMenuShellDirs StartMenu::_dirs
protected

◆ _entries

ShellEntryMap StartMenu::_entries
protected

◆ _floating_btn

bool StartMenu::_floating_btn
protected

Definition at line 241 of file startmenu.h.

Referenced by DrawArrows(), GetArrowButtonRects(), if(), Paint(), and StartMenu().

◆ _icon_size

int StartMenu::_icon_size
protected

◆ _invisible_lines

int StartMenu::_invisible_lines
protected

Definition at line 247 of file startmenu.h.

Referenced by if(), StartMenu(), and WndProc().

◆ _last_pos

POINT StartMenu::_last_pos
protected

Definition at line 244 of file startmenu.h.

Referenced by StartMenu(), and WndProc().

◆ _next_id

int StartMenu::_next_id
protected

Definition at line 230 of file startmenu.h.

Referenced by FavoritesMenu::AddEntries(), AddEntry(), and StartMenu().

◆ _scroll_mode

enum StartMenu::SCROLL_MODE StartMenu::_scroll_mode
protected

Referenced by StartMenu(), and WndProc().

◆ _scroll_pos

int StartMenu::_scroll_pos
protected

Definition at line 246 of file startmenu.h.

Referenced by GetButtonRect(), Paint(), StartMenu(), and WndProc().

◆ _submenu

WindowHandle StartMenu::_submenu
protected

◆ _submenu_id

int StartMenu::_submenu_id
protected

Definition at line 234 of file startmenu.h.

Referenced by CloseOtherSubmenus(), CreateSubmenu(), and StartMenu().

◆ s_def_creator

Window::CREATORFUNC_INFO StartMenu::s_def_creator = STARTMENU_CREATOR(StartMenu)
static

Definition at line 218 of file startmenu.h.

Referenced by GetWndClasss().


The documentation for this struct was generated from the following files: