CColorChooser an IDE style Color Picker






4.70/5 (10 votes)
Oct 5, 2001
1 min read

60040

2034
CColorChooser an IDE style Color Picker
![]() |
![]() |
![]() |
Motivation
Visual Basic is certainly not my cuppa tea, but the Visual Basic IDE does have some good ideas which applications can benefit from. One these is the Color Chooser popup window which allows the user to select a desired color. I've extended the control to include the Web Colors which are found on the new Visual Studio .NET IDE.
During a recent project I needed to design a color chooser and I turned to the VB IDE for 'help'.
Design
The window components contained in the project are show below:
Due to the lose coupling of the design CPaletteWnd
, CSysColorWnd
or
CWenColorWnd
can be used
in isolation if so required in another project. The CColorChooser
contains all the functionality
and routes specific user messages back to the parent via PostMessage
. Custom
colors are persistent to the application and are serialized during CColorChooser
construction and destruction (stored in the registy).
The project covers owner draw controls and have to create a custom control.
Implementation
- Include the add the following files to the project.
- Where the
CColorChooser
is to be implemented add the include file.#include "ColorChooser.h"
- Create a placeholder for the
CColorChooser
in the classclass CYourView : public CView... { public: CColorChooser* m_pWndColorChooser;
- Initialize in the constructor
CYourView:: CYourView() { m_pWndColorChooser = NULL;
- My example pops the chooser up when the user right mouse
clicks.
void CPaletteTestView::OnRButtonUp(UINT nFlags, CPoint point) { if (m_pwndChooser == NULL) { ClientToScreen(&point); m_pwndChooser = new CColorChooser(point, this, m_crCurr); }
- When the user selects or loses focus I destroy the window
and 'catch' the selected color respectively.
LRESULT CPaletteTestView::OnColorChanged(WPARAM wParam, LPARAM lParam) { m_crCurr = lParam; // Color is contained in lParam delete m_pwndChooser; m_pwndChooser = NULL; RedrawWindow(); return 0; } LRESULT CPaletteTestView::OnColorChooserClose(WPARAM wParam, LPARAM lParam) { delete m_pwndChooser; m_pwndChooser = NULL; return 0; }
ColorChooser.h & ColorChooser.cpp PaletteWnd.h & PaletteWnd.cpp WebColorWnd.h & WebColorWnd.cpp SysColorWnd.h & SysColorWnd.cpp
This article forms a small part of the future article covering a property list control.
Any bugs, enhancements or suggestions please don't hesitate to contact me.