Click here to Skip to main content
15,881,757 members
Articles / Desktop Programming / MFC
Article

xgui - a set of Photoshop-like color picker controls

Rate me:
Please Sign up or sign in to vote.
4.95/5 (10 votes)
2 Apr 20021 min read 111K   3.9K   40   13
xgui is a user-controls library, including several user-interface controls inspired by the great Adobe Photoshop
xgui demo project screenshot

In this page:

  1. What is xgui?
  2. How to use it

What is xgui? 

xgui is a user-controls library, including several user-interface controls: color picker, slider, color preview well and controller, inspired by the great Adobe Photoshop.

Currently RGB and HSV color models are supported.

How to use it 

Include wrapper headers 

xgui library is accessed by using so-called wrappers. Wrappers are headers defining 4 classes with all members inline functions. Following steps describe the simpliest case - drive a picker, slider and a well by using a controller.

Initialize xgui library 

Load and initialize library (in InitInstance, for example):

HINSTANCE handle = LoadLibrary ("xgui.dll");
if (handle == NULL)
{
	AfxMessageBox ("Cannot load library.");
	return (FALSE);
}
FARPROC func = GetProcAddress (handle, "xgui_initialize");
if (func == NULL)
{
	AfxMessageBox ("Cannot find function.");
	return (FALSE);
}
func ();

Add controls to a dialog box 

Add a user-controls to a dialog box template in resource editor. Set window class (xgui_controller, xgui_picker, xgui_slider or xgui_well). Select additional options (as style lo-word) for slider and picker:

Resource editor screenshot

For the slider control, 0x7280 means vetical slider with both triangles, where each triangle is having size = 6 (2 + 4 = 6), running at visual mode 0x80 (consult "xgui_constants.h" for available visual modes or "slider.h" about the following schema):

 +- horizontal slider (8)
 |  +- verical slider (4)
 |  |  +- left / top triangle (2)
 |  |  |  +- right / bottom triangle (1)
 |  |  |  |  +--------+- triangle(s) size - 4 (0 = actual size of 4)
 |  |  |  |  |        |  +--------------------+- visual mode (modes enum)
 |  |  |  |  |        |  |                    |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|16|15|14|13|12|11|10| 9| 8| 7| 6| 5| 4| 3| 2| 1|
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
 |                    |
 +--------------------+- layout mode

Picker uses only bits 9-12 for the same purpose as slider control.

Uncheck visible and tabstop for controllers and tabstop only for color wells.

Declare member variable 

In your dialog box class header append a single member variable for the controller:

xgui::wrapper::controller	master;

Set-up variable 

Use class wizard to add a handler for WM_INITDIALOG and setup class instance inside:

master.attach (
	GetDlgItem (IDC_CONTROLLER)->m_hWnd);
master.setup_as_picker (
	GetDlgItem (IDC_WELL)->m_hWnd,
	GetDlgItem (IDC_PICKER)->m_hWnd,
	GetDlgItem (IDC_SLIDER)->m_hWnd);
master.visual (
	xgui::modes::rgb_red | xgui::modes::reverse);

Query controller for the current selection 

Use color method of the controller wrapper to get or to set the current color.

Compile and execute 

That's all. Compile and execute the project.

Check-out demo project source code for advanced usage.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Web Developer
Bulgaria Bulgaria
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
QuestionVb.Net Pin
tamilpuyal_289-Oct-11 23:55
tamilpuyal_289-Oct-11 23:55 
how to use this control in VB.net....
Thanks.
GeneralImpressive Pin
rakeshk_37117-Nov-04 23:58
rakeshk_37117-Nov-04 23:58 
GeneralChanges to make it run on Win98 Pin
Jürgen Welzenbach25-Mar-04 21:24
Jürgen Welzenbach25-Mar-04 21:24 
GeneralStrange crash...solved Pin
Andreas Muegge16-Sep-02 6:02
Andreas Muegge16-Sep-02 6:02 
GeneralAnouncement: 0.0.4 released Pin
Bobi B.7-Aug-02 10:23
Bobi B.7-Aug-02 10:23 
GeneralNice Pin
dswigger17-Jun-02 5:01
dswigger17-Jun-02 5:01 
GeneralNot bad, not bad at all. Some suggestions. Pin
7-Apr-02 20:57
suss7-Apr-02 20:57 
GeneralYou should see the RGB Cube Pin
KlausCH3-Apr-02 21:49
KlausCH3-Apr-02 21:49 
GeneralSuggestion Pin
Christian Graus3-Apr-02 11:12
protectorChristian Graus3-Apr-02 11:12 
GeneralRe: Suggestion Pin
Adi Shavit3-Apr-02 22:37
Adi Shavit3-Apr-02 22:37 
GeneralRe: Suggestion Pin
Christian Graus3-Apr-02 22:39
protectorChristian Graus3-Apr-02 22:39 
GeneralRe: Suggestion Pin
Bobi B.4-Apr-02 1:40
Bobi B.4-Apr-02 1:40 
GeneralPretty.... Pin
Jim Crafton3-Apr-02 5:49
Jim Crafton3-Apr-02 5:49 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.