NVDA Helper
In-process and lite high-speed utilities for NVDA
gdiHooks.cpp File Reference
#include <vector>
#include <algorithm>
#include <optional>
#include <map>
#include <set>
#include <list>
#include <windows.h>
#include <usp10.h>
#include "nvdaHelperRemote.h"
#include "dllmain.h"
#include <common/apiHook.h>
#include "displayModel.h"
#include <common/log.h>
#include <remote/nvdaControllerInternal.h>
#include <common/lock.h>
#include "gdiHooks.h"

Go to the source code of this file.

Classes

class  TextInsertionTracker
 
class  GlyphTranslator
 
class  GlyphTranslatorCache
 
class  hookClass_TextOut< charType >
 
class  hookClass_PolyTextOut< WA_POLYTEXT >
 
class  hookClass_ExtTextOut< charType >
 
struct  ScriptStringAnalyseArgs_t
 

Typedefs

typedef int(WINAPI * FillRect_funcType) (HDC, const RECT *, HBRUSH)
 
typedef BOOL(WINAPI * DrawFocusRect_funcType) (HDC, const RECT *)
 
typedef BOOL(WINAPI * PatBlt_funcType) (HDC, int, int, int, int, DWORD)
 
typedef HDC(WINAPI * BeginPaint_funcType) (HWND, LPPAINTSTRUCT)
 
typedef HDC(WINAPI * CreateCompatibleDC_funcType) (HDC)
 
typedef HGDIOBJ(WINAPI * SelectObject_funcType) (HDC, HGDIOBJ)
 
typedef BOOL(WINAPI * DeleteDC_funcType) (HDC)
 
typedef BOOL(WINAPI * BitBlt_funcType) (HDC, int, int, int, int, HDC, int, int, DWORD)
 
typedef BOOL(WINAPI * StretchBlt_funcType) (HDC, int, int, int, int, HDC, int, int, int, int, DWORD)
 
typedef BOOL(WINAPI * GdiTransparentBlt_funcType) (HDC, int, int, int, int, HDC, int, int, int, int, UINT)
 
typedef map< SCRIPT_STRING_ANALYSIS, ScriptStringAnalyseArgs_tScriptStringAnalyseArgsByAnalysis_t
 
typedef HRESULT(WINAPI * ScriptStringAnalyse_funcType) (HDC, const void *, int, int, int, DWORD, int, SCRIPT_CONTROL *, SCRIPT_STATE *, const int *, SCRIPT_TABDEF *, const BYTE *, SCRIPT_STRING_ANALYSIS *)
 
typedef HRESULT(WINAPI * ScriptStringFree_funcType) (SCRIPT_STRING_ANALYSIS *)
 
typedef HRESULT(WINAPI * ScriptStringOut_funcType) (SCRIPT_STRING_ANALYSIS, int, int, UINT, const RECT *, int, int, BOOL)
 
typedef HRESULT(WINAPI * ScriptTextOut_funcType) (const HDC, SCRIPT_CACHE *, int, int, UINT, const RECT *, const SCRIPT_ANALYSIS *, const WCHAR *, int, const WORD *, int, const int *, const int *, const GOFFSET *)
 
typedef BOOL(WINAPI * ScrollWindow_funcType) (HWND, int, int, const RECT *, const RECT *)
 
typedef BOOL(WINAPI * ScrollWindowEx_funcType) (HWND, int, int, const RECT *, const RECT *, HRGN, LPRECT, UINT)
 
typedef BOOL(WINAPI * DestroyWindow_funcType) (HWND)
 

Functions

size_t WA_strlen (const char *str)
 
size_t WA_strlen (const wchar_t *str)
 
char * WA_strncpy (char *dest, const char *source, size_t size)
 
wchar_t * WA_strncpy (wchar_t *dest, const wchar_t *source, size_t size)
 
void CALLBACK textChangeNotifyTimerProc (HWND hwnd, UINT msg, UINT_PTR timerID, DWORD time)
 
void queueTextChangeNotify (HWND hwnd, RECT &rc)
 
displayModel_tacquireDisplayModel (HDC hdc, BOOL noCreate=FALSE)
 Fetches and or creates a new displayModel for the window of the given device context.
 
void dcPointsToScreenPoints (HDC hdc, POINT *points, int count, bool relative)
 converts given points from dc coordinates to screen coordinates.
 
void swapBuffer (WORD *array, int length)
 
std::vector< BYTE > getTTFData (HDC hdc, const char *tableName)
 
