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.
AsciiPainter
An interactive drawing program within the console window for
designing ascii images.
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.