123
This commit is contained in:
156
Editor/CustomColorDialog.cpp
Normal file
156
Editor/CustomColorDialog.cpp
Normal file
@@ -0,0 +1,156 @@
|
||||
// CustomColorDialog.cpp : implementation file
|
||||
//
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "CustomColorDialog.h"
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define new DEBUG_NEW
|
||||
#undef THIS_FILE
|
||||
static char THIS_FILE[] = __FILE__;
|
||||
#endif
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CCustomColorDialog
|
||||
|
||||
IMPLEMENT_DYNAMIC(CCustomColorDialog, CColorDialog)
|
||||
|
||||
CCustomColorDialog::CCustomColorDialog(COLORREF clrInit, DWORD dwFlags, CWnd* pParentWnd) :
|
||||
CColorDialog(clrInit, dwFlags, pParentWnd)
|
||||
{
|
||||
m_cc.Flags |= CC_ENABLETEMPLATE|CC_FULLOPEN|CC_SHOWHELP;
|
||||
m_cc.hInstance = (HWND)AfxGetInstanceHandle();
|
||||
m_cc.lpTemplateName = MAKEINTRESOURCE(IDD_CHOOSE_COLOR);
|
||||
//MCC_ENABLETEMPLATE
|
||||
|
||||
m_bPickMode = false;
|
||||
m_pickerCusror = ::LoadCursor(AfxGetResourceHandle(),MAKEINTRESOURCE(IDC_COLOR_PICKER));
|
||||
}
|
||||
|
||||
CCustomColorDialog::~CCustomColorDialog()
|
||||
{
|
||||
DeleteObject(m_pickerCusror);
|
||||
}
|
||||
|
||||
BEGIN_MESSAGE_MAP(CCustomColorDialog, CColorDialog)
|
||||
//{{AFX_MSG_MAP(CCustomColorDialog)
|
||||
ON_BN_CLICKED(IDC_PICK_COLOR, OnPickColor)
|
||||
ON_WM_LBUTTONDOWN()
|
||||
ON_WM_CREATE()
|
||||
//}}AFX_MSG_MAP
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
|
||||
void CCustomColorDialog::OnPickColor()
|
||||
{
|
||||
CLogFile::WriteLine( "Pick color" );
|
||||
PickMode( m_pickColor.GetCheck()==1 );
|
||||
}
|
||||
|
||||
BOOL CCustomColorDialog::OnInitDialog()
|
||||
{
|
||||
CColorDialog::OnInitDialog();
|
||||
|
||||
m_pickColor.SubclassDlgItem( IDC_PICK_COLOR,this );
|
||||
//m_pickColor.SubclassDlgItem( IDC_BUTTON2,this );
|
||||
|
||||
CBitmap bmp;
|
||||
//ASSERT( ::LoadBitmap(AfxGetResourceHandle(),MAKEINTRESOURCE(IDB_WATER)) );
|
||||
m_pickColor.SetBitmap( ::LoadBitmap(AfxGetResourceHandle(),MAKEINTRESOURCE(IDB_PICK_COLOR)) );
|
||||
|
||||
return TRUE; // return TRUE unless you set the focus to a control
|
||||
// EXCEPTION: OCX Property Pages should return FALSE
|
||||
}
|
||||
|
||||
void CCustomColorDialog::OnLButtonDown(UINT nFlags, CPoint point)
|
||||
{
|
||||
if (m_bPickMode)
|
||||
{
|
||||
CDC dcScreen;
|
||||
CDC dc;
|
||||
CBitmap bmp;
|
||||
dcScreen.CreateDC("DISPLAY", NULL, NULL, NULL);
|
||||
dc.CreateCompatibleDC( &dcScreen );
|
||||
|
||||
int width = GetDeviceCaps( dcScreen,HORZRES);
|
||||
int height = GetDeviceCaps( dcScreen,VERTRES);
|
||||
bmp.CreateCompatibleBitmap( &dcScreen,width,height );
|
||||
if (bmp.m_hObject)
|
||||
{
|
||||
// Select the bitmaps into the compatible DC.
|
||||
dc.SelectObject(bmp);
|
||||
|
||||
//Copy color data for the entire display into a
|
||||
//bitmap that is selected into a compatible DC.
|
||||
dc.BitBlt( 0,0,width,height, &dcScreen, 0,0, SRCCOPY );
|
||||
|
||||
uint *pImage = new uint[width*height*4];
|
||||
|
||||
BITMAPINFO bi;
|
||||
ZeroStruct(bi);
|
||||
bi.bmiHeader.biSize = sizeof(bi);
|
||||
bi.bmiHeader.biWidth = width;
|
||||
bi.bmiHeader.biHeight = -height;
|
||||
bi.bmiHeader.biBitCount = 32;
|
||||
bi.bmiHeader.biPlanes = 1;
|
||||
bi.bmiHeader.biCompression = BI_RGB;
|
||||
bi.bmiHeader.biXPelsPerMeter = width;
|
||||
bi.bmiHeader.biYPelsPerMeter = height;
|
||||
|
||||
|
||||
// Get RGBA raw memory.
|
||||
GetDIBits( dc,bmp,0,height,pImage,&bi,DIB_RGB_COLORS );
|
||||
|
||||
CPoint p;
|
||||
GetCursorPos( &p );
|
||||
|
||||
// get image color at clicked location.
|
||||
uint c = pImage[p.y*width + p.x];
|
||||
COLORREF col = c;
|
||||
|
||||
SetCurrentColor( RGB(GetBValue(col),GetGValue(col),GetRValue(col)) );
|
||||
|
||||
delete []pImage;
|
||||
}
|
||||
bmp.DeleteObject();
|
||||
dc.DeleteDC();
|
||||
dcScreen.DeleteDC();
|
||||
|
||||
// Pick Color.
|
||||
//GetWindowColo
|
||||
|
||||
PickMode(false);
|
||||
return;
|
||||
}
|
||||
|
||||
CColorDialog::OnLButtonDown(nFlags, point);
|
||||
}
|
||||
|
||||
void CCustomColorDialog::PickMode( bool bEnable )
|
||||
{
|
||||
if (m_bPickMode != bEnable)
|
||||
{
|
||||
m_bPickMode = bEnable;
|
||||
if (m_bPickMode)
|
||||
{
|
||||
SetCapture();
|
||||
SetCursor( m_pickerCusror );
|
||||
m_pickColor.SetCheck(1);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_pickColor.SetCheck(0);
|
||||
ReleaseCapture();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int CCustomColorDialog::OnCreate(LPCREATESTRUCT lpCreateStruct)
|
||||
{
|
||||
if (CColorDialog::OnCreate(lpCreateStruct) == -1)
|
||||
return -1;
|
||||
|
||||
//lpCreateStruct->
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user