80 lines
2.1 KiB
C
80 lines
2.1 KiB
C
|
// UsrCtl32.cpp : Defines the entry point for the DLL application.
|
||
|
//
|
||
|
|
||
|
#include "ctlspriv.h"
|
||
|
#pragma hdrstop
|
||
|
#include "UsrCtl32.h"
|
||
|
|
||
|
#define AWS_MASK (BS_TYPEMASK | BS_RIGHT | BS_RIGHTBUTTON | \
|
||
|
WS_HSCROLL | WS_VSCROLL | SS_TYPEMASK)
|
||
|
|
||
|
VOID AlterWindowStyle(HWND hwnd, DWORD mask, DWORD flags)
|
||
|
{
|
||
|
ULONG ulStyle;
|
||
|
|
||
|
if (mask & ~AWS_MASK)
|
||
|
{
|
||
|
TraceMsg(TF_STANDARD, "AlterWindowStyle: bad mask %x", mask);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
ulStyle = GetWindowStyle(hwnd);
|
||
|
mask &= AWS_MASK;
|
||
|
ulStyle = (ulStyle & (~mask)) | (flags & mask);
|
||
|
|
||
|
SetWindowLong(hwnd, GWL_STYLE, ulStyle);
|
||
|
}
|
||
|
|
||
|
|
||
|
LONG TestWF(HWND hwnd, DWORD flag)
|
||
|
{
|
||
|
LPDWORD pdwWW;
|
||
|
|
||
|
// GWLP_WOWWORDS returns a pointer to the WW struct in the hwnd.
|
||
|
// We're interest in the first four DWORDS: state, state2,
|
||
|
// ExStyle (exposed, although not all bits, by GetWindowExStyle),
|
||
|
// and style (exposed by GetWindowStyle).
|
||
|
//
|
||
|
// The parameter flag, contains information on how to pick the field
|
||
|
// we want and how to build the WS_xxx or WS_EX_xxx we want to
|
||
|
// check for.
|
||
|
//
|
||
|
// See UsrCtl32.h for more details on how this is done.
|
||
|
//
|
||
|
pdwWW = (LPDWORD)GetWindowLongPtr(hwnd, GWLP_WOWWORDS);
|
||
|
if ( pdwWW )
|
||
|
{
|
||
|
INT iField; // the field we want
|
||
|
INT iShift; // how many bytes to shift flag
|
||
|
LONG ulMask; // WS_xxx or WS_EX_xxx flag
|
||
|
|
||
|
iField = ( HIBYTE(flag) & 0xFC ) >> 2;
|
||
|
iShift = HIBYTE(flag) & 0x03;
|
||
|
ulMask = LOBYTE(flag) << (iShift << 3);
|
||
|
|
||
|
ASSERT( 0 <= iField && iField < 4 );
|
||
|
return pdwWW[iField] & ulMask;
|
||
|
};
|
||
|
|
||
|
return 0;
|
||
|
|
||
|
}
|
||
|
|
||
|
UINT GetACPCharSet()
|
||
|
{
|
||
|
static UINT charset = (UINT)~0;
|
||
|
CHARSETINFO csInfo;
|
||
|
|
||
|
if (charset != (UINT)~0) {
|
||
|
return charset;
|
||
|
}
|
||
|
|
||
|
// Sundown: In the TCI_SRCCODEPAGE case, the GetACP() return value is zero-extended.
|
||
|
if (!TranslateCharsetInfo((DWORD*)UIntToPtr( GetACP() ), &csInfo, TCI_SRCCODEPAGE)) {
|
||
|
return DEFAULT_CHARSET;
|
||
|
}
|
||
|
charset = csInfo.ciCharset;
|
||
|
UserAssert(charset != (UINT)~0);
|
||
|
return csInfo.ciCharset;
|
||
|
}
|