212 lines
5.0 KiB
C++
212 lines
5.0 KiB
C++
/************************************************************************
|
|
* *
|
|
* PAGECOLO.CPP *
|
|
* *
|
|
* Copyright (C) Microsoft Corporation 1995 *
|
|
* All Rights reserved. *
|
|
* *
|
|
************************************************************************/
|
|
|
|
#include "stdafx.h"
|
|
#include "resource.h"
|
|
|
|
#include "pagecolo.h"
|
|
|
|
#ifdef _DEBUG
|
|
#undef THIS_FILE
|
|
static char BASED_CODE THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CPageColor property page
|
|
|
|
CPageColor::CPageColor(CPropWindows *pOwner) :
|
|
CWindowsPage(CPageColor::IDD, pOwner)
|
|
{
|
|
m_rgbMain = m_rgbNSR = 0x00FFFFFF;
|
|
m_ppenHilight = new CPen(PS_SOLID, 1, GetSysColor(COLOR_3DHILIGHT));
|
|
m_ppenShadow = new CPen(PS_SOLID, 1, GetSysColor(COLOR_3DSHADOW));
|
|
}
|
|
|
|
CPageColor::~CPageColor()
|
|
{
|
|
delete m_ppenHilight;
|
|
delete m_ppenShadow;
|
|
}
|
|
|
|
BOOL CPageColor::OnInitDialog()
|
|
{
|
|
CWnd *pwnd = GetDlgItem(IDC_GROUP);
|
|
pwnd->GetWindowRect(&m_rcColors);
|
|
ScreenToClient(&m_rcColors);
|
|
pwnd->ShowWindow(SW_HIDE);
|
|
|
|
m_rcNonScroll = m_rcColors;
|
|
InflateRect(&m_rcNonScroll, -2, -2);
|
|
m_rcScroll = m_rcNonScroll;
|
|
|
|
m_rcNonScroll.bottom = m_rcNonScroll.top + 2 * cySansSerif;
|
|
m_rcScroll.top = m_rcNonScroll.bottom + 1;
|
|
|
|
return CWindowsPage::OnInitDialog();
|
|
}
|
|
|
|
void CPageColor::InitializeControls(void)
|
|
{
|
|
// White by default.
|
|
COLORREF rgbMain = 0x00FFFFFF;
|
|
COLORREF rgbNSR = 0x00FFFFFF;
|
|
|
|
if (m_pwsmag) {
|
|
if (m_pwsmag->grf & FWSMAG_RGBMAIN)
|
|
rgbMain = m_pwsmag->rgbMain;
|
|
|
|
if (m_pwsmag->grf & FWSMAG_RGBNSR)
|
|
rgbNSR = m_pwsmag->rgbNSR;
|
|
}
|
|
|
|
// If colors changed, create new brushes and repaint.
|
|
if (m_rgbMain != rgbMain) {
|
|
m_rgbMain = rgbMain;
|
|
InvalidateRect(&m_rcScroll);
|
|
}
|
|
if (m_rgbNSR != rgbNSR) {
|
|
m_rgbNSR = rgbNSR;
|
|
InvalidateRect(&m_rcNonScroll);
|
|
}
|
|
|
|
// Enable or disable buttons.
|
|
GetDlgItem(IDC_BUTTON_NONSCROLL_CLR)->EnableWindow((BOOL) m_pwsmag);
|
|
GetDlgItem(IDC_BUTTON_SCROLL_CLR)->EnableWindow((BOOL) m_pwsmag);
|
|
}
|
|
|
|
void CPageColor::SaveAndValidate(CDataExchange* pDX)
|
|
{
|
|
ASSERT(m_pwsmag);
|
|
|
|
if (m_rgbMain == 0x00FFFFFF)
|
|
m_pwsmag->grf &= ~FWSMAG_RGBMAIN;
|
|
else {
|
|
m_pwsmag->grf |= FWSMAG_RGBMAIN;
|
|
m_pwsmag->rgbMain = m_rgbMain;
|
|
}
|
|
|
|
if (m_rgbNSR == 0x00FFFFFF)
|
|
m_pwsmag->grf &= ~FWSMAG_RGBNSR;
|
|
else {
|
|
m_pwsmag->grf |= FWSMAG_RGBNSR;
|
|
m_pwsmag->rgbNSR = m_rgbNSR;
|
|
}
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CPageColor, CWindowsPage)
|
|
//{{AFX_MSG_MAP(CPageColor)
|
|
ON_BN_CLICKED(IDC_BUTTON_NONSCROLL_CLR, OnButtonNonscrollClr)
|
|
ON_BN_CLICKED(IDC_BUTTON_SCROLL_CLR, OnButtonScrollClr)
|
|
ON_WM_LBUTTONDBLCLK()
|
|
//}}AFX_MSG_MAP
|
|
ON_MESSAGE(WM_CONTEXTMENU, OnContextMenu)
|
|
ON_MESSAGE(WM_HELP, OnHelp)
|
|
ON_WM_PAINT()
|
|
END_MESSAGE_MAP()
|
|
|
|
void CPageColor::OnButtonNonscrollClr()
|
|
{
|
|
CColorDialog clrdlg(m_rgbNSR, 0, this);
|
|
if (clrdlg.DoModal() == IDOK) {
|
|
if (clrdlg.GetColor() != m_rgbNSR) {
|
|
m_rgbNSR = clrdlg.GetColor();
|
|
InvalidateRect(&m_rcNonScroll);
|
|
}
|
|
}
|
|
}
|
|
|
|
void CPageColor::OnButtonScrollClr()
|
|
{
|
|
CColorDialog clrdlg(m_rgbMain, 0, this);
|
|
if (clrdlg.DoModal() == IDOK) {
|
|
if (clrdlg.GetColor() != m_rgbMain) {
|
|
m_rgbMain = clrdlg.GetColor();
|
|
InvalidateRect(&m_rcScroll);
|
|
}
|
|
}
|
|
}
|
|
|
|
void CPageColor::OnLButtonDblClk(UINT nFlags, CPoint point)
|
|
{
|
|
if (PtInRect(&m_rcScroll, point))
|
|
OnButtonScrollClr();
|
|
else if (PtInRect(&m_rcNonScroll, point))
|
|
OnButtonNonscrollClr();
|
|
}
|
|
|
|
void CPageColor::DrawColor(CDC* pdc, BOOL fNonScroll)
|
|
{
|
|
RECT rc;
|
|
UINT ids;
|
|
COLORREF rgb;
|
|
|
|
// Determine the color, rectangle, and string.
|
|
if (fNonScroll) {
|
|
rc = m_rcNonScroll;
|
|
rgb = m_rgbNSR;
|
|
ids = IDS_NONSCROLL;
|
|
}
|
|
else {
|
|
rc = m_rcScroll;
|
|
rgb = m_rgbMain;
|
|
ids = IDS_SCROLL;
|
|
}
|
|
|
|
// Get the string we're going to display.
|
|
char ach[80];
|
|
int cch = LoadString(hinstApp, ids, ach, sizeof(ach));
|
|
|
|
// Fill the background.
|
|
CBrush brush(rgb);
|
|
CBrush *pbrSav = pdc->SelectObject(&brush);
|
|
pdc->PatBlt(rc.left, rc.top,
|
|
rc.right - rc.left, rc.bottom - rc.top, PATCOPY);
|
|
pdc->SelectObject(pbrSav);
|
|
|
|
// Display the string transparently over the background.
|
|
pdc->SetBkMode(TRANSPARENT);
|
|
pdc->SelectObject(hfontSansSerif);
|
|
pdc->ExtTextOut(rc.left + 2, rc.top + cySansSerif / 2,
|
|
ETO_CLIPPED, &rc, ach, cch, NULL);
|
|
}
|
|
|
|
void CPageColor::OnPaint()
|
|
{
|
|
CPaintDC dc(this); // device context for painting
|
|
|
|
// Draw a sunken edge.
|
|
BevelRect(dc, m_rcColors, m_ppenShadow, m_ppenHilight);
|
|
|
|
// Draw a black line inside the left and top edge.
|
|
dc.MoveTo(m_rcColors.left + 1, m_rcColors.bottom - 2);
|
|
dc.LineTo(m_rcColors.left + 1, m_rcColors.top + 1);
|
|
dc.LineTo(m_rcColors.right - 2, m_rcColors.top + 1);
|
|
|
|
// Draw a black line between the two regions.
|
|
dc.MoveTo(m_rcNonScroll.left, m_rcNonScroll.bottom);
|
|
dc.LineTo(m_rcNonScroll.right - 1, m_rcNonScroll.bottom);
|
|
|
|
// Draw the color wells.
|
|
DrawColor(&dc, TRUE);
|
|
DrawColor(&dc, FALSE);
|
|
}
|
|
|
|
static const DWORD aHelpIDs[] = {
|
|
IDC_COMBO_WINDOWS, IDH_COMBO_WINDOWS,
|
|
IDC_BUTTON_NONSCROLL_CLR, IDH_BUTTON_NONSCROLL_CLR,
|
|
IDC_BUTTON_SCROLL_CLR, IDH_BUTTON_SCROLL_CLR,
|
|
0, 0
|
|
};
|
|
|
|
const DWORD* CPageColor::GetHelpIDs()
|
|
{
|
|
return aHelpIDs;
|
|
}
|
|
|