65.9K
CodeProject 正在变化。 阅读更多。
Home

CColorChooser 一个 IDE 风格的颜色选择器

2001年10月5日

1分钟阅读

viewsIcon

60452

downloadIcon

2034

CColorChooser 一个 IDE 风格的颜色选择器

动机

Visual Basic 肯定不是我的菜,但 Visual Basic IDE 确实有一些好的想法,应用程序可以从中受益。其中之一就是颜色选择器弹出窗口,它允许用户选择所需的颜色。我已经扩展了这个控件,包含了在新版 Visual Studio .NET IDE 中找到的网络颜色。

在最近的一个项目中,我需要设计一个颜色选择器,于是我向 VB IDE 寻求“帮助”。

设计

项目包含的窗口组件如下所示

由于设计的松散耦合,如果需要在另一个项目中单独使用,可以单独使用 CPaletteWndCSysColorWndCWenColorWndCColorChooser 包含所有功能,并通过 PostMessage 将特定的用户消息路由回父窗口。自定义颜色在应用程序中是持久的,并在 CColorChooser 的构造和销毁期间序列化(存储在注册表中)。

该项目涵盖了所有者绘制控件,并且需要创建一个自定义控件。

实现

  1. 将以下文件包含到项目中。
  2. ColorChooser.h & ColorChooser.cpp
    PaletteWnd.h & PaletteWnd.cpp
    WebColorWnd.h & WebColorWnd.cpp
    SysColorWnd.h & SysColorWnd.cpp
    
  3. 在要实现 CColorChooser 的地方,添加包含文件。
    #include "ColorChooser.h"
  4. 在类中创建一个 CColorChooser 的占位符
    class CYourView : public CView...
    {
    public:
    	CColorChooser*	m_pWndColorChooser;
  5. 在构造函数中初始化
    CYourView:: CYourView()
    {
    	m_pWndColorChooser = NULL;
    
  6. 我的示例在用户右键单击时弹出选择器。
    void CPaletteTestView::OnRButtonUp(UINT nFlags, CPoint point) 
    {
    	if (m_pwndChooser == NULL)
    	{
    		ClientToScreen(&point);
    		m_pwndChooser = new CColorChooser(point, this, m_crCurr);
    
    	}
    
  7. 当用户选择或失去焦点时,我会销毁窗口并分别“捕获”所选颜色。
    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;
    }
    

本文是未来一篇关于属性列表控件的文章的一小部分。

任何错误、增强或建议,请随时与我联系。

© . All rights reserved.