std::pair< std::vector< POINT >, SIZE > calcCharExtentsVecFromLpdx (const int cbCount, const int *lpdx, const TEXTMETRIC &tm, const UINT &fuOptions, const HDC &hdc)
 
std::pair< std::vector< POINT >, SIZE > calcCharExtentsVec (const int cbCount, const TEXTMETRIC &tm, const bool fromGlyphs, const HDC &hdc, const wchar_t *lpString, std::wstring &newText)
 
void ExtTextOutHelper (displayModel_t *model, HDC hdc, int x, int y, const RECT *lprc, UINT fuOptions, UINT textAlign, BOOL stripHotkeyIndicator, const wchar_t *lpString, const int codePage, const int *lpdx, int cbCount, LPSIZE resultTextSize, int direction)
 Given a displayModel, this function clears a rectangle, and inserts a chunk, for the given text, using the given offsets and rectangle etc.
 
void ExtTextOutHelper (displayModel_t *model, HDC hdc, int x, int y, const RECT *lprc, UINT fuOptions, UINT textAlign, BOOL stripHotkeyIndicator, const char *lpString, const int codePage, const int *lpdx, int cbCount, LPSIZE resultTextSize, int direction)
 an overload of ExtTextOutHelper to work with ansi strings.
 
int WINAPI fake_FillRect (HDC hdc, const RECT *lprc, HBRUSH hBrush)
 
BOOL WINAPI fake_DrawFocusRect (HDC hdc, const RECT *lprc)
 
BOOL WINAPI fake_PatBlt (HDC hdc, int nxLeft, int nxTop, int nWidth, int nHeight, DWORD dwRop)
 
HDC WINAPI fake_BeginPaint (HWND hwnd, LPPAINTSTRUCT lpPaint)
 
HDC WINAPI fake_CreateCompatibleDC (HDC hdc)
 
HGDIOBJ WINAPI fake_SelectObject (HDC hdc, HGDIOBJ hGdiObj)
 
BOOL WINAPI fake_DeleteDC (HDC hdc)
 
void StretchBlt_helper (HDC hdcDest, int nXDest, int nYDest, int nWidthDest, int nHeightDest, HDC hdcSrc, int nXSrc, int nYSrc, int nWidthSrc, int nHeightSrc, DWORD dwRop)
 
BOOL WINAPI fake_BitBlt (HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, HDC hdcSrc, int nXSrc, int nYSrc, DWORD dwRop)
 
BOOL WINAPI fake_StretchBlt (HDC hdcDest, int nXDest, int nYDest, int nWidthDest, int nHeightDest, HDC hdcSrc, int nXSrc, int nYSrc, int nWidthSrc, int nHeightSrc, DWORD dwRop)
 
BOOL WINAPI fake_GdiTransparentBlt (HDC hdcDest, int nXDest, int nYDest, int nWidthDest, int nHeightDest, HDC hdcSrc, int nXSrc, int nYSrc, int nWidthSrc, int nHeightSrc, UINT crTransparent)
 
int charSetToCodePage (int charset)
 
HRESULT WINAPI fake_ScriptStringAnalyse (HDC hdc, const void *pString, int cString, int cGlyphs, int iCharset, DWORD dwFlags, int iRectWidth, SCRIPT_CONTROL *psControl, SCRIPT_STATE *psState, const int *piDx, SCRIPT_TABDEF *pTabdef, const BYTE *pbInClass, SCRIPT_STRING_ANALYSIS *pssa)
 
HRESULT WINAPI fake_ScriptStringFree (SCRIPT_STRING_ANALYSIS *pssa)
 
HRESULT WINAPI fake_ScriptStringOut (SCRIPT_STRING_ANALYSIS ssa, int iX, int iY, UINT uOptions, const RECT *prc, int iMinSel, int iMaxSel, BOOL fDisabled)
 
HRESULT WINAPI fake_ScriptTextOut (const HDC hdc, SCRIPT_CACHE *psc, int x, int y, UINT fuOptions, const RECT *lprc, const SCRIPT_ANALYSIS *psa, const WCHAR *pwcReserved, int iReserved, const WORD *pwGlyphs, int cGlyphs, const int *piAdvanced, const int *piJustify, const GOFFSET *pGoffset)
 
BOOL WINAPI fake_ScrollWindow (HWND hwnd, int XAmount, int YAmount, const RECT *lpRect, const RECT *lpClipRect)
 
BOOL WINAPI fake_ScrollWindowEx (HWND hwnd, int dx, int dy, const RECT *prcScroll, const RECT *prcClip, HRGN hrgnUpdate, LPRECT prcUpdate, UINT flags)
 
