哲学家就餐问题――MFC演示程序(五)

2014-11-24 12:17:24 · 作者: · 浏览: 12
rect.top=pt_table.y-radius_table;
rect.bottom=pt_table.y+radius_table;

CDC *pDC=GetDC();
pDC->Ellipse(rect);

//计算每个椅子的中心坐标
double pi=3.1415926535;
double sin_temp,cos_temp;
double x=pi/3;
for (int i=0;i<6;i++) {

sin_temp=sin(i*x);
cos_temp=cos(i*x);
pt_chair[i].x=pt_table.x-(3*radius_table)/2.0*sin_temp;
pt_chair[i].y=pt_table.y-(3*radius_table)/2.0*cos_temp;
}
radius_chair=radius_table/4.0;

//计算每个椅子的外接矩形,并画出椅子
for (i=0;i<6;i++)
{
rect.left=pt_chair[i].x-radius_chair;
rect.right=pt_chair[i].x+radius_chair;
rect.top=pt_chair[i].y-radius_chair;
rect.bottom=pt_chair[i].y+radius_chair;
pDC->Ellipse(rect);
CString num;
num.Format("%d",i+1);
pDC->DrawText(num,&rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE);//单行居中
}


//计算叉子的起始坐标和终止
for (i=0;i<6;i++)
{


pt_chopstick_start[i].x=pt_table.x-radius_table*sin(i*x+pi/6);
pt_chopstick_start[i].y=pt_table.y-radius_table*cos(i*x+pi/6);

pt_chopstick_end[i].x=pt_table.x-25*sin(i*x+pi/6);
pt_chopstick_end[i].y=pt_table.y-25*cos(i*x+pi/6);

}




//画筷子
CPen pen(PS_SOLID,4,RGB(0,0,0));
pDC->SelectObject(&pen);
for (i=0;i<6;i++)
{
pDC->MoveTo(pt_chopstick_start[i]);
pDC->LineTo(pt_chopstick_end[i]);
}
}
void CPhilosophy_EatingDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting

SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}

//获得显示框的大小rect
CRect rect;
GetDlgItem(IDC_STATIC_TABLE)->GetWindowRect(&rect);
ScreenToClient(&rect);
/***************************************************************/
//计算这个rect的中心坐标,求出桌子中心的坐标,以及其外接矩形的坐标//
/***************************************************************/

//1.计算桌子中心的坐标

pt_table.x=(rect.right+rect.left)/2;
pt_table.y=(rect.bottom+rect.top)/2;

//2.计算桌子外接矩形的大小

radius_table=(rect.right-rect.left)/3;//我们去显示框长度的1/3做为桌子的半径

rect.left=pt_table.x-radius_table;
rect.right=pt_table.x+radius_table;
rect.top=pt_table.y-radius_table;
rect.bottom=pt_table.y+radius_table;

CDC *pDC=GetDC();
pDC->Ellipse(rect);

//计算每个椅子的中心坐标
double pi=3.1415926535;
double sin_temp,cos_temp;
double x=pi/3;
for (int i=0;i<6;i++) {

sin_temp=sin(i*x);
cos_temp=cos(i*x);
pt_chair[i].x=pt_table.x-(3*radius_table)/2.0*sin_temp;
pt_chair[i].y=pt_table.y-(3*radius_table)/2.0*cos_temp;
}
radius_chair=radius_table/4.0;

//计算每个椅子的外接矩形,并画出椅子
for (i=0;i<6;i++)
{
rect.left=pt_chair[i].x-radius_chair;
rect.right=pt_chair[i].x+radius_chair;
rect.top=pt_chair[i].y-radius_chair;
rect.bottom=pt_chair[i].y+radius_chair;
pDC->Ellipse(rect);
CString num;
num.Format("%d",i+1);
pDC->DrawText(num,&