void CWnd::OnHelp() // use context to derive help context { // attempt to get help from whoever is tracking HWND hWnd = ::GetCapture(); while (hWnd != NULL) { // attempt to process help if (::SendMessage(hWnd, WM_COMMANDHELP, 0, 0)) return; // check next parent/owner in the parent/owner chain hWnd = AfxGetParentOwner(hWnd); } // attempt to get help from whoever has the focus hWnd = ::GetFocus(); while (hWnd != NULL) { // attempt to process help if (::SendMessage(hWnd, WM_COMMANDHELP, 0, 0)) return; // check next parent/owner in the parent/owner chain hWnd = AfxGetParentOwner(hWnd); } // attempt to get help from the active window CWnd* pWnd = GetTopLevelParent(); hWnd = ::GetLastActivePopup(pWnd->GetSafeHwnd()); while (hWnd != NULL) { // attempt to process help if (::SendMessage(hWnd, WM_COMMANDHELP, 0, 0)) return; // check next parent/owner in the parent/owner chain hWnd = AfxGetParentOwner(hWnd); } // No context available, bring up default. SendMessage(WM_COMMAND, ID_DEFAULT_HELP); }
void CWnd::OnHelp() // use context to derive help context { // attempt to map current context to help topic CWnd* pWnd = GetTopLevelParent(); HWND hWnd = ::GetLastActivePopup(pWnd->GetSafeHwnd()); while (hWnd != NULL) { // attempt to process help if (::SendMessage(hWnd, WM_COMMANDHELP, 0, 0)) break; // check next parent/owner in the parent/owner chain hWnd = AfxGetParentOwner(hWnd); } if (hWnd == NULL) { // No context available, bring up default. SendMessage(WM_COMMAND, ID_DEFAULT_HELP); } }