龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

C++实现仿Office风格的颜色选取框代码

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
用VC写了个颜色选取框,仿Office风格用VC写了个颜色选取框,仿Office风格,没用MFC什么的框架,调用很简单指定显示位置POINT和默认颜色就可以,如: POINT pt; pt.x = 100; pt.y = 100; CCol

   用VC写了个颜色选取框,仿Office风格用VC写了个颜色选取框,仿Office风格,没用MFC什么的框架,调用很简单指定显示位置POINT和默认颜色就可以,如:

POINT pt;

    pt.x = 100; pt.y = 100;

    CColorPicker *clrpk = new CColorPicker(&pt, HexClr(0xFF0000));

   效果图:

  C++的颜色拾取框 src="http://c.chinaitlab.com/UploadFiles_4204/200904/20090402095727441.gif" width=156 border=0>

   代码:

ColorPicker.h

 #define HexClr(rgb) ((DWORD)(rgb>>16)|(rgb&0xFF00)|((rgb&0xFF)<<16))

#define COLORPICKERWINNAME "ColorPickerWin"

#define WM_COLORSELECTED WM_USER+2938

static DWORD ColorMap[5][8] =

{

    { HexClr(0x000000), HexClr(0x993300), HexClr(0x333300), HexClr(0x003300), HexClr(0x003366), HexClr(0x000080), HexClr(0x333399), HexClr(0x333333)},

    { HexClr(0x800000), HexClr(0xFF6600), HexClr(0x808000), HexClr(0x008000), HexClr(0x008080), HexClr(0x0000FF), HexClr(0x666699), HexClr(0x808080)},

    { HexClr(0xFF0000), HexClr(0xFF9900), HexClr(0x99CC00), HexClr(0x008080), HexClr(0x33CCCC), HexClr(0x3366FF), HexClr(0x800080), HexClr(0x999999)},

    { HexClr(0xFF00FF), HexClr(0xFFCC00), HexClr(0xFFFF00), HexClr(0x00FF00), HexClr(0x00FFFF), HexClr(0x00CCFF), HexClr(0x993366), HexClr(0xC0C0C0)},

    { HexClr(0xFF99CC), HexClr(0xFFCC99), HexClr(0xFFFF99), HexClr(0xCCFFCC), HexClr(0xCCFFFF), HexClr(0x99CCFF), HexClr(0xCC99FF), HexClr(0xFFFFFF)}

};

class CColorPicker

{

public:

    HINSTANCE m_hInstance;  //debug

    CColorPicker(POINT *pt, DWORD DefaultColor);

    ~CColorPicker();

    HWND GetHwnd();

    DWORD GetColor();

    void OnPaint();

    void OnLButtonDown(long x, long y);

    void OnLButtonUp(long x, long y);

    void OnMouseMove(long x, long y);

private:

    HWND m_hwnd;

    DWORD m_Color;

    byte m_HotRow, m_HotCol;

    bool m_bCustomColor;

    bool m_bMouseDown;

    void CreateColorPicker(POINT *pt);

    void Draw(HDC hdc, byte row, byte col, bool hot, byte correction);

    void ReDraw(byte row, byte col, bool hot);

};

精彩图集

赞助商链接