windows-nt/Source/XPSP1/NT/shell/osshell/accesory/mspaint/imgdlgs.cpp
2020-09-26 16:20:57 +08:00

286 lines
7.3 KiB
C++

#include "stdafx.h"
#include "global.h"
#include "pbrush.h"
#include "pbrusdoc.h"
#include "pbrusfrm.h"
#include "pbrusvw.h"
#include "docking.h"
#include "minifwnd.h"
#include "bmobject.h"
#include "colorsrc.h"
#include "imgsuprt.h"
#include "imgwnd.h"
#include "cmpmsg.h"
#include "imgdlgs.h"
#include "ferr.h"
#include <colordlg.h>
#include <direct.h>
#ifdef _DEBUG
#undef THIS_FILE
static CHAR BASED_CODE THIS_FILE[] = __FILE__;
#endif
#include "memtrace.h"
CSize NEAR g_defaultTileGridSize(16, 15);
BOOL NEAR g_bDefaultTileGrid = FALSE;
BEGIN_MESSAGE_MAP(C3dDialog, CDialog)
ON_COMMAND(IDOK, OnRobustOK)
ON_WM_CTLCOLOR()
END_MESSAGE_MAP()
C3dDialog::C3dDialog(LPCTSTR lpszTemplateName, CWnd* pParentWnd)
: CDialog(lpszTemplateName, pParentWnd)
{
}
C3dDialog::C3dDialog(UINT nTemplateID, CWnd* pParentWnd)
: CDialog(nTemplateID, pParentWnd)
{
}
BOOL C3dDialog::OnInitDialog()
{
// automatically center the dialog relative to it's parent
CenterWindow(CmpCenterParent());
return CDialog::OnInitDialog();
}
void C3dDialog::OnRobustOK()
{
OnOK(); // ok to call "real" OnOK
}
HBRUSH C3dDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbrush = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
return hbrush;
}
BEGIN_MESSAGE_MAP(CImgGridDlg, C3dDialog)
ON_BN_CLICKED(IDC_PIXELGRID, OnClickPixelGrid)
ON_BN_CLICKED(IDC_TILEGRID, OnClickTileGrid)
END_MESSAGE_MAP()
CImgGridDlg::CImgGridDlg() : C3dDialog(IDD_IMGGRIDOPT)
{
m_bPixelGrid = theApp.m_bShowGrid;
m_bTileGrid = g_bDefaultTileGrid;
m_nWidth = g_defaultTileGridSize.cx;
m_nHeight = g_defaultTileGridSize.cy;
}
BOOL CImgGridDlg::OnInitDialog()
{
C3dDialog::OnInitDialog();
CheckDlgButton(IDC_PIXELGRID, m_bPixelGrid);
CheckDlgButton(IDC_TILEGRID, m_bTileGrid);
SetDlgItemInt(IDC_WIDTH, m_nWidth, FALSE);
SetDlgItemInt(IDC_HEIGHT, m_nHeight, FALSE);
GetDlgItem(IDC_TILEGRID)->EnableWindow(m_bPixelGrid);
GetDlgItem(IDC_WIDTH)->EnableWindow(m_bPixelGrid && m_bTileGrid);
GetDlgItem(IDC_HEIGHT)->EnableWindow(m_bPixelGrid && m_bTileGrid);
return TRUE;
}
void CImgGridDlg::OnClickPixelGrid()
{
m_bPixelGrid = !m_bPixelGrid;
CheckDlgButton(IDC_PIXELGRID, m_bPixelGrid);
GetDlgItem(IDC_TILEGRID)->EnableWindow(m_bPixelGrid);
GetDlgItem(IDC_WIDTH)->EnableWindow(m_bPixelGrid);
GetDlgItem(IDC_HEIGHT)->EnableWindow(m_bPixelGrid);
}
void CImgGridDlg::OnClickTileGrid()
{
m_bTileGrid = !m_bTileGrid;
CheckDlgButton(IDC_TILEGRID, m_bTileGrid);
GetDlgItem(IDC_WIDTH)->EnableWindow(m_bTileGrid);
GetDlgItem(IDC_HEIGHT)->EnableWindow(m_bTileGrid);
}
void CImgGridDlg::OnOK()
{
m_bPixelGrid = IsDlgButtonChecked(IDC_PIXELGRID);
m_bTileGrid = IsDlgButtonChecked(IDC_TILEGRID);
if (m_bTileGrid)
{
BOOL bTranslated;
if (GetDlgItem(IDC_WIDTH)->GetWindowTextLength() == 0)
{
m_nWidth = 1;
}
else
{
m_nWidth = GetDlgItemInt(IDC_WIDTH, &bTranslated, FALSE);
if (!bTranslated || m_nWidth < GRIDMIN || m_nWidth > GRIDMAX)
{
CmpMessageBoxPrintf(IDS_ERROR_GRIDRANGE, AFX_IDS_APP_TITLE,
MB_OK | MB_ICONEXCLAMATION, GRIDMIN, GRIDMAX); // LOCALIZATION
GetDlgItem(IDC_WIDTH)->SetFocus();
return;
}
}
if (GetDlgItem(IDC_HEIGHT)->GetWindowTextLength() == 0)
{
m_nHeight = 1;
}
else
{
m_nHeight = GetDlgItemInt(IDC_HEIGHT, &bTranslated, FALSE);
if (!bTranslated || m_nHeight < GRIDMIN || m_nHeight > GRIDMAX)
{
CmpMessageBoxPrintf(IDS_ERROR_GRIDRANGE, AFX_IDS_APP_TITLE,
MB_OK | MB_ICONEXCLAMATION, GRIDMIN, GRIDMAX); // LOCALIZATION
GetDlgItem(IDC_HEIGHT)->SetFocus();
return;
}
}
g_defaultTileGridSize.cx = m_nWidth;
g_defaultTileGridSize.cy = m_nHeight;
}
g_bDefaultTileGrid = m_bTileGrid;
C3dDialog::OnOK();
}
/***************************************************************************/
// CColorTable dialog
CColorTable::CColorTable( CWnd* pParent /*=NULL*/ )
: CDialog( CColorTable::IDD, pParent )
{
m_bLeft = TRUE;
m_iColor = 0;
}
/***************************************************************************/
void CColorTable::DoDataExchange( CDataExchange* pDX )
{
CDialog::DoDataExchange( pDX );
}
/***************************************************************************/
BEGIN_MESSAGE_MAP(CColorTable, CDialog)
//{{AFX_MSG_MAP(CColorTable)
ON_WM_DRAWITEM()
ON_WM_MEASUREITEM()
ON_LBN_DBLCLK(IDC_COLORLIST, OnDblclkColorlist)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/***************************************************************************/
// CColorTable message handlers
void CColorTable::OnDrawItem( int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct )
{
if ((int) lpDrawItemStruct->itemID >= 0)
{
CDC dcCombo;
CBrush brColor;
CPalette* pPalOld = NULL;
CRect rect = lpDrawItemStruct->rcItem;
dcCombo.Attach( lpDrawItemStruct->hDC );
if (theApp.m_pPalette)
{
pPalOld = dcCombo.SelectPalette( theApp.m_pPalette, FALSE );
dcCombo.RealizePalette();
}
brColor.CreateSolidBrush( (COLORREF)lpDrawItemStruct->itemData );
if ((lpDrawItemStruct->itemState & ODS_SELECTED) == ODS_SELECTED)
{
dcCombo.FillRect( &(lpDrawItemStruct->rcItem), &brColor );
rect.InflateRect( -theApp.m_cxFrame, -theApp.m_cyFrame );
}
dcCombo.FillRect( &(lpDrawItemStruct->rcItem), &brColor );
brColor.DeleteObject();
if ((lpDrawItemStruct->itemState & ODS_FOCUS) == ODS_FOCUS)
dcCombo.DrawFocusRect( &(lpDrawItemStruct->rcItem) );
if (pPalOld != NULL)
dcCombo.SelectPalette( pPalOld, FALSE );
}
CDialog::OnDrawItem( nIDCtl, lpDrawItemStruct );
}
/***************************************************************************/
BOOL CColorTable::OnInitDialog()
{
CDialog::OnInitDialog();
int iColorCnt = g_pColors->GetColorCount();
CListBox* pList = (CListBox*)GetDlgItem( IDC_COLORLIST );
for (int iLoop = 0; iLoop < iColorCnt; iLoop++)
{
pList->AddString( TEXT("") );
pList->SetItemData( iLoop, g_pColors->GetColor( iLoop ) );
}
return TRUE; // return TRUE unless you set the focus to a control
}
/***************************************************************************/
void CColorTable::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
lpMeasureItemStruct->itemHeight = theApp.m_cyCaption;
CDialog::OnMeasureItem(nIDCtl, lpMeasureItemStruct);
}
/***************************************************************************/
void CColorTable::OnDblclkColorlist()
{
}
/***************************************************************************/
void CColorTable::OnOK()
{
// m_iColor = ;
CDialog::OnOK();
}
/***************************************************************************/