Power Color Picker

Features :

This new control derived from CWnd provides an interface for users to select colors for an object. It is more intuitive than CColorDialog in windows API.

Interface description :

  • right rectangle : luminance.
  • left rectangle : saturation on x axis, hue on y axis.
  • bottom rectangle : currently selected color.

This control is fully resizable on the fly. You could specify a size for each rectangle.
When you move the cursor with shift or ctrl, the color change only on one axis (hue or saturation)

 

How to use it in a dialog :

  • a member variable must be added to the dialog :
    ...

    protected:
    PowerColorPicker picker;
    ...

  • create the picker in the method OnInitDialog() of your dialog :
...

//specify the control size
RECT rect={10,10,390,300}; 
//create control in OnInitDialog()
 picker.Create(NULL,"Haha",WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS ,rect,this, NULL, NULL);

... 
  • define a callback when the user click/move on picker :
    
    
    //define a callback 
    void testfunc(COLORREF ref,void *ClientData)
    {
    	CColorPickerDlg * local= (CColorPickerDlg*)ClientData;
    	
    	char str[256];
    	sprintf(str,"RED: %ld\nGREEN: %ld\nBLUE: %ld",GetRValue(ref),GetGValue(ref),GetBValue(ref));
    
    	OutputDebugString(str);
    
    }
    
    
    ...
    
    //register callbacks in OnInitDialog()
     
    picker.RegisterCallbackOnMove(testfunc,this); 
    picker.RegisterCallbackOnLButtonDown(testfunc,this);
    ...
  • you could define the width of the luminance bar anywhere in your source :
    ...
    
    
    picker.SetLuminanceBarWidth(20); 
    
    ...

Downloads

Download Source Code - 31 Kb
Download Demo Application - 9 Kb


Comments

  • Excellent

    Posted by Ajay Vijay on 11/20/2004 06:04am

    Great!

    Reply
  • Typo and fix for memory leaks...

    Posted by Legacy on 12/29/2000 12:00am

    Originally posted by: Chetan

    First, the typo :
    
    

    In PowerColorPicker.cpp, currently line 585 is

    currentColor = HLStoRGB(currentHue,currentSaturation,currentLuminance);

    to be changed to

    currentColor = HLStoRGB(currentHue,currentLuminance,currentSaturation);

    Second, these lines to be added to the class destructor, in the same file

    if (pickerDC)
    {
    delete pickerDC;
    pickerDC = NULL;
    }

    if (luminanceBarDC)
    {
    delete luminanceBarDC;
    luminanceBarDC = NULL;
    }

    That will remove the memory leaks.

    Otherwise, a very good piece of work.

    Thanks,
    Chetan.

    Reply
  • There are memory leaks!

    Posted by Legacy on 12/06/1999 12:00am

    Originally posted by: pxz

    There are memory leaks!

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Protecting business operations means shifting the priorities around availability from disaster recovery to business continuity. Enterprises are shifting their focus from recovery from a disaster to preventing the disaster in the first place. With this change in mindset, disaster recovery is no longer the first line of defense; the organizations with a smarter business continuity practice are less impacted when disasters strike. This SmartSelect will provide insight to help guide your enterprise toward better …

  • Live Event Date: August 14, 2014 @ 2:00 p.m. ET / 11:00 a.m. PT Data protection has long been considered "overhead" by many organizations in the past, many chalking it up to an insurance policy or an extended warranty you may never use. The realities of today make data protection a must-have, as we live in a data driven society. The digital assets we create, share, and collaborate with others on must be managed and protected for many purposes. Check out this upcoming eSeminar and join eVault Chief Technology …

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds