Visual Application Components Abstraction

TN011 Deprecated — Monday, September 22, 2008

You have to know that Technical Note 11 (TN011) is completelly deprecated. The behavior of Widget::setLayout and Widget::setConstraint was modified in Vaca 0.0.7 but that Technical Note wasn't updated. See the documentation of Widget::setLayout for more information, and ignore TN011. Sorry for the inconvenience.

Vaca 0.0.7 — Saturday, September 20, 2008

New Vaca release with important changes in the API. Mainly the addition of SmartPtrs to make the management of GDI objects more easy. Changes:

  • More documentation (see Documentation section).
  • Added MenuPopup.
  • Added RefWrapper class and Ref() method to support references in Bind().
  • Added GraphicsPath.
  • Added HttpRequest class.
  • Added FontMetrics class.
  • Added StatusBar widget. Now Frame has an associated StatusBar.
  • Added Separator widget.
  • Added RadioGroup::onChange event/signal.
  • All methods that return Win32 handles (HWND, HDC, HBRUSH, HRGN, etc.) now are called getHandle().
  • Added GdiObject and SmartPtr.
  • Brush, Cursor, Font, Icon, Image, ImageList, Pen, and Region are SmartPtrs.
  • New Paths example.
  • Widget destructor deletes children.
  • Renamed MouseButtons to MouseButton.
  • Renamed Borders to Sides.
  • Fixed Bix::getPreferredSize when EvenX or EvenY flags are activated.
  • Now MenuItem::setEnabled/Checked can be used although the item isn't in a parent Menu.
  • Removed SelfDestruction class (with SmartPtrs it isn't needed anymore).
Download Vaca 0.0.7

Vaca 0.0.6 — Saturday, August 16, 2008

New Vaca release. Changes:

  • Removed dependencies with Boost library.
    • Added Slot/Signal and Bind (placeholders aren't available, sorry).
    • Added ConditionVariable (from William E. Kempf code, Boost.Threads).
    • Added TimePoint.
  • New classes: WidgetClassName, WidgetHitTestEnum.
  • Changed all enumerations to Enum and EnumSet.
  • Renamed CreateHWNDException to CreateWidgetException.
  • Now String::getFile* methods use reverse_iterator.
  • Added Command stuff (Command, CommandSignal, CommandsClient), MenuItem and ToolBar uses commands now.
  • Renamed Widget::acquireFocus to requestFocus.
  • Renamed Widget::acquireCapture to captureMouse.
  • Renamed Widget::releaseCapture to releaseMouse.
  • Renamed Widget::onIdAction to Widget::onCommand.
  • Thanks to Emil Kirichev:
    • Fixed String::fromInt to handle negative numbers.
    • Fixed a problem with mouse coordinates in all mouse events. Now we use MAKEPOINTS to get negative coordinates when we capture the mouse.
    • Added Graphics::drawPolyline(const vector<Point>& points).
  • Added more signals for Widget: See LikeScript example (idea of Przemyslaw Szurmak).
  • New Bix layout manager (also for Java Swing). Next release will have something more useful like SWT's GridLayout or XUL.
  • Removed all utilities (they were too big to include inside the main Vaca distribution).
  • Fixed a lot of bugs.

What is Vaca?

Visual Application Components Abstraction
A library to program applications for MS-Windows using C++ language and classes, with a simple OOP approach (plus STL, Signal/Slot, etc.). It's a wrapper for the Win32 API, but with additional functionality like dockable tool bars and layout managers.
Note: Vaca doesn't depend anymore of Boost libraries.

Minimal Example

#include <Vaca/Vaca.h>

using namespace Vaca;

class MainFrame : public Frame
{
  Label label;
public:
  MainFrame() : Frame("Vaca Example")
              , label("Hello World!", this) {
    setLayout(new ClientLayout);
    setSize(getPreferredSize());
  }
};

int VACA_MAIN()
{
  Application app;
  MainFrame frm;
  frm.setVisible(true);
  app.run();
  return 0;
}

Alternative Example

#include <Vaca/Vaca.h>

using namespace Vaca;

int VACA_MAIN()
{
  Application app;
  Frame frm("Vaca Example");
  Label label("Hello World!", &frm);
  frm.setLayout(new ClientLayout);
  frm.setSize(frm.getPreferredSize());
  frm.setVisible(true);
  app.run();
  return 0;
}