Skip to content

Latest commit

 

History

History
117 lines (88 loc) · 3.14 KB

sample_202.md

File metadata and controls

117 lines (88 loc) · 3.14 KB

Home

Drawing icons associated with the VFP main window

Before you begin:

See also:


Code:

DO declare

LOCAL hWindow, hDC, lcClassName, hInstance, lcWndClassX,;
	hIcon, hIconSm, hCursor

hWindow = _vfp.HWnd && GetActiveWindow()
hDC = GetWindowDC(hWindow)

lcClassName = GetClsName(hWindow)
hInstance = GetModuleHandle(0)

*| typedef struct _WNDCLASSEX {
*|     UINT       cbSize;         0:4
*|     UINT       style;          4:4
*|     WNDPROC    lpfnWndProc;    8:4
*|     int        cbClsExtra;    12:4
*|     int        cbWndExtra;    16:4
*|     HINSTANCE  hInstance;     20:4
*|     HICON      hIcon;         24:4
*|     HCURSOR    hCursor;       28:4
*|     HBRUSH     hbrBackground; 32:4
*|     LPCTSTR    lpszMenuName;  36:4
*|     LPCTSTR    lpszClassName; 40:4
*|     HICON      hIconSm;       44:4
*| } WNDCLASSEX
#DEFINE WNDCLASSX_SIZE 48

* the first dword contains the size of the structure
lcWndClassX = PADR(CHR(WNDCLASSX_SIZE),;
	WNDCLASSX_SIZE, CHR(0))

= GetClassInfoEx(hInstance, lcClassName, @lcWndClassX)

* handles returned in the WNDCLASSEX structure
hIcon = buf2dword(SUBSTR(lcWndClassX, 25,4))
hIconSm = buf2dword(SUBSTR(lcWndClassX, 45,4))
hCursor = buf2dword(SUBSTR(lcWndClassX, 29,4))

* drawing the icons and the cursor (if any)
* on the main VFP window

IF hIcon <> 0  && class icon
	= DrawIcon(hDC, 20,100, hIcon)
ENDIF

IF hIconSm <> 0  && class small icon
	= DrawIcon(hDC, 60,100, hIconSm)
ENDIF

IF hCursor <> 0  && class cursor
	= DrawIcon(hDC, 100,100, hCursor)
ENDIF

= ReleaseDC(hWindow, hDC)
* end of main

FUNCTION GetClsName(hWindow)
	LOCAL lnBufsize, lcClassName
	lnBufsize = 250
	lcClassName = SPACE(lnBufsize)
	lnBufsize = GetClassName(hWindow, @lcClassName, lnBufsize)
RETURN SUBSTR(lcClassName, 1, lnBufsize)

FUNCTION buf2dword(lcBuffer)
RETURN Asc(SUBSTR(lcBuffer, 1,1)) + ;
	Asc(SUBSTR(lcBuffer, 2,1)) * 256 +;
	Asc(SUBSTR(lcBuffer, 3,1)) * 65536 +;
	Asc(SUBSTR(lcBuffer, 4,1)) * 16777216

PROCEDURE declare
	DECLARE INTEGER GetActiveWindow IN user32
	DECLARE INTEGER GetWindowDC IN user32 INTEGER hWindow

	DECLARE INTEGER GetModuleHandle IN kernel32;
		STRING lpModuleName

	DECLARE INTEGER ReleaseDC IN user32;
		INTEGER hWindow, INTEGER hdc

	DECLARE INTEGER GetClassName IN user32;
		INTEGER hWindow, STRING lpClassName, INTEGER nMaxCount

	DECLARE INTEGER GetClassInfoEx IN user32;
		INTEGER hinst, STRING lpszClass, STRING @lpwcx

	DECLARE SHORT DrawIcon IN user32;
		INTEGER hDC, INTEGER X, INTEGER Y, INTEGER hIcon  

Listed functions:

DrawIcon
GetActiveWindow
GetClassInfoEx
GetClassName
GetModuleHandle
GetWindowDC
ReleaseDC