用MFC畫一個美國隊長的盾牌
阿新 • • 發佈:2018-12-29
//美國隊長的盾牌 CPen p1Pane(PS_SOLID,1,RGB(255,0,0));//建立畫表盤的筆 CBrush b1Pane(RGB(225,0,0)); //建立畫表盤的刷子CBrush b1Pane(RGB(225,0,0)); //使用筆和刷子 pDC->SelectObject(&p1Pane); pDC->SelectObject(&b1Pane); CRect rect; GetClientRect(&rect);//獲取客戶端的矩形視窗 int w = rect.Width()/2; int h = rect.Height()/2; CPoint center(w,h); //定義圓心 int R = w<h?w:h; //定義半徑 int x = center.x; //得到圓心橫縱座標的數值 int y = center.y; // 開始繪圖 pDC->Ellipse(x-R,y-R,x+R,y+R); //畫外圈 CBrush b2Pane(RGB(255,255,255)); //定義刷子 pDC->SelectObject(&b2Pane); //換白色刷子 pDC->Ellipse(x-(R-(R*3)/13),y-(R-(R*3)/13),x+(R-(R*3)/13),y+(R-(R*3)/13));//畫裡圈 pDC->SelectObject(&b1Pane); //換紅色刷子 pDC->Ellipse(x-(R-2*(R*3)/13),y-(R-2*(R*3)/13),x+(R-2*(R*3)/13),y+(R-2*(R*3)/13));//畫裡圈 CBrush b3Pane(RGB(0,0,255)); pDC->SelectObject(&b3Pane); //換藍色刷子 pDC->Ellipse(x-(R*4)/12,y-(R*4)/12,x+(R*4)/12,y+(R*4)/12);//畫裡圈 //CBrush b4Pane(RGB(0,0,0)); //´´½¨»±íÅ̵ÄË¢×Ó CBrush b4Pane(RGB(255,255,255)); pDC->SelectObject(&b4Pane); //換白色刷子 //mPoint.x = x + int(hl*sin(hAngle*PI/180)); //mPoint.y = y - int(hl*cos(hAngle*PI/180)); const double PI = 3.1415926; int sR = (R*4)/12; //small R int ssR = sR/2; // small small R pDC->BeginPath(); //建立路徑,給五角星塗色 pDC->MoveTo(x, y-sR); //先算SR,再算SSR,不然會亂掉的 pDC->LineTo(x + int(ssR*sin(36*PI/180)),y - int(ssR*cos(36*PI/180))); pDC->LineTo(x + int(sR*sin(72*PI/180)),y - int(sR*cos(72*PI/180))); pDC->LineTo(x + int(ssR*sin(108*PI/180)),y - int(ssR*cos(108*PI/180))); pDC->LineTo(x + int(sR*sin(144*PI/180)),y - int(sR*cos(144*PI/180))); pDC->LineTo(x + int(ssR*sin(180*PI/180)),y - int(ssR*cos(180*PI/180))); pDC->LineTo(x + int(sR*sin(216*PI/180)),y - int(sR*cos(216*PI/180))); pDC->LineTo(x + int(ssR*sin(252*PI/180)),y - int(ssR*cos(252*PI/180))); pDC->LineTo(x + int(sR*sin(288*PI/180)),y - int(sR*cos(288*PI/180))); pDC->LineTo(x + int(ssR*sin(324*PI/180)),y - int(ssR*cos(324*PI/180))); pDC->LineTo(x, y-sR); //構成閉合迴路啊大哥 pDC->EndPath(); //路徑結束 //看的那篇部落格程式碼寫錯了,那個人真是誤人子弟,還是我自己改對的 CRgn rgn; rgn.CreateFromPath(pDC); pDC->InvertRgn(&rgn); pDC->FillRgn(&rgn,&b4Pane);
一開始結果是:
後來仔細一想肯定哪裡畫錯了,果然!!!!
結果對了!!!!
原因分析:
見下圖所示,正確的路徑是A--G--B--H--C--I--D--J--E--F--A(最後要回到A點)
然而我一開始做法是A--B---C--D--E--A,肯定就錯了呀。
剩下的沒什麼好講的,註釋說得很清楚了,要注意的就是你要不斷地去計算每個點的座標,保證正確,用三角函式,高中學的。
我也算是完成了用MFC畫美國隊長盾牌的小目標了哈哈哈,之前好像學著別人用python畫過一次???我忘記了。
參考資料:
都有錯的地方,不過好歹給了我指導,唉。不知道他們是不是哪裡抄來的
https://blog.csdn.net/u011467044/article/details/50488992?locationNum=11
https://blog.csdn.net/wang1025475397/article/details/9014241