Banner image for the Console Menu project page
Console Menu project page image


Resources


Overview

Project Type

  • Personal Project

Development Period

  • 1 Year (On and Off)

Development Time

  • 4 Months

Tools Used

IDE

  • Visual Studio

Lanugage

  • C++

Libraries

  • Windows API


Description

Console Menu (abbreviated as CONU) is a C++ GUI library that operates within the default C++ console window. CONU allows for the development of dynamic user interfaces that respond to mouse and keyboard input, such as Menu systems, interactive programs, and games.

This project was developed as a personal project to create a GUI library. Development and planning began May, 2022 and CONU v1.1 was released June, 2023. Development occurred intermittently over this period.


Program Demonstrations

Below are some demonstration programs I made to showcase the capabilities of the CONU library.

BasicMenu

A simple program demonstrating the use of CONU for menu interface applications.

Gif demonstration of the BasicMenu example program

AsciiPainter

An interactive drawing program within the console window for designing ascii images.

Gif demonstration of the BasicMenu example program


Development Issues

Not Enough Initial Planning

I was constantly changing class interfaces for base classes throughout development, which took up a lot of time. This could have been avoided if I spend more time planning before developing any interfaces.

WinAPI

This was my first dive into the Windows API, which was a significant learning curve. I spent a lot of time troubleshooting.

Console Window Ownership

The default C++ console window is not actually owned by the program. Rather, it is executed as a separate process. This prevented me from adding beneficial features involving hooks.

Lack of Library Development Knowledge

I had very minimal library design knowledge initially. This was detrimental when issues would latter appear, such as the problem of distributing a static library file built using a specifc compiler version.


What I Learned

General Development Experience

I would consider this my first programming project that is considerably complex. This is compared to more basic programming assignment and personal projects.

Interface Change is Expensive

Changing the interface for a class mid-development is very time expensive, especially if the class is a base class. It is very important to plan-out class interfaces ahead of time to prevent the need to change them later.

Introduction to the Windows API

This project involved me using the Windows API for the first time. I was able to learn some basic knowledge of how the API works, such as how windows and errors are handled.

Windows Hooking

When researching on how to implement certain features for the library, I learned about Window's hooking system. This system inspired me to implement the input hook system in CONU.

Static vs Dynamic Linked Libraries

Troubleshooting the issues with static libraries taught me about both static and dynamic libraries. Should I remake this project, I would likely try to implement it as a DLL.