filldlg.cpp

来自「故障诊断工作涉及的领域相当广泛」· C++ 代码 · 共 305 行

CPP
305
字号
// FillDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Cad.h"
#include "FillDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CFillDlg dialog


CFillDlg::CFillDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CFillDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CFillDlg)
	//}}AFX_DATA_INIT
}


void CFillDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);

	DDX_Control(pDX, IDC_PATTERN1, m_PatternBtn[0]);
	DDX_Control(pDX, IDC_PATTERN2, m_PatternBtn[1]);
	DDX_Control(pDX, IDC_PATTERN3, m_PatternBtn[2]);
	DDX_Control(pDX, IDC_PATTERN4, m_PatternBtn[3]);
	DDX_Control(pDX, IDC_PATTERN5, m_PatternBtn[4]);
	DDX_Control(pDX, IDC_PATTERN6, m_PatternBtn[5]);

	//{{AFX_DATA_MAP(CFillDlg)
	DDX_Control(pDX, IDC_LIST_PATTERN, m_PatternList);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CFillDlg, CDialog)
	//{{AFX_MSG_MAP(CFillDlg)
	ON_BN_CLICKED(IDC_BUTTON_MORE, OnButtonMore)
	ON_BN_CLICKED(IDC_BUTTON_PICK, OnButtonPick)
	ON_LBN_SELCHANGE(IDC_LIST_PATTERN, OnSelchangeListPattern)
	ON_BN_CLICKED(IDC_PATTERN1, OnPattern1)
	ON_BN_CLICKED(IDC_PATTERN2, OnPattern2)
	ON_BN_CLICKED(IDC_PATTERN3, OnPattern3)
	ON_BN_CLICKED(IDC_PATTERN4, OnPattern4)
	ON_BN_CLICKED(IDC_PATTERN5, OnPattern5)
	ON_BN_CLICKED(IDC_PATTERN6, OnPattern6)
	ON_WM_PAINT()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFillDlg message handlers

void CFillDlg::OnButtonMore() 
{
	static BOOL bExpand=TRUE;
	
	ExpandDialog(IDC_SLIDER,bExpand);
	bExpand=!bExpand;
}

void CFillDlg::OnButtonPick() 
{
	EndDialog(IDC_BUTTON_PICK);
}

void CFillDlg::ExpandDialog(int nResourceID, BOOL bExpand)
{
	static CRect	rcLarge;
	static CRect	rcSmall;
	CString			sExpand;

	if(rcLarge.IsRectNull())
	{
		CRect	rcLandmark;
		CWnd*	pWndLandmark=GetDlgItem(nResourceID);
		ASSERT(pWndLandmark);

		GetWindowRect(rcLarge);
		pWndLandmark->GetWindowRect(rcLandmark);

		rcSmall=rcLarge;
		rcSmall.bottom=rcLandmark.top;
	}

	if(bExpand)
	{
		SetWindowPos(NULL,0,0,rcLarge.Width(),rcLarge.Height(),
			SWP_NOMOVE|SWP_NOZORDER);

		sExpand="<<&Less";
		EnableVisibleChildren();
	}
	else
	{
		SetWindowPos(NULL,0,0,rcSmall.Width(),rcSmall.Height(),
			SWP_NOMOVE|SWP_NOZORDER);

		sExpand="&More>>";
		EnableVisibleChildren();
	}
	
	SetDlgItemText(IDC_BUTTON_MORE,sExpand);
}

void CFillDlg::EnableVisibleChildren()
{
	CWnd*	pWndCtrl=GetWindow(GW_CHILD);
	CRect	rcTest;
	CRect	rcControl;
	CRect	rcShow;

	GetWindowRect(rcShow);

	while(pWndCtrl!=NULL)
	{
		pWndCtrl->GetWindowRect(rcControl);

		if(rcTest.IntersectRect(rcShow,rcControl))
			pWndCtrl->EnableWindow(TRUE);
		else
			pWndCtrl->EnableWindow(FALSE);

		pWndCtrl=pWndCtrl->GetWindow(GW_HWNDNEXT);
	}
}

