www.pudn.com > DEMO_PALETTE.rar > DEMO_PALETTEVIEW.CPP


// Demo_PaletteView.cpp : implementation of the CDemo_PaletteView class 
// 
 
#include "stdafx.h" 
#include "Demo_Palette.h" 
 
#include "Demo_PaletteDoc.h" 
#include "Demo_PaletteView.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CDemo_PaletteView 
 
IMPLEMENT_DYNCREATE(CDemo_PaletteView, CFormView) 
 
BEGIN_MESSAGE_MAP(CDemo_PaletteView, CFormView) 
	//{{AFX_MSG_MAP(CDemo_PaletteView) 
	ON_BN_CLICKED(IDC_COLOR, OnColor) 
	ON_BN_CLICKED(IDC_PALETTE, OnPalette) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CDemo_PaletteView construction/destruction 
 
CDemo_PaletteView::CDemo_PaletteView() 
	: CFormView(CDemo_PaletteView::IDD) 
{ 
	//{{AFX_DATA_INIT(CDemo_PaletteView) 
	m_nRed = 0 ; 
	m_nGreen = 0 ; 
	m_nBlue = 0 ; 
	//}}AFX_DATA_INIT 
	// TODO: add construction code here 
} 
 
CDemo_PaletteView::~CDemo_PaletteView() 
{ 
} 
 
void CDemo_PaletteView::DoDataExchange(CDataExchange* pDX) 
{ 
	CFormView::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CDemo_PaletteView) 
	DDX_Text(pDX, IDC_EDIT2, m_nRed); 
	DDX_Text(pDX, IDC_EDIT3, m_nGreen); 
	DDX_Text(pDX, IDC_EDIT4, m_nBlue); 
	//}}AFX_DATA_MAP 
} 
 
BOOL CDemo_PaletteView::PreCreateWindow(CREATESTRUCT& cs) 
{ 
	// TODO: Modify the Window class or styles here by modifying 
	//  the CREATESTRUCT cs 
 
	return CFormView::PreCreateWindow(cs); 
} 
 
void CDemo_PaletteView::OnInitialUpdate() 
{ 
	CFormView::OnInitialUpdate(); 
	GetParentFrame()->RecalcLayout(); 
	ResizeParentToFit(); 
	//add 
	CMenu* pSysMenu = GetSystemMenu(FALSE); 
	if(pSysMenu != NULL) 
	{ 
		CString strAboutMenu; 
		strAboutMenu.LoadString (IDD_ABOUTBOX); 
		if(!strAboutMenu.IsEmpty ()) 
		{ 
			pSysMenu->AppendMenu (MF_SEPARATOR); 
			pSysMenu->AppendMenu (MF_STRING, IDD_ABOUTBOX, strAboutMenu); 
		} 
	} 
	 
	LPLOGPALETTE lp; 
	HANDLE hPal; 
	hPal = GlobalAlloc(GMEM_MOVEABLE,sizeof(LOGPALETTE) + 256 * sizeof(PALETTEENTRY)); 
	lp = (LPLOGPALETTE)GlobalLock(hPal); 
	lp->palVersion = 0x300; 
	lp->palNumEntries = 256; 
 
	int i; 
	for(i = 0; i < 256; i++) 
	{ 
		lp->palPalEntry[i].peBlue = 0; 
		lp->palPalEntry[i].peGreen = 0; 
		lp->palPalEntry[i].peRed = 0; 
		lp->palPalEntry[i].peFlags = 0; 
 
	} 
	 
	//create 85 red blue green color 
	for(i = 0; i < 85; i++) 
	{ 
		lp->palPalEntry[i].peRed = (BYTE)i * 3; 
		lp->palPalEntry[i].peFlags = 0; 
		  
		lp->palPalEntry[i + 86].peBlue = (BYTE)i * 3; 
		lp->palPalEntry[i+ 86].peFlags = 0; 
		 
		lp->palPalEntry[i + 171].peGreen = (BYTE)i * 3; 
		lp->palPalEntry[i + 171].peFlags = 0; 
	} 
 
	m_pPalette = new CPalette; 
	m_pPalette->CreatePalette (lp); 
 
	GlobalUnlock(hPal); 
	GlobalFree(hPal); 
 
	delete m_pPalette; 
 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CDemo_PaletteView diagnostics 
 
#ifdef _DEBUG 
void CDemo_PaletteView::AssertValid() const 
{ 
	CFormView::AssertValid(); 
} 
 
void CDemo_PaletteView::Dump(CDumpContext& dc) const 
{ 
	CFormView::Dump(dc); 
} 
 
CDemo_PaletteDoc* CDemo_PaletteView::GetDocument() // non-debug version is inline 
{ 
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDemo_PaletteDoc))); 
	return (CDemo_PaletteDoc*)m_pDocument; 
} 
#endif //_DEBUG 
 
///////////////////////////////////////////////////////////////////////////// 
// CDemo_PaletteView message handlers 
 
void CDemo_PaletteView::OnView()  
{ 
	// TODO: Add your control notification handler code here 
	this->UpdateData(TRUE); 
	CClientDC dc(this); 
	if(m_nFlag == 0)//使用调色板 
		m_color = RGB(m_nRed, m_nGreen, m_nBlue) ; 
	if(m_nFlag == 1)//使用颜色表对话框 
		m_color = m_color ; 
	dc.SelectPalette (m_pPalette, FALSE); 
	dc.RealizePalette (); 
	CRect rect; 
	CBrush brush(m_color); 
 
	this->GetClientRect (&rect); 
	CGdiObject* pOldObject = dc.SelectObject (&brush); 
	dc.Rectangle (rect.top ,rect.left ,rect.bottom ,rect.right); 
	dc.SelectObject (pOldObject); 
} 
 
void CDemo_PaletteView::OnColor()  
{ 
	// TODO: Add your control notification handler code here 
	m_nFlag = 1 ; 
	CColorDialog dlg ; 
	if(dlg.DoModal () == IDOK) 
	{  
		m_color = dlg.GetColor (); 
		OnView(); 
	} 
} 
 
void CDemo_PaletteView::OnPalette()  
{ 
	// TODO: Add your control notification handler code here 
	m_nFlag = 0 ; 
	OnView(); 
}