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 + -
显示快捷键?