BOOL WINAPI fake_DestroyWindow (HWND hwnd)
 
void gdiHooks_inProcess_initialize ()
 
void gdiHooks_inProcess_terminate ()
 

Variables

map< HWND, intwindowsForTextChangeNotifications
 
map< HWND, RECT > textChangeNotifications
 
UINT_PTR textChangeNotifyTimerID =0
 
DWORD tls_index_textInsertionsCount =TLS_OUT_OF_INDEXES
 
DWORD tls_index_curScriptTextOutScriptAnalysis =TLS_OUT_OF_INDEXES
 
displayModelsMap_t< HDC > displayModelsByMemoryDC
 
displayModelsMap_t< HWND > displayModelsByWindow
 
GlyphTranslatorCache glyphTranslatorCache
 
FillRect_funcType real_FillRect =NULL
 
DrawFocusRect_funcType real_DrawFocusRect =NULL
 
PatBlt_funcType real_PatBlt =NULL
 
BeginPaint_funcType real_BeginPaint =NULL
 
CreateCompatibleDC_funcType real_CreateCompatibleDC =NULL
 
SelectObject_funcType real_SelectObject =NULL
 
DeleteDC_funcType real_DeleteDC =NULL
 
BitBlt_funcType real_BitBlt =NULL
 
StretchBlt_funcType real_StretchBlt =NULL
 
GdiTransparentBlt_funcType real_GdiTransparentBlt =NULL
 
ScriptStringAnalyseArgsByAnalysis_t ScriptStringAnalyseArgsByAnalysis
 
CRITICAL_SECTION criticalSection_ScriptStringAnalyseArgsByAnalysis
 
BOOL allow_ScriptStringAnalyseArgsByAnalysis =FALSE
 
ScriptStringAnalyse_funcType real_ScriptStringAnalyse =NULL
 
ScriptStringFree_funcType real_ScriptStringFree =NULL
 
ScriptStringOut_funcType real_ScriptStringOut =NULL
 
ScriptTextOut_funcType real_ScriptTextOut =NULL
 
ScrollWindow_funcType real_ScrollWindow =NULL
 
ScrollWindowEx_funcType real_ScrollWindowEx =NULL
 
DestroyWindow_funcType real_DestroyWindow =NULL
 

Typedef Documentation

◆ FillRect_funcType

typedef int(WINAPI * FillRect_funcType) (HDC, const RECT *, HBRUSH)

◆ DrawFocusRect_funcType

typedef BOOL(WINAPI * DrawFocusRect_funcType) (HDC, const RECT *)

◆ PatBlt_funcType

typedef BOOL(WINAPI * PatBlt_funcType) (HDC, int, int, int, int, DWORD)

◆ BeginPaint_funcType

typedef HDC(WINAPI * BeginPaint_funcType) (HWND, LPPAINTSTRUCT)

◆ CreateCompatibleDC_funcType

typedef HDC(WINAPI * CreateCompatibleDC_funcType) (HDC)

◆ SelectObject_funcType

typedef HGDIOBJ(WINAPI * SelectObject_funcType) (HDC, HGDIOBJ)

◆ DeleteDC_funcType

typedef BOOL(WINAPI * DeleteDC_funcType) (HDC)

◆ BitBlt_funcType

typedef BOOL(WINAPI * BitBlt_funcType) (HDC, int, int, int, int, HDC, int, int, DWORD)

◆ StretchBlt_funcType

typedef BOOL(WINAPI * StretchBlt_funcType) (HDC, int, int, int, int, HDC, int, int, int, int, DWORD)

◆ GdiTransparentBlt_funcType

typedef BOOL(WINAPI * GdiTransparentBlt_funcType) (HDC, int, int, int, int, HDC, int, int, int, int, UINT)

◆ ScriptStringAnalyseArgsByAnalysis_t

◆ ScriptStringAnalyse_funcType

typedef HRESULT(WINAPI * ScriptStringAnalyse_funcType) (HDC, const void *, int, int, int, DWORD, int, SCRIPT_CONTROL *, SCRIPT_STATE *, const int *, SCRIPT_TABDEF *, const BYTE *, SCRIPT_STRING_ANALYSIS *)

◆ ScriptStringFree_funcType

typedef HRESULT(WINAPI * ScriptStringFree_funcType) (SCRIPT_STRING_ANALYSIS *)

◆ ScriptStringOut_funcType

