LRESULT menu_wndproc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { switch (msg) { case WM_INITMENUPOPUP: { HMENU hmenu = (HMENU)wparam; struct menu_item* item; MENUINFO mi; mi.cbSize = sizeof(mi); mi.fMask = MIM_MENUDATA; GetMenuInfo(hmenu, &mi); item = (struct menu_item*)mi.dwMenuData; if (item) fill_menu(item); return 0; } break; case WM_MENUCOMMAND: { HMENU hmenu = (HMENU)lparam; struct menu_item* item; MENUITEMINFOW mii; mii.cbSize = sizeof(mii); mii.fMask = MIIM_DATA|MIIM_ID; GetMenuItemInfoW(hmenu, wparam, TRUE, &mii); item = (struct menu_item*)mii.dwItemData; if (item) exec_item(item); else if (mii.wID == MENU_ID_RUN) run_dialog(); destroy_menus(); return 0; } } return DefWindowProcW(hwnd, msg, wparam, lparam); }
/** * \brief Cleans Lua. */ void LuaContext::exit() { if(l != NULL) { //Call kq.main.on_finished() if it exists main_on_finished(); //Destroy unfinished objects destroy_menus(); destroy_timers(); destroy_drawables(); //Finalize lua lua_close(l); lua_contexts.erase(l); l = NULL; } }
void do_startmenu(HWND hwnd) { LPITEMIDLIST pidl; MENUINFO mi; MENUITEMINFOW mii; RECT rc={0,0,0,0}; TPMPARAMS tpm; WCHAR run_label[50]; destroy_menus(); WINE_TRACE("creating start menu\n"); root_menu.menuhandle = public_startmenu.menuhandle = user_startmenu.menuhandle = CreatePopupMenu(); if (!root_menu.menuhandle) { return; } user_startmenu.parent = public_startmenu.parent = &root_menu; user_startmenu.base = &public_startmenu; user_startmenu.menu_filled = public_startmenu.menu_filled = FALSE; if (!user_startmenu.pidl) SHGetSpecialFolderLocation(NULL, CSIDL_STARTMENU, &user_startmenu.pidl); if (!user_startmenu.folder) pidl_to_shellfolder(user_startmenu.pidl, NULL, &user_startmenu.folder); if (!public_startmenu.pidl) SHGetSpecialFolderLocation(NULL, CSIDL_COMMON_STARTMENU, &public_startmenu.pidl); if (!public_startmenu.folder) pidl_to_shellfolder(public_startmenu.pidl, NULL, &public_startmenu.folder); fill_menu(&user_startmenu); AppendMenuW(root_menu.menuhandle, MF_SEPARATOR, 0, NULL); if (SUCCEEDED(SHGetSpecialFolderLocation(NULL, CSIDL_CONTROLS, &pidl))) add_shell_item(&root_menu, pidl); LoadStringW(NULL, IDS_RUN, run_label, sizeof(run_label)/sizeof(run_label[0])); mii.cbSize = sizeof(mii); mii.fMask = MIIM_STRING|MIIM_ID; mii.dwTypeData = run_label; mii.wID = MENU_ID_RUN; InsertMenuItemW(root_menu.menuhandle, -1, TRUE, &mii); mi.cbSize = sizeof(mi); mi.fMask = MIM_STYLE; mi.dwStyle = MNS_NOTIFYBYPOS; SetMenuInfo(root_menu.menuhandle, &mi); GetWindowRect(hwnd, &rc); tpm.cbSize = sizeof(tpm); tpm.rcExclude = rc; if (!TrackPopupMenuEx(root_menu.menuhandle, TPM_LEFTALIGN|TPM_BOTTOMALIGN|TPM_VERTICAL, rc.left, rc.top, hwnd, &tpm)) { WINE_ERR("couldn't display menu\n"); } }