BOOL CFillDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	//设置未扩展对话框
	ExpandDialog(IDC_SLIDER,FALSE);

	//设置列表框选项
	m_PatternList.AddString("BDiagonal");
	m_PatternList.AddString("Cross");
	m_PatternList.AddString("DiagCross");
	m_PatternList.AddString("FDiagonal");
	m_PatternList.AddString("Horizontal");
	m_PatternList.AddString("Vertical");

	//设置图像按钮序号
	for(int i=0;i<6;i++)
	{
		m_PatternBtn[i].m_nIndex=i;
	}

	//预先设置对话框项
	m_nCurPattern=HS_BDIAGONAL,
	Update(0);

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CFillDlg::Update(int nIndex)
{
	//获得该选项的文本
	char tbuf[40];
	m_PatternList.GetText(nIndex,tbuf);
	SetDlgItemText(IDC_EDIT_PATTERN,tbuf);

	//设置列表框项
	m_PatternList.SetCurSel(nIndex);

	//在选择填充方式框绘图
	CWnd* pWnd=GetDlgItem(IDC_SELECTION);
	CRect	rect;
	pWnd->GetClientRect(rect);

	int		nBrushPattern[6]=
			{
				HS_BDIAGONAL,
				HS_CROSS,
				HS_DIAGCROSS,
				HS_FDIAGONAL,
				HS_HORIZONTAL,
				HS_VERTICAL,
			};

	CDC*	pDC=pWnd->GetDC();
	CBrush* pNewBrush=new CBrush;
	ASSERT(nIndex<6);
	pNewBrush->CreateHatchBrush(nBrushPattern[nIndex],RGB(0,0,0));
	CBrush* pOldBrush=pDC->SelectObject(pNewBrush);
	pDC->Rectangle(rect);
	pDC->SelectObject(pOldBrush);
	delete	pNewBrush;

	m_nCurPattern=nBrushPattern[nIndex];
}

void CFillDlg::OnPaint() 
{
	CPaintDC dc(this); // device context for painting

	//在选择填充方式框绘图
	CWnd* pWnd=GetDlgItem(IDC_SELECTION);
	CRect	rect;
	pWnd->GetClientRect(rect);

	CDC*	pDC=pWnd->GetDC();
	CBrush* pNewBrush=new CBrush;
	pNewBrush->CreateHatchBrush(m_nCurPattern,RGB(0,0,0));
	CBrush* pOldBrush=pDC->SelectObject(pNewBrush);
	pDC->Rectangle(rect);
	pDC->SelectObject(pOldBrush);
	delete	pNewBrush;	
}

void CFillDlg::OnSelchangeListPattern() 
{
	//获得当前选项
	int index=m_PatternList.GetCurSel();
	ASSERT(index!=LB_ERR);
	
	Update(index);
}

void CFillDlg::OnPattern1() 
{
	Update(0);	
}

void CFillDlg::OnPattern2() 
{
	Update(1);		
}

void CFillDlg::OnPattern3() 
{
	Update(2);	
}

void CFillDlg::OnPattern4() 
{
	Update(3);	
}

void CFillDlg::OnPattern5() 
{
	Update(4);	
}

void CFillDlg::OnPattern6() 
{
	Update(5);	
}

/////////////////////////////////////////////////////////////////////////////
// CPatternBtn

CPatternBtn::CPatternBtn()
{
}

CPatternBtn::~CPatternBtn()
{
}


BEGIN_MESSAGE_MAP(CPatternBtn, CButton)
	//{{AFX_MSG_MAP(CPatternBtn)
		// NOTE - the ClassWizard will add and remove mapping macros here.
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPatternBtn message handlers

void CPatternBtn::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
	CDC* pDC=CDC:: FromHandle(lpDrawItemStruct->hDC);
	CRect rect(lpDrawItemStruct->rcItem);

	int		nBrushPattern[6]=
			{
				HS_BDIAGONAL,
				HS_CROSS,
				HS_DIAGCROSS,
				HS_FDIAGONAL,
				HS_HORIZONTAL,
				HS_VERTICAL,
			};

	CBrush*		pNewBrush=new CBrush;
	pNewBrush->CreateHatchBrush(nBrushPattern[m_nIndex],RGB(0,0,0));
	CBrush* pOldBrush=pDC->SelectObject(pNewBrush);
	pDC->Rectangle(rect);
	pDC->SelectObject(pOldBrush);
	delete	pNewBrush;
}



⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?