Windows NT 4.0 source code leak
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.
 
 
 
 
 
 

162 lines
2.9 KiB

#include "help.h"
#pragma hdrstop
#include "inc\frstuff.h"
//#include <dll.h>
typedef struct {
INT16 ifcm;
INT16 ifr;
} ETF, *QETF;
#define fETFFirst 0
#define fETFNext 1
#define FFirstPaletteObj(qde, qetf) FEnumPaletteObj(qde, qetf, fETFFirst)
#define FNextPaletteObj(qde, qetf) FEnumPaletteObj(qde, qetf, fETFNext)
static BOOL STDCALL FEnumPaletteObj(QDE qde, QETF qetf, INT16 fCmd);
static HPALETTE STDCALL HpalGetPaletteQetf(QDE qde, QETF qetf);
__inline static HPALETTE STDCALL HpalGetWindowPalette(HIW hiw);
HPALETTE STDCALL HpalGetBestPalette(HDE hde)
{
ETF etf;
HPALETTE hpalRet;
QDE qde = QdeFromGh(hde);
if (FFirstPaletteObj(qde, &etf))
hpalRet = HpalGetPaletteQetf(qde, &etf);
else
hpalRet = NULL;
return hpalRet;
}
static BOOL STDCALL FEnumPaletteObj(QDE qde, QETF qetf, INT16 fCmd)
{
IFCM ifcm;
INT16 ifr;
BOOL fFound;
ASSERT(qde->wLayoutMagic == wLayMagicValue);
ASSERT(qetf != NULL);
AccessMRD(((QMRD)&qde->mrdFCM));
switch (fCmd) {
case fETFFirst:
ifcm = IFooFirstMRD((QMRD)&qde->mrdFCM);
ifr = 0;
break;
case fETFNext:
ifcm = qetf->ifcm;
ifr = qetf->ifr;
break;
default:
NotReached();
break;
}
fFound = FALSE;
while (ifcm != FOO_NIL)
{
QFCM qfcm;
QFR qfr;
qfcm = (QFCM)QFooInMRD(((QMRD)&qde->mrdFCM), sizeof(FCM), ifcm);
ASSERT(qfcm != NULL);
if (qfcm->cfr == 0)
goto next_fcm;
if (fCmd == fETFNext) {
++ifr;
if (ifr >= qfcm->cfr)
goto next_fcm;
}
ASSERT(ifr < qfcm->cfr);
qfr = (QFR) PtrFromGh(qfcm->hfr);
qfr += ifr;
while (!fFound && ifr < qfcm->cfr) {
switch (qfr->bType) {
case bFrTypeWindow:
qetf->ifcm = ifcm;
qetf->ifr = ifr;
fFound = TRUE;
break;
default:
break;
}
++qfr;
++ifr;
}
if (fFound)
break;
next_fcm:
ifcm = IFooNextMRD(((QMRD)&qde->mrdFCM), sizeof(FCM), ifcm);
ifr = 0;
}
DeAccessMRD((QMRD)&qde->mrdFCM);
return fFound;
}
static HPALETTE STDCALL HpalGetPaletteQetf(QDE qde, QETF qetf)
{
HPALETTE hpal;
QFCM qfcm;
QFR qfr;
ASSERT(qde->wLayoutMagic == wLayMagicValue);
ASSERT(qetf != NULL);
AccessMRD((QMRD)&qde->mrdFCM);
qfcm = (QFCM)QFooInMRD(((QMRD)&qde->mrdFCM), sizeof(FCM), qetf->ifcm);
ASSERT(qfcm != NULL);
ASSERT(qetf->ifr < qfcm->cfr);
qfr = (QFR) PtrFromGh(qfcm->hfr);
qfr += qetf->ifr;
switch (qfr->bType) {
case bFrTypeWindow:
hpal = HpalGetWindowPalette(qfr->u.frw.hiw);
break;
default:
hpal = NULL;
break;
}
DeAccessMRD((QMRD)&qde->mrdFCM);
return hpal;
}
/***************************************************************************
*
- Name:
-
* Purpose:
*
* Arguments:
*
* Returns:
*
* Globals Used:
*
* +++
*
* Notes:
*
***************************************************************************/
__inline static HPALETTE STDCALL HpalGetWindowPalette(HIW hiw)
{
if (hiw.hwnd == NULL || hiw.hwnd == (HWND) -1)
return NULL;
return (HPALETTE) SendMessage(hiw.hwnd, EWM_ASKPALETTE, 0, 0);
}