typedef HRESULT(WINAPI * ScriptStringOut_funcType) (SCRIPT_STRING_ANALYSIS, int, int, UINT, const RECT *, int, int, BOOL)

◆ ScriptTextOut_funcType

typedef HRESULT(WINAPI * ScriptTextOut_funcType) (const HDC, SCRIPT_CACHE *, int, int, UINT, const RECT *, const SCRIPT_ANALYSIS *, const WCHAR *, int, const WORD *, int, const int *, const int *, const GOFFSET *)

◆ ScrollWindow_funcType

typedef BOOL(WINAPI * ScrollWindow_funcType) (HWND, int, int, const RECT *, const RECT *)

◆ ScrollWindowEx_funcType

typedef BOOL(WINAPI * ScrollWindowEx_funcType) (HWND, int, int, const RECT *, const RECT *, HRGN, LPRECT, UINT)

◆ DestroyWindow_funcType

typedef BOOL(WINAPI * DestroyWindow_funcType) (HWND)

Function Documentation

◆ WA_strlen() [1/2]

size_t WA_strlen ( const char * str)

◆ WA_strlen() [2/2]

size_t WA_strlen ( const wchar_t * str)

◆ WA_strncpy() [1/2]

char * WA_strncpy ( char * dest,
const char * source,
size_t size )

◆ WA_strncpy() [2/2]

wchar_t * WA_strncpy ( wchar_t * dest,
const wchar_t * source,
size_t size )

◆ textChangeNotifyTimerProc()

void CALLBACK textChangeNotifyTimerProc ( HWND hwnd,
UINT msg,
UINT_PTR timerID,
DWORD time )

◆ queueTextChangeNotify()

void queueTextChangeNotify ( HWND hwnd,
RECT & rc )

◆ acquireDisplayModel()

displayModel_t * acquireDisplayModel ( HDC hdc,
BOOL noCreate = FALSE )
inline

Fetches and or creates a new displayModel for the window of the given device context.

If this function returns a displayModel, you must call release on it when you no longer need it.

Parameters
hdca handle of the device context who's window the displayModel is for.
noCreateIf true a display model will not be created if it does not exist.
Returns
a pointer to the new/existing displayModel, NULL if gdiHooks is not initialized or has been terminated.

References LockableAutoFreeObject::acquire(), displayModelsByMemoryDC, displayModelsByWindow, and LOG_DEBUG.

Referenced by fake_BeginPaint(), fake_DrawFocusRect(), fake_FillRect(), fake_PatBlt(), fake_ScriptStringOut(), fake_SelectObject(), hookClass_ExtTextOut< charType >::fakeFunction(), hookClass_PolyTextOut< WA_POLYTEXT >::fakeFunction(), hookClass_TextOut< charType >::fakeFunction(), and StretchBlt_helper().

◆ dcPointsToScreenPoints()

void dcPointsToScreenPoints ( HDC hdc,
POINT * points,
int count,
bool relative )

converts given points from dc coordinates to screen coordinates.

Parameters
hdca handle to a device context
pointsa pointer to the points you wish to convert.
countthe number of points you want to convert.

Referenced by ExtTextOutHelper(), fake_DrawFocusRect(), fake_FillRect(), fake_PatBlt(), and StretchBlt_helper().

◆ swapBuffer()

void swapBuffer ( WORD * array,
int length )

References SWAPWORD.

Referenced by getTTFData().

◆ getTTFData()

std::vector< BYTE > getTTFData ( HDC hdc,
const char * tableName )

◆ calcCharExtentsVecFromLpdx()

std::pair< std::vector< POINT >, SIZE > calcCharExtentsVecFromLpdx ( const int cbCount,
const int * lpdx,
const TEXTMETRIC & tm,
const UINT & fuOptions,
const HDC & hdc )

Referenced by ExtTextOutHelper().

◆ calcCharExtentsVec()

std::pair< std::vector< POINT >, SIZE > calcCharExtentsVec ( const int cbCount,
const TEXTMETRIC & tm,
const bool fromGlyphs,
const HDC & hdc,
const wchar_t * lpString,
std::wstring & newText )

Referenced by ExtTextOutHelper().

◆ ExtTextOutHelper() [1/2]

void ExtTextOutHelper ( displayModel_t * model,
HDC hdc,
int x,
int y,
const RECT * lprc,
UINT fuOptions,
UINT textAlign,
BOOL stripHotkeyIndicator,
const wchar_t * lpString,
const int codePage,
const int * lpdx,
int cbCount,
LPSIZE resultTextSize,
int direction )

