15,978
社区成员
发帖
与我相关
我的任务
分享
void CMyDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CClientDC dc(this);
CBrush br;
for(int j=0; j<5; j++)
{
if(m_aRgn[j]->PtInRegion(point))
{
switch(j)
{
case 0:
br.CreateSolidBrush(RGB(255,128,0));
dc.FillRgn(m_aRgn[j],&br);
dc.SetBkMode(TRANSPARENT);
dc.TextOut(178,80,"+");
//afxDump << "+\n";
break;
case 1:
br.CreateSolidBrush(RGB(128,255,0));
dc.FillRgn(m_aRgn[j],&br);
dc.SetBkMode(TRANSPARENT);
dc.TextOut(84,170,"<");
//afxDump << "<\n";
break;
case 2:
br.CreateSolidBrush(RGB(0,255,128));
dc.FillRgn(m_aRgn[j],&br);
dc.SetBkMode(TRANSPARENT);
dc.TextOut(178,260,"-");
//afxDump << "-\n";
break;
case 3:
br.CreateSolidBrush(RGB(0,128,255));
dc.FillRgn(m_aRgn[j],&br);
dc.SetBkMode(TRANSPARENT);
dc.TextOut(264,168,">");
//afxDump << ">\n";
break;
}
}
}
CDialog::OnLButtonDown(nFlags, point);
}
// CMyDlg message handlers
BOOL CMyDlg::CalculateRegigns(CDC &dc)
{
float xStartAngle=45.0f;
float xSweepAngle=90.f;
//
for(int jj=0;jj<4;jj++)
{
//
dc.BeginPath();
dc.MoveTo(m_Center.x, m_Center.y);
dc.AngleArc(m_Center.x, m_Center.y, m_OutRadius,
xStartAngle+xSweepAngle*jj, xSweepAngle);
dc.MoveTo(m_Center.x, m_Center.y);
dc.AngleArc(m_Center.x, m_Center.y, m_InRadius,
xStartAngle+xSweepAngle*jj, xSweepAngle);
dc.LineTo(m_Center.x, m_Center.y);
dc.EndPath();
#if 1
HRGN rgn=PathToRegion(dc);
if(rgn)
m_aRgn[jj]=CRgn::FromHandle(rgn);
#else
dc.StrokeAndFillPath();
#endif
}
return TRUE;
}
2 点击测试
void CMyDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
// ScreenToClient(&point);
for(int j=0; j<5; j++)
{
if(m_aRgn[j]->PtInRegion(point))
{
switch(j)
{
case 0:
afxDump << "+\n";
break;
case 1:
afxDump << "<\n";
break;
case 2:
afxDump << "-\n";
break;
case 3:
afxDump << ">\n";
break;
}
}
}
CDialog::OnLButtonDown(nFlags, point);
}
3 定义
protected:
CPoint m_Center;
int m_OutRadius;
int m_InRadius;
CRgn *m_aRgn[4];