// TearoffMenu.cpp // // Revision Log // // Date Who SAR Notes // ========== === ======= ===================================== // 2002-01-08 mph Initial coding by Mark Henri of // MPH Software - markhenri@attbi.com // // #include "TearoffMenu.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CTearoffMenu::CTearoffMenu() { } CTearoffMenu::CTearoffMenu(HINSTANCE i, HWND hwnd, UINT mid, int x, int y, UINT flags) { Run(i, hwnd, mid, x, y, flags); } CTearoffMenu::CTearoffMenu(HINSTANCE i, HWND hwnd, UINT mid, HWND hButton, UINT flags) { Run(i, hwnd, mid, hButton, flags); } CTearoffMenu::~CTearoffMenu() { } void CTearoffMenu::Run(HINSTANCE i, HWND hwnd, UINT mid, HWND hButton, UINT flags) { RECT rt; ::GetWindowRect(hButton, &rt); int x = rt.left +((rt.right - rt.left) / 4); int y = rt.top +((rt.bottom - rt.top) / 2); Run(i, hwnd, mid, x, y, flags); } void CTearoffMenu::Run(HINSTANCE i, HWND hwnd, UINT mid, int x, int y, UINT flags) { HMENU hmenu = ::LoadMenu(i, MAKEINTRESOURCE(mid)); if (hmenu) { HMENU hsubmenu = ::GetSubMenu(hmenu, 0); if (hsubmenu) { ::TrackPopupMenu(hsubmenu, flags, x, y, 0, hwnd, NULL); DestroyMenu(hsubmenu); // do it anyway... } DestroyMenu(hmenu); // recursive; does submenus also } }