difficulties getting SetTimer () to work

llee llee_member at pathlink.com
Tue Jul 11 07:55:30 PDT 2006


There has to be a simple explanation for this. I've tried to compile the
following code several times, but the compiler doesn't recognize the SetTimer
identifier. Each time I've tried the following compiler settings:

> dmd timer.d gdi32.lib user32.lib winsamp.def

The msdn site says that SetTimer is defined under user32.lib.
the error that I get in return is as follows:

> timer.d(46): undefined identifier SetTimer
> timer.d(46): function expected before (), not SetTimer of type int

Listed here is the source code:
_______________________________________________________________________________
// application demonstrates the timer event function.

// note: windows data types are case sensitive
// note: compile by typing; 
// 'dmd timer.d gdi32.lib user32.lib winsamp.def' 

import std.c.windows.windows;
import std.c.stdio;

extern (C) void _minit();
extern (C) void gc_init();
extern (C) void gc_term();
extern (C) void _moduleCtor();
extern (C) void _moduleUnitTests();

extern (Windows)
int WindowProc (HWND hWnd, uint msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
case	WM_PAINT:
{

HDC		dc;	// handle to the device context
RECT		r;
PAINTSTRUCT	ps;	// specifies region to be redrawn

dc = BeginPaint	(hWnd, &ps);

GetClientRect 	(hWnd, &r);
EndPaint	(hWnd, &ps);

break;	
}
case	WM_DESTROY:
{
PostQuitMessage	(0);

break;
}
case WM_CREATE:
{
int timer_status  = 1;	 // 1 - continue, -1 - stop
int timer_duration = 10; // duration in milliseconds

SetTimer (hWnd, timer_status, timer_duration, null); 
}
case WM_TIMER:		// now called every 10 milliseconds
{
}
default:
{	break;	}
}
return DefWindowProcA (hWnd, msg, wParam, lParam);
}

int WindowInitialization ()
{
// declarations:

MSG		msg;
HWND		hWnd;
WNDCLASS	wc;
HINSTANCE 	hInst;

// definitions:

hInst	         = GetModuleHandleA (null);
wc.lpszClassName = "DWndClass";
wc.style	 = CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc	 = &WindowProc;
wc.hInstance	 = hInst;
wc.hIcon	 = LoadIconA (cast (HINSTANCE) null, IDI_APPLICATION);
wc.hCursor	 = LoadCursorA (cast (HINSTANCE) null, IDC_CROSS);
wc.hbrBackground = cast (HBRUSH) (COLOR_WINDOW + 1);
wc.lpszMenuName	 = null;
wc.cbClsExtra	 = 0;
wc.cbWndExtra	 = 0;

// operations:

RegisterClassA (&wc);
hWnd	= CreateWindowA 
( 
"DWndClass" 	,
"just a window" 	, 
WS_THICKFRAME	|
WS_MAXIMIZEBOX	|
WS_MINIMIZEBOX	|
WS_SYSMENU		|
WS_VISIBLE		,
CW_USEDEFAULT	,
CW_USEDEFAULT	,
400			,
300			,
HWND_DESKTOP	,
cast (HMENU) null	,
hInst			,
null
);	

assert (hWnd);
while	(GetMessageA (&msg, cast (HWND) null, 0, 0))
{
TranslateMessage	(&msg);
DispatchMessageA	(&msg);
}

return 1;
}

extern (Windows)
int WinMain
(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
)
{
int result;

gc_init ();		// initialize garbage collector
_minit  ();		// initialize module constructor

try
{
_moduleCtor	();	// call module consructor
_moduleUnitTests();	// run unit tests (optional)

result	= WindowInitialization ();
}
catch (Object o)		// catch any uncaught exceptions
{
MessageBoxA
(
null				,
cast (char*) o.toString	,
"Error"			,
MB_OK				|
MB_ICONEXCLAMATION
);
result	= 0;		// failed
}

gc_term ();		// terminate garbage collection
return result;
}

any help would be appreciated.
_______________________________________________________________________________





More information about the Digitalmars-d mailing list