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

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

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
ColorPicker.cpp #include #include "ColorPicker.h" WNDPROC ColorPickerWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { CColorPicker* lpColorPicker = (CColorPicker*)GetWindowLong(hwnd, GWL_U

ColorPicker.cpp  #include

#include "ColorPicker.h"

WNDPROC ColorPickerWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)

{

    CColorPicker* lpColorPicker = (CColorPicker*)GetWindowLong(hwnd, GWL_USERDATA);

    if (!lpColorPicker) return (WNDPROC)DefWindowProc(hwnd, msg, wParam, lParam);

/*========================================================================

  作者:  彭国辉

  DATE:  2007-12-25

  EMAIL: kacarton( at )sohu.com

  文章为作者原创,转载前请先与本人联系,转载请注明文章出处、保留作者信息,谢谢支持!

=========================================================================*/

    switch (msg)

    {

    case WM_PAINT:

        lpColorPicker->OnPaint();

        break;

    case WM_CLOSE:

        DestroyWindow(hwnd);

        break;

    case WM_DESTROY:

        PostQuitMessage(0);

        break;

    case WM_LBUTTONDOWN:

        lpColorPicker->OnLButtonDown(LOWORD(lParam), HIWORD(lParam));

        break;

    case WM_LBUTTONUP:

        lpColorPicker->OnLButtonUp(LOWORD(lParam), HIWORD(lParam));

        break;

    case WM_MOUSEMOVE:

        lpColorPicker->OnMouseMove(LOWORD(lParam), HIWORD(lParam));

        break;

    case WM_KEYDOWN:

        if (wParam==VK_ESCAPE)

        {

            PostMessage(hwnd, WM_CLOSE, 0, 0);

            break;

        }

    default:

        return (WNDPROC)DefWindowProc(hwnd, msg, wParam, lParam);

    }

    return 0;

}

CColorPicker::CColorPicker(POINT *pt, DWORD DefaultColor)

{

    m_hwnd = NULL;

    m_Color = DefaultColor;

    m_HotRow = m_HotCol = 255;

    m_bCustomColor = true;

    m_bMouseDown = false;

    CreateColorPicker(pt);

}

CColorPicker::~CColorPicker()

{

    ReleaseCapture();

}

void CColorPicker::CreateColorPicker(POINT *pt)

{

    WNDCLASS wndclass;

    //注册窗体类名

    if (GetClassInfo(m_hInstance, COLORPICKERWINNAME, &wndclass) == 0)

    {

        memset(&wndclass, 0, sizeof(WNDCLASS));

        wndclass.style          = CS_VREDRAW | CS_HREDRAW;

        wndclass.lpfnWndProc    = (WNDPROC)ColorPickerWndProc;

        wndclass.hInstance      = m_hInstance;

        wndclass.hbrBackground  =  (HBRUSH)GetStockObject(COLOR_WINDOW);

        //wndclass.hCursor        = LoadCursor(NULL, IDC_ARROW);

        wndclass.lpszClassName  = COLORPICKERWINNAME;

        RegisterClass(&wndclass);

    }

    //创建工具栏窗体,定位于主窗口上方

    RECT rc;

    GetWindowRect(AfxGetMainWnd()->m_hWnd, &rc);

    m_hwnd = CreateWindowEx(0, COLORPICKERWINNAME, "颜色拾取窗", WS_POPUP | WS_BORDER | WS_TABSTOP, pt->x, pt->y, 8*18+12, 126, 0, NULL, /**//*AfxGetInstanceHandle()*/m_hInstance, NULL);

    if (!m_hwnd) return;

    SetWindowLong(m_hwnd, GWL_USERDATA, (LONG)this);

精彩图集

赞助商链接