• [游戏模版1] MFC最小框架(base function including)


    >_<:Here are the template of mini-MFC include:

    • CPen,CBrush,Front,Paint Line and some other graph.
    • OnPaint message,OnLeftButtonDown message,you can through it know more

    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};//4513590交叉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 }
  • 相关阅读:
    vue-cli的使用
    修饰模式(Decorator结构型)C#简单例子
    c#继承中的函数调用
    c#桥接模式(bridge结构模式)
    c#浅谈反射内存的处理
    C#中的try catch finally
    C#微信公众号开发系列教程(接收事件推送与消息排重)
    用 C# 读取二进制文件
    c#语言-多线程中的锁系统(一)
    .NET程序内,访问私有或者保护成员的技巧
  • 原文地址:https://www.cnblogs.com/zjutlitao/p/3732445.html
Copyright © 2020-2023  润新知