首页 > 代码库 > [游戏学习24] MFC 各种绘图 字体学习
[游戏学习24] MFC 各种绘图 字体学习
>_<:这里包含字体设置及各种绘图,只要稍微看一下代码就能理解,这里不多介绍
>_<:Hello.h
1 #include<afxwin.h> 2 class CMyApp:public CWinApp 3 { 4 public: 5 virtual BOOL InitInstance(); 6 }; 7 class CMainWindow:public CFrameWnd 8 { 9 public: 10 CMainWindow(); 11 protected: 12 afx_msg void OnPaint(); 13 afx_msg void OnLButtonDown(UINT m_nFlags,CPoint point); 14 DECLARE_MESSAGE_MAP(); 15 };
>_<:Hello.cpp
1 #include<afxwin.h> 2 #include<math.h> 3 #include"Hello.h" 4 #define SEGMENTS 500 5 #define PI 3.1415926 6 7 int PenStyle[7]={PS_SOLID,PS_DASH,PS_DOT,PS_DASHDOT,PS_DASHDOTDOT,PS_NULL,PS_INSIDEFRAME};//实线\宽\窄\宽+窄\宽+2窄\没有\实线不外伸 8 int PenNum=0; 9 int BrushStye[6]={HS_BDIAGONAL,HS_FDIAGONAL,HS_CROSS,HS_HORIZONTAL,HS_DIAGCROSS,HS_VERTICAL};//45\135\90交叉\0\45交叉\90 10 int BrushNum=0; 11 12 CMyApp myApp; 13 ////////////////////////////////////////////// 14 //CMyApp member function 15 BOOL CMyApp::InitInstance() //初始化函数 16 { 17 m_pMainWnd=new CMainWindow; 18 m_pMainWnd->ShowWindow(m_nCmdShow); 19 m_pMainWnd->UpdateWindow(); 20 return TRUE; 21 } 22 ///////////////////////////////////////////// 23 //CMainWindow message map and member function 24 BEGIN_MESSAGE_MAP(CMainWindow,CFrameWnd) //消息映射 25 ON_WM_PAINT() 26 ON_WM_LBUTTONDOWN() 27 END_MESSAGE_MAP() 28 29 CMainWindow::CMainWindow() //创建窗口 30 { 31 Create(NULL,_T("The Hello"),WS_OVERLAPPED,CRect(20,40,640,440));//CFrameWnd下的成员函数8个参数,6个默认 32 } //这个参数产生垂直滚动条 33 34 void CMainWindow::OnPaint() 35 { 36 37 CRect rect; 38 GetClientRect(&rect); 39 40 /*72点,Arial,并带有下拉阴影生成的“Hello MFC" 41 CFont font; 42 font.CreatePointFont(720,_T("Arial"));//创建72点,Arial字体 43 44 CPaintDC dc(this); 45 dc.SelectObject(&font); 46 dc.SetBkMode(TRANSPARENT);//背景模式 设为透明 47 48 CString string=_T("Hello MFC"); 49 50 rect.OffsetRect(16,16);//从窗口中心向右向下偏移几个像素点的位置 51 dc.SetTextColor(RGB(192,192,192)); 52 dc.DrawText(string,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER); 53 54 rect.OffsetRect(-16,-16); 55 dc.SetTextColor(RGB(0,0,0)); 56 dc.DrawText(string,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);//单行、水平、竖直居中的文本 57 */ 58 59 /*LOFGFONT 自定义字体 呈现出旋转效果 60 CPaintDC dc(this); 61 dc.SetViewportOrg(rect.Width()/2,rect.Height()/2); 62 dc.SetBkMode(TRANSPARENT); 63 64 for(int i=0;i<3600;i+=360){ 65 LOGFONT lf;//自己创建一种字体 66 ::ZeroMemory (&lf,sizeof(lf)); 67 lf.lfHeight=180; //26个像素点 68 lf.lfWeight=FW_BOLD; //粗黑 69 //lf.lfItalic=TRUE; //倾斜 70 lf.lfEscapement=i; //配合使用每次旋转36度 71 lf.lfOrientation=i; 72 ::lstrcpy(lf.lfFaceName,_T("Arial")); 73 CFont font; 74 font.CreatePointFontIndirect(&lf); 75 76 CFont* pOldFont=dc.SelectObject(&font); 77 dc.TextOutA(0,0,CString(_T("Hello,MFC"))); 78 dc.SelectObject(pOldFont); 79 } 80 */ 81 } 82 83 void CMainWindow::OnLButtonDown(UINT m_nFlags,CPoint point)//点击鼠标左键画图 84 { 85 //CClientDC dc(this); 86 CPaintDC dc(this); 87 CRect rect; 88 GetClientRect(&rect); 89 dc.Rectangle(rect); 90 91 92 //dc.SetViewportOrg(rect.Width()/2,rect.Height()/2); 93 94 95 //dc.SetROP2(R2_BLACK);//绘图模式:颜色操作;2.1.3 96 //dc.MoveTo(rect.left,rect.top); 97 //dc.LineTo(rect.right,rect.bottom); 98 99 //POINT aPoint[5]={0,0,0,100,100,100,100,0,0,0}; 100 //dc.Polyline(aPoint,5); //将一系列点用线段连起来 101 102 //POINT bPoint[4]={0,100,100,100,100,0}; 103 //dc.MoveTo(0,0); 104 //dc.PolylineTo(bPoint,4); //从当前位置开始将一系列的点用线段连起来,并将当前位置移折致折线的终点 105 106 //int nWidth=rect.Width(); //画正弦曲线 107 //int nHeight=rect.Height(); 108 109 //CPoint aPoint[SEGMENTS]; 110 //for(int i=0;i<SEGMENTS;i++){ 111 // aPoint[i].x=(i*nWidth)/SEGMENTS; 112 // aPoint[i].y=(int)((nHeight/2)*(1-(sin((2*PI*i)/SEGMENTS)))); 113 //} 114 //dc.Polyline(aPoint,SEGMENTS); 115 116 /*画笔的创建和加载 117 CPen cPen(PenStyle[(PenNum++)%7],1,RGB(192,0,0));//==cPen.CreatePen(...); 118 dc.SelectObject(&cPen); 119 CBrush cBrush(BrushStye[(BrushNum++)%6],RGB(255,0,0)); 120 dc.SelectObject(&cBrush); 121 */ 122 123 /*扩展笔____必须是通路 124 LOGBRUSH lb; 125 lb.lbStyle=BS_SOLID; 126 lb.lbColor=RGB(0,255,0); 127 CPen pen(PS_GEOMETRIC|PenStyle[(PenNum++)%7]|PS_ENDCAP_FLAT| 128 PS_JOIN_ROUND,3,&lb); 129 CPen* pOldPen=dc.SelectObject(&pen); 130 */ 131 132 133 /*画刷原点 134 CPoint point(x1,y1); //矩形左上角的逻辑坐标 135 dc.LPtoDP(&point); //逻辑坐标转换成设备坐标 136 point.x %= 8; 137 point.y %= 8; 138 cBrush.UnrealizeObject();//允许画刷原点移动 139 dc.SetBrushOrg(point); //0~7之间 140 dc.SelectObject(&cBrush); 141 dc.Rectangle(x1,y1,x2,y2); 142 */ 143 144 145 /*建立通路 146 dc.BeginPath(); 147 dc.MoveTo(0,0); 148 dc.LineTo(100,200); 149 dc.LineTo(200,100); 150 dc.CloseFigure(); 151 dc.EndPath(); 152 dc.StrokePath(); 153 */ 154 155 156 /*ARC 157 CRect rect0(0,0,200,100); 158 CPoint cPoint1(0,0); 159 CPoint cPoint2(200,100); 160 dc.Rectangle(rect0); 161 dc.Arc(rect0,cPoint1,cPoint2);//外接矩形+从中心引出的两个边界线所夹的范围 162 dc.MoveTo(0,0); 163 dc.LineTo(200,100); 164 165 CRect rect1(0,102,200,202); 166 CPoint cPoint3(0,102); 167 CPoint cPoint4(200,202); 168 dc.Rectangle(rect1); 169 dc.ArcTo(rect1,cPoint3,cPoint4); 170 CPoint cPointNow=dc.GetCurrentPosition();//终点坐标 171 */ 172 173 /*纳克 174 POINT aPoint1[4]={120,100,120,200,250,150,500,40}; 175 POINT aPoint2[4]={120,100,50,350,250,200,500,40}; 176 dc.PolyBezier(aPoint1,4); 177 dc.PolyBezier(aPoint2,4); 178 */ 179 180 181 182 //dc.SetMapMode(MM_TEXT);//映射模式2.1.4 按比例缩放输出 183 //dc.Ellipse(0,0,100,100);//矩形内切圆(弧) 184 //dc.Ellipse(rect.right-100,rect.bottom-100,rect.right,rect.bottom); 185 //dc.Ellipse(point.x,point.y,point.x+100,point.y+100);//鼠标位置 186 187 //dc.SetMapMode(MM_ISOTROPIC);//可编程映射模式,自定义比例缩放(MM_ANISOTROPIC单位长度可以不同;MM_ISOTROPIC单位长度相同) 188 //dc.SetWindowExt(500,500); //设置窗口逻辑值为(0,0)到(500,500) 189 //dc.SetViewportExt(rect.Width(),rect.Height()); 190 //dc.Ellipse(0,0,500,500); 191 192 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。