Given a displayModel, this function clears a rectangle, and inserts a chunk, for the given text, using the given offsets and rectangle etc.

This function is used by many of the hook functions.

Parameters
modela pointer to a displayModel
hdca handle to the device context that was used to write the text originally.
[in]xthe x coordinate (in device units) where the text should start from (depending on textAlign flags, this could be the left, center, or right of the text).
[in]ythe y coordinate (in device units) where the text should start from (depending on textAlign flags, this could be the top, or bottom of the text).
[in]lprca pointer to the rectangle that should be cleared. If lprc is NULL, or ETO_OPAQUE is not in fuOptions, then only the rectangle bounding the text will be cleared.
[in]fuOptionsflags accepted by GDI32's ExtTextOut.
[in]textAlignpossible flags returned by GDI32's GetTextAlign.
[in]lpStringthe string of unicode text you wish to record.
[in]codePagenot used in the unicode version
[in]lpdxan optional array of x (or x and y paires if ETO_PDY is set) that describes where the next character starts relative to the origin of the current character.
[in]cbCountthe length of the string in characters.
[out]resultTextSizeAn optional pointer to a SIZE structure that should be filled with the size of the text.
[in]direction>0 for left to right, <0 for right to left, 0 for neutral or unknown. Text must still be passed in in visual order.

References BOOL(), calcCharExtentsVec(), calcCharExtentsVecFromLpdx(), displayModel_t::clearRectangle(), dcPointsToScreenPoints(), GlyphTranslator::decRef(), GlyphTranslatorCache::fetchGlyphTranslator(), glyphTranslatorCache, displayModel_t::insertChunk(), LOG_DEBUG, queueTextChangeNotify(), TextInsertionTracker::reportTextInsertion(), and GlyphTranslator::translateGlyphs().

Referenced by ExtTextOutHelper(), fake_ScriptStringOut(), hookClass_ExtTextOut< charType >::fakeFunction(), hookClass_PolyTextOut< WA_POLYTEXT >::fakeFunction(), and hookClass_TextOut< charType >::fakeFunction().

◆ ExtTextOutHelper() [2/2]

void ExtTextOutHelper ( displayModel_t * model,
HDC hdc,
int x,
int y,
const RECT * lprc,
UINT fuOptions,
UINT textAlign,
BOOL stripHotkeyIndicator,
const char * lpString,
const int codePage,
const int * lpdx,
int cbCount,
LPSIZE resultTextSize,
int direction )

an overload of ExtTextOutHelper to work with ansi strings.

Parameters
lpStringthe string of ansi text you wish to record.
codePagethe code page used for the string which will be converted to unicode

References ExtTextOutHelper().

◆ fake_FillRect()

int WINAPI fake_FillRect ( HDC hdc,
const RECT * lprc,
HBRUSH hBrush )

◆ fake_DrawFocusRect()

◆ fake_PatBlt()

BOOL WINAPI fake_PatBlt ( HDC hdc,
int nxLeft,
int nxTop,
int nWidth,
int nHeight,
DWORD dwRop )

◆ fake_BeginPaint()

HDC WINAPI fake_BeginPaint ( HWND hwnd,
LPPAINTSTRUCT lpPaint )

◆ fake_CreateCompatibleDC()

HDC WINAPI fake_CreateCompatibleDC ( HDC hdc)

◆ fake_SelectObject()

HGDIOBJ WINAPI fake_SelectObject ( HDC hdc,
HGDIOBJ hGdiObj )

◆ fake_DeleteDC()

BOOL WINAPI fake_DeleteDC ( HDC hdc)

◆ StretchBlt_helper()

void StretchBlt_helper ( HDC hdcDest,
int nXDest,
int nYDest,
int nWidthDest,
int nHeightDest,
HDC hdcSrc,
int nXSrc,
int nYSrc,
int nWidthSrc,
int nHeightSrc,
DWORD dwRop )

◆ fake_BitBlt()

BOOL WINAPI fake_BitBlt ( HDC hdcDest,
int nXDest,
int nYDest,
int nWidth,
int nHeight,
HDC hdcSrc,
int nXSrc,
int nYSrc,
DWORD dwRop )

◆ fake_StretchBlt()

BOOL WINAPI fake_StretchBlt ( HDC hdcDest,
int nXDest,
int nYDest,
int nWidthDest,
int nHeightDest,
HDC hdcSrc,
int nXSrc,
int nYSrc,
int nWidthSrc,
int nHeightSrc,
DWORD dwRop )

