WDS

Windows Development System

This Windows Development System (WDS) is a set of Dynace https://blakemcbride.github.io/Dynace/ classes that make the development of Windows GUI applications extremely easy. It also works on Linux and macOS through the WINE library. It has been used in commercial applications for nearly 20 years.

Current Status

WDS was used commercially under 32-bit Win32 on Windows for about 15 years. It has been updated and now builds and runs as a 64-bit application on both native Windows (MSVC/NMAKE) and Linux under Wine (tested on Fedora 42 with GCC 15 and Wine 10.x).

Dynace (the system WDS is built upon) is current and works fine in all of those environments.

WDS includes:

Source code for this system is at: https://github.com/blakemcbride/WDS

Build instructions are at: docs/BUILD.txt

A small example

The following will give you a small taste of how easy WDS makes the development of GUI applications:

A complete “Hello World” Windows application

#include "generics.h"

int	start()
{
	object	win;

	win = vNew(MainWindow, "My Test Application");

	vPrintf(win, "Hello, World!\n");

	return gProcessMessages(win);
}

Add a menu

resources.h is created by your resource editor that comes with Windows.

#include "generics.h"
#include "resource.h"

static	long	file_message(object wind, unsigned id);
static	long	file_exit(object wind, unsigned id);

int	start()
{
	object	win;

	win = vNew(MainWindow, "My Test Application");

	mLoadMenu(win, IDR_MENU1);
	mAssociate(win, ID_FILE_MESSAGE, file_message);
	mAssociate(win, ID_FILE_EXIT, file_exit);

	return gProcessMessages(win);
}

static	long	file_message(object wind, unsigned id)
{
	gMessage(wind, "File Message");
	return 0L;
}

static	long	file_exit(object wind, unsigned id)
{
	gQuitApplication(Application, 0);
	return 0L;
}

Add a dialog

#include "generics.h"
#include "resource.h"

static	long	file_message(object wind, unsigned id);
static	long	file_dialog(object wind, unsigned id);
static	long	file_exit(object wind, unsigned id);

int	start()
{
	object	win;

	win = vNew(MainWindow, "My Test Application");

	mLoadMenu(win, IDR_MENU1);
	mAssociate(win, ID_FILE_MESSAGE, file_message);
	mAssociate(win, ID_FILE_DIALOG, file_dialog);
	mAssociate(win, ID_FILE_EXIT, file_exit);

	return gProcessMessages(win);
}

static	long	file_message(object wind, unsigned id)
{
	gMessage(wind, "File Message");
	return 0L;
}

static	long	file_dialog(object wind, unsigned id)
{
	object	dlg;
	int	r;
	
	dlg = mNewDialog(ModalDialog, DL1, wind);

	r = gPerform(dlg);

	gDispose(dlg);

	return 0L;
}

static	long	file_exit(object wind, unsigned id)
{
	gQuitApplication(Application, 0);
	return 0L;
}

Getting started

See docs/ORIENT.txt

This system was written by Blake McBride