You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
2.2 KiB
70 lines
2.2 KiB
/****************************** Module Header ******************************\
|
|
* Module Name: help.c
|
|
*
|
|
* Copyright (c) 1985 - 1999, Microsoft Corporation
|
|
*
|
|
* This module contains the various rectangle manipulation APIs.
|
|
*
|
|
* History:
|
|
* 23-May-95 BradG Created for Kernel mode
|
|
\***************************************************************************/
|
|
|
|
BOOL FIsParentDude(PWND pwnd)
|
|
{
|
|
return(TestWF(pwnd, WEFCONTROLPARENT) || TestWF(pwnd, WFDIALOGWINDOW) ||
|
|
((TestWF(pwnd, BFTYPEMASK) == BS_GROUPBOX) &&
|
|
IS_BUTTON(pwnd)));
|
|
}
|
|
|
|
|
|
/***************************************************************************\
|
|
* GetContextHelpId()
|
|
* Given a pwnd, this returns the Help Context Id for that window;
|
|
* Note: If a window does not have a Context Id of its own, then it inherits
|
|
* the ContextId of it's parent, if it is a child window; else, from its owner,
|
|
* it is a owned popup.
|
|
\***************************************************************************/
|
|
|
|
DWORD GetContextHelpId(
|
|
PWND pwnd)
|
|
{
|
|
DWORD dwContextId;
|
|
|
|
while (!(dwContextId = (DWORD)(ULONG_PTR)_GetProp(pwnd,
|
|
MAKEINTATOM(gpsi->atomContextHelpIdProp), PROPF_INTERNAL))) {
|
|
pwnd = (TestwndChild(pwnd) ?
|
|
REBASEPWND(pwnd, spwndParent) :
|
|
REBASEPWND(pwnd, spwndOwner));
|
|
if (!pwnd || (GETFNID(pwnd) == FNID_DESKTOP))
|
|
break;
|
|
}
|
|
|
|
return dwContextId;
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
* Dialog Child enumeration proc
|
|
*
|
|
* Enumerates children of a dialog looking for the child under the mouse.
|
|
*
|
|
*/
|
|
BOOL CALLBACK EnumPwndDlgChildProc(PWND pwnd, LPARAM lParam)
|
|
{
|
|
PDLGENUMDATA pDlgEnumData = (PDLGENUMDATA)lParam;
|
|
|
|
if (pwnd != pDlgEnumData->pwndDialog && IsVisible(pwnd) &&
|
|
PtInRect(KPRECT_TO_PRECT(&pwnd->rcWindow), pDlgEnumData->ptCurHelp)) {
|
|
/*
|
|
* If it's a group box, keep enumerating. This takes care of
|
|
* the case where we have a disabled control in a group box.
|
|
* We'll find the group box first, and keep enumerating until we
|
|
* hit the disabled control.
|
|
*/
|
|
pDlgEnumData->pwndControl = pwnd;
|
|
return (FIsParentDude(pwnd));
|
|
}
|
|
return TRUE;
|
|
}
|