Creating a Custom Color Selection Dialog

Environment: Win32 API (no MFC)

This is a GPL/LGPL color picker demo based on a custom color selector. I coded it as a part of a Win32 server that I use in my graphics apps. It's pure Win32 API C++ and it should compile with VC++ 6.0. For your convenience, there are precompiled binaries in the 'bin' folder.

To Implement the Picker

  1. Build 'server_win.lib' and 'server_util.lib' (with the appropriate DLLs).
  2. Include 'server_win.h' and 'server_util.h' into your source code.
  3. Make a reference to the picker's global instance:
  4.     "c_colorpick& <yourpicker> = colorpick;"
  5. Call the picker where you want it to appear:
  6.     "COLORREF rgb =
                  <yourpicker>.getcolor(<handle to owner window>);"
    
    The function above returns -1 when 'Cancel' is pressed.

To Get the Picker's Settings

  1. Declare an instance of color-info structure:
  2.     "_colorinfo <yourinfo>;"
    This structure will hold the color space type, palette saturation range, and custom colors.
  3. When the picker returns, obtain the above values by calling:
  4.     "<yourpicker>.getinfo(<yourinfo>);"
  5. Then you can save these values into a file so that all settings can be loaded when the app starts again. How it could be done is shown in the "bool writeini()" function in 'colpick_main.cpp'.

To Initialize the Picker to the Last-Saved Settings

  1. Load the file you`ve saved in the previous section and fill in the <yourinfo> structure.
  2. Before you call the picker, make a call:
  3.     "<yourpicker>.setinfo(<yourinfo>);"
  4. Your picker should be initialized. (For details, look at "bool readini()" and "WinMain()" in 'colpick_main.cpp'.)

Known Bug

When using numeric input of HSL or HSV, the entered value sometimes skips down by 1. For example, if you insert 180, the value skips to 179. This is probably due to running the entered value through the whole conversion routine; that might be inexact.

oscar@mail.viapvt.sk

Downloads

Download demo project (Self extracting EXE) - 158 Kb


About the Author

Oto Spal

If you are really interested in who i am, you can visit me at www.armego.sk

Comments

  • best of the bunch...

    Posted by Legacy on 01/12/2004 12:00am

    Originally posted by: Frank Evans

    Thanks for a well polished utility. Numerous color pickers floating around. Yours showed the most love. Good layout, etc.

    Reply
  • This is wonderful.

    Posted by Legacy on 07/25/2003 12:00am

    Originally posted by: Li Zhaoming

    Just by looking at your title pic, I know this is a wonderful article, and the excellent code!

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

Top White Papers and Webcasts

  • When individual departments procure cloud service for their own use, they usually don't consider the hazardous organization-wide implications. Read this paper to learn best practices for setting up an internal, IT-based cloud brokerage function that service the entire organization. Find out how this approach enables you to retain top-down visibility and control of network security and manage the impact of cloud traffic on your WAN.

  • U.S. companies are desperately trying to recruit and hire skilled software engineers and developers, but there is simply not enough quality talent to go around. Tiempo Development is a nearshore software development company. Our headquarters are in AZ, but we are a pioneer and leader in outsourcing to Mexico, based on our three software development centers there. We have a proven process and we are experts at providing our customers with powerful solutions. We transform ideas into reality.

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date