Skip to content

Latest commit

 

History

History
116 lines (88 loc) · 2.77 KB

sample_112.md

File metadata and controls

116 lines (88 loc) · 2.77 KB

Home

Drawing standard Windows icons

Before you begin:


See also:


Code:

PUBLIC frm
frm = CREATEOBJECT("Tform")
frm.Visible = .T.
* end of main

DEFINE CLASS Tform As Form
* Icon Ids
#DEFINE IDI_APPLICATION  32512
#DEFINE IDI_ASTERISK  32516
#DEFINE IDI_ERROR  32513
#DEFINE IDI_EXCLAMATION  32515
#DEFINE IDI_HAND  IDI_ERROR
#DEFINE IDI_INFORMATION  IDI_ASTERISK
#DEFINE IDI_QUESTION  32514
#DEFINE IDI_WARNING  IDI_EXCLAMATION
#DEFINE IDI_WINLOGO  32517

	Width=400
	Height=130
	AutoCenter = .T.
	Caption = " Drawing standard Windows Icons"

	ADD OBJECT cmd As CommandButton WITH;
		Caption="Draw", Width=80, Height=27

PROCEDURE Init
	THIS.declare
	THIS.Resize

PROCEDURE Resize
	WITH THIS.cmd
		.Left = Int((ThisForm.Width - .Width)/2)
		.Top = THIS.Height - .Height - 20
	ENDWITH
	ThisForm.DrawIcons

PROCEDURE DrawIcons
	THIS._draw(IDI_APPLICATION, 20,20)
	THIS._draw(IDI_HAND, 60,20)
	THIS._draw(IDI_QUESTION, 100,20)
	THIS._draw(IDI_EXCLAMATION, 140,20)
	THIS._draw(IDI_ASTERISK, 180,20)
	THIS._draw(IDI_WINLOGO, 220,20)
	THIS._draw(IDI_WARNING, 260,20)
	THIS._draw(IDI_ERROR, 300,20)
	THIS._draw(IDI_INFORMATION, 340,20)

PROTECTED PROCEDURE _draw(lnIconId, X,Y)
	LOCAL hWindow, hdc, hicon
	hWindow = THIS.HWnd && GetFocus() for older VFP versions

	hdc = GetDC(hWindow)

	hicon = LoadIcon(0, lnIconId)
	IF hicon <> 0
		= DrawIcon(hdc, X,Y, hicon)
	ENDIF
	= ReleaseDC(hWindow, hdc)

PROCEDURE declare
	DECLARE INTEGER GetFocus IN user32
	DECLARE INTEGER GetDC IN user32 INTEGER hWindow

	DECLARE INTEGER LoadIcon IN user32;
		INTEGER hInstance, INTEGER lpIconName

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

	DECLARE INTEGER ReleaseDC IN user32;
		INTEGER hWindow, INTEGER hdc

PROCEDURE Paint
	ThisForm.DrawIcons

PROCEDURE Moved
	ThisForm.DrawIcons

PROCEDURE cmd.Click
	ThisForm.DrawIcons

ENDDEFINE  

Listed functions:

DrawIcon
GetDC
GetFocus
LoadIcon
ReleaseDC

Comment:

Since the icons are displayed not via native VFP controls, the Resize, Paint and Moved methods of the form need to be instructed to redraw the icons. Otherwise the icons would be wiped out when, for example, the form after having been partially moved beyond the main VFP window then is moved within.