◆ fake_GdiTransparentBlt()

BOOL WINAPI fake_GdiTransparentBlt ( HDC hdcDest,
int nXDest,
int nYDest,
int nWidthDest,
int nHeightDest,
HDC hdcSrc,
int nXSrc,
int nYSrc,
int nWidthSrc,
int nHeightSrc,
UINT crTransparent )

◆ charSetToCodePage()

int charSetToCodePage ( int charset)
inline

References LOG_ERROR.

Referenced by fake_ScriptStringOut().

◆ fake_ScriptStringAnalyse()

HRESULT WINAPI fake_ScriptStringAnalyse ( HDC hdc,
const void * pString,
int cString,
int cGlyphs,
int iCharset,
DWORD dwFlags,
int iRectWidth,
SCRIPT_CONTROL * psControl,
SCRIPT_STATE * psState,
const int * piDx,
SCRIPT_TABDEF * pTabdef,
const BYTE * pbInClass,
SCRIPT_STRING_ANALYSIS * pssa )

◆ fake_ScriptStringFree()

◆ fake_ScriptStringOut()

◆ fake_ScriptTextOut()

HRESULT WINAPI fake_ScriptTextOut ( const HDC hdc,
SCRIPT_CACHE * psc,
int x,
int y,
UINT fuOptions,
const RECT * lprc,
const SCRIPT_ANALYSIS * psa,
const WCHAR * pwcReserved,
int iReserved,
const WORD * pwGlyphs,
int cGlyphs,
const int * piAdvanced,
const int * piJustify,
const GOFFSET * pGoffset )

◆ fake_ScrollWindow()

BOOL WINAPI fake_ScrollWindow ( HWND hwnd,
int XAmount,
int YAmount,
const RECT * lpRect,
const RECT * lpClipRect )

◆ fake_ScrollWindowEx()

BOOL WINAPI fake_ScrollWindowEx ( HWND hwnd,
int dx,
int dy,
const RECT * prcScroll,
const RECT * prcClip,
HRGN hrgnUpdate,
LPRECT prcUpdate,
UINT flags )

◆ fake_DestroyWindow()

BOOL WINAPI fake_DestroyWindow ( HWND hwnd)

◆ gdiHooks_inProcess_initialize()

◆ gdiHooks_inProcess_terminate()

Variable Documentation

◆ windowsForTextChangeNotifications

map<HWND,int> windowsForTextChangeNotifications

◆ textChangeNotifications

map<HWND,RECT> textChangeNotifications

◆ textChangeNotifyTimerID

UINT_PTR textChangeNotifyTimerID =0

◆ tls_index_textInsertionsCount

◆ tls_index_curScriptTextOutScriptAnalysis

DWORD tls_index_curScriptTextOutScriptAnalysis =TLS_OUT_OF_INDEXES

◆ displayModelsByMemoryDC

◆ displayModelsByWindow

◆ glyphTranslatorCache

◆ real_FillRect

FillRect_funcType real_FillRect =NULL

◆ real_DrawFocusRect

DrawFocusRect_funcType real_DrawFocusRect =NULL

◆ real_PatBlt

PatBlt_funcType real_PatBlt =NULL

◆ real_BeginPaint

BeginPaint_funcType real_BeginPaint =NULL

◆ real_CreateCompatibleDC

◆ real_SelectObject

SelectObject_funcType real_SelectObject =NULL

◆ real_DeleteDC

DeleteDC_funcType real_DeleteDC =NULL

◆ real_BitBlt

BitBlt_funcType real_BitBlt =NULL

◆ real_StretchBlt

StretchBlt_funcType real_StretchBlt =NULL

◆ real_GdiTransparentBlt

◆ ScriptStringAnalyseArgsByAnalysis

◆ criticalSection_ScriptStringAnalyseArgsByAnalysis

CRITICAL_SECTION criticalSection_ScriptStringAnalyseArgsByAnalysis

◆ allow_ScriptStringAnalyseArgsByAnalysis

◆ real_ScriptStringAnalyse

◆ real_ScriptStringFree

◆ real_ScriptStringOut

◆ real_ScriptTextOut

ScriptTextOut_funcType real_ScriptTextOut =NULL

◆ real_ScrollWindow

ScrollWindow_funcType real_ScrollWindow =NULL

◆ real_ScrollWindowEx

ScrollWindowEx_funcType real_ScrollWindowEx =NULL

◆ real_DestroyWindow

DestroyWindow_funcType real_DestroyWindow =NULL