Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

211 lines
5.0 KiB

/************************************************************************
* *
* 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;
}