71 lines
1.9 KiB
C
71 lines
1.9 KiB
C
/****************************** 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) ||
|
|
((GETFNID(pwnd) == FNID_BUTTON) &&
|
|
(TestWF(pwnd, BFTYPEMASK) == BS_GROUPBOX)));
|
|
}
|
|
|
|
|
|
/*
|
|
* 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(&((WND *)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;
|
|
}
|