eGUI++ - Easy GUI
What's eGUI? It's a C++ library that makes Windows GUI programming a breeze!
Yup, it's
finally here, and it's hot!
eGUI's goals
-
make GUI code easy to read
-
make GUI code easy to write
-
benefit from code completion whenever possible
-
make GUI programming safe
-
in case there’s an error, catch it at compile time whenever possible; otherwise, at runtime, an exception is thrown
-
Resource Editor friendly
-
Integration with VS 2005+ Resource Editor
-
no message maps
-
No need to #include <windows.h> in client code. This was quite bold, but I've made it. You want a library that abstracts away the Win32 API FULLY, here it is.
Case in point : USD to EUR conversion
You'll find the sample in samples/tutorial/usd_to_eur.
To deal with the GUI world, you create forms (or dialogs, if you wish). Then you put controls on them, and the handle some of their events to implement the logic.
Step 1: The main() function
using namespace egui;
void egui::main(const
main_args&) {
// create a modal form. You don't need
to specifically wait for an event from the modal form,
//
since you'll exit this function only when it's ready
wnd<convert>( new_( wnd_init().style(form_style::modal) ));
}
Step 2: The convert class
The convert class - it's the form that does the
conversion. It's fairly simple
The header:
// convert.h
#include
"convert_form_resource.h"
struct convert : form_resource::convert
{
convert() : rate(1.47), updating(false)
{}
private:
double
rate;
bool updating;
// here we specified what
notifications we're handling:
// the "change" event,
coming from usd, and from eur controls
void
on_change(edit::ev::change&, usd_);
void
on_change(edit::ev::change&, eur_);
};
The source code:
// convert.cpp
#include "stdafx.h"
#include
"convert.h"
#include "convert_form_resource.h.hpp"
namespace
{
double to_double(const string& str) { ...
}
string to_string(double d) { ... }
}
// handle each event, and update the other control
//
also, avoid infinite recursion
void convert::on_change(edit::ev::change&,
usd_) {
if ( updating) return;
updating = true;
eur->text = to_string(
to_double(usd->text) / rate);
updating =
false;
}
void convert::on_change(edit::ev::change&, eur_) {
if ( updating) return;
updating =
true;
usd->text = to_string( to_double(eur->text) *
rate);
updating = false;
}