C++绘制交通标志(二)

mengkun 302 0
  1. #include<windows.h>
  2. #include<tchar.h>
  3. BOOLEAN InitWindowClass(HINSTANCE hInstance, int nCmdShow);
  4. LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
  5. //主函数
  6. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
  7.     LPSTR lpCmdLine, int nCmdShow)
  8. {
  9.     MSG Message;
  10.     if (!InitWindowClass(hInstance, nCmdShow))
  11.     {
  12.         MessageBox(NULL, _T("创建窗口失败!"), _T("创建窗口"), NULL);
  13.         return 1;
  14.     }
  15.     while (GetMessage(&Message, 0, 0, 0))   //消息循环
  16.     {
  17.         TranslateMessage(&Message);
  18.         DispatchMessage(&Message);
  19.     }
  20.     return (int)Message.wParam;
  21. }
  22. //消息处理函数 
  23. LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, UINT wParam, LONG lParam)
  24. {
  25.     HDC hDC;            //定义指向设备上下文的句柄
  26.     PAINTSTRUCT PtStr;  //定义指向包含绘图信息的结构体变量
  27.     HBRUSH hBrush;          //定义指向画刷的句柄
  28.     HPEN hPen;          //定义指向画笔的句柄
  29.     HFONT myFont;   //定义字体句柄  
  30.     LPCWSTR String1 = L"102"//创建一个变量存储要输出的字符串
  31.     LPCWSTR String2 = L"沪 杭"//创建一个变量存储要输出的字符串  
  32.     static POINT myPoint1[6];    //定义多边形的坐标.  
  33.     static POINT myPoint2[7];    //定义多边形的坐标.  
  34.     static long i = 0;
  35.     long x1[6] = { 64,64,139,269,343,343 };   //定义多边形各点的X和Y坐标  
  36.     long y1[6] = { 11,138,202,202,138,11 };
  37.     long x2[7] = { 77,77,145,261,330,330,77 };   //定义多边形各点的X和Y坐标  
  38.     long y2[7] = { 24,132,190,190,132,24,24 };
  39.     switch (iMessage)  //处理消息
  40.     {
  41.     case WM_CREATE:
  42.         for (i = 0; i < 6; i++)     //吧多边形的各点坐标存进myPoint中  
  43.         {
  44.             myPoint1[i].x = x1[i];
  45.             myPoint1[i].y = y1[i];
  46.         }
  47.         for (i = 0; i < 7; i++)     //吧多边形的各点坐标存进myPoint中  
  48.         {
  49.             myPoint2[i].x = x2[i];
  50.             myPoint2[i].y = y2[i];
  51.         }
  52.         break;
  53.     case WM_PAINT:                              //处理绘图消息
  54.         hDC = BeginPaint(hWnd, &PtStr);
  55.         SetMapMode(hDC, MM_TEXT);       //设置映像模式
  56.         hPen = CreatePen(PS_SOLID, 2, RGB(0, 0, 0));    //设置画笔  
  57.         hBrush = CreateSolidBrush(RGB(255, 255, 255));   //设置一个单色填充画刷 
  58.         SelectObject(hDC, hBrush);              //选择画刷  
  59.         SelectObject(hDC, hPen);                //选择画笔
  60.         Rectangle(hDC, 4, 7, 392, 544);     //绘制矩形  
  61.         hPen = CreatePen(PS_SOLID, 1, RGB(0, 100, 34));    //设置画笔  
  62.         hBrush = CreateSolidBrush(RGB(0, 100, 34));   //设置一个单色填充画刷 
  63.         SelectObject(hDC, hBrush);              //选择画刷  
  64.         SelectObject(hDC, hPen);                //选择画笔
  65.         Polygon(hDC, myPoint1, 6);       //画板子
  66.         hPen = CreatePen(PS_SOLID, 8, RGB(255, 255, 255));    //设置画笔  
  67.         SelectObject(hDC, hPen);                //选择画笔
  68.         Polyline(hDC, myPoint2, 7);       //画边框线
  69.         hPen = CreatePen(PS_SOLID, 1, RGB(0, 0, 0));    //设置画笔  
  70.         hBrush = CreateSolidBrush(RGB(0, 0, 0));   //设置一个单色填充画刷 
  71.         SelectObject(hDC, hBrush);              //选择画刷  
  72.         SelectObject(hDC, hPen);                //选择画笔
  73.         Rectangle(hDC, 194, 203, 214, 517);     //绘制矩形  
  74.         SetTextColor(hDC, RGB(255, 255, 255));  //设置文本颜色为翠绿色  
  75.         SetBkMode(hDC, TRANSPARENT);  //设置背景颜色为透明色  
  76.         myFont = CreateFont(        //创建一个自定义字体  
  77.             100,             //字体的高度(字体大小)  
  78.             60,              //由系统根据高宽比选取字体最佳宽度值  
  79.             0,              //文本的倾斜度为0,表示水平  
  80.             0,              //字体的倾斜度为0  
  81.             FW_HEAVY,      //字体的粗度,FW_NORMAL为正常  FW_HEAVY为最粗  
  82.             0,              //非斜体字  
  83.             0,              //无下划线  
  84.             0,              //无删除线  
  85.             GB2312_CHARSET, //表示所用的字符集为ANSI_CHARSET  
  86.             OUT_DEFAULT_PRECIS, //输出精度为缺省精度  
  87.             CLIP_DEFAULT_PRECIS,    //剪裁精度为缺省精度  
  88.             DEFAULT_QUALITY,        //输出质量为缺省值  
  89.             DEFAULT_PITCH | FF_DONTCARE,//字间距和字体系列使用缺省值  
  90.             L"楷体"             //字体名称  
  91.         );
  92.         SelectObject(hDC, myFont);      //将自定义字体选入设备环境  
  93.         TextOutW(hDC, 111,32, String1, wcslen(String2));//使用当前字体输出文本  
  94.         myFont = CreateFont(        //创建一个自定义字体  
  95.             35,             //字体的高度(字体大小)  
  96.             0,              //由系统根据高宽比选取字体最佳宽度值  
  97.             0,              //文本的倾斜度为0,表示水平  
  98.             0,              //字体的倾斜度为0  
  99.             FW_NORMAL,      //字体的粗度,FW_NORMAL为正常  FW_HEAVY为最粗  
  100.             0,              //非斜体字  
  101.             0,              //无下划线  
  102.             0,              //无删除线  
  103.             GB2312_CHARSET, //表示所用的字符集为ANSI_CHARSET  
  104.             OUT_DEFAULT_PRECIS, //输出精度为缺省精度  
  105.             CLIP_DEFAULT_PRECIS,    //剪裁精度为缺省精度  
  106.             DEFAULT_QUALITY,        //输出质量为缺省值  
  107.             DEFAULT_PITCH | FF_DONTCARE,//字间距和字体系列使用缺省值  
  108.             L"黑体"             //字体名称  
  109.         );
  110.         SelectObject(hDC, myFont);      //将自定义字体选入设备环境  
  111.         TextOutW(hDC, 160, 137, String2, wcslen(String2));//使用当前字体输出文本  
  112.         hPen = CreatePen(PS_SOLID, 2, RGB(196, 196, 196));    //设置画笔  
  113.         hBrush = CreateSolidBrush(RGB(196, 196, 196));   //设置一个单色填充画刷 
  114.         SelectObject(hDC, hBrush);              //选择画刷  
  115.         SelectObject(hDC, hPen);                //选择画笔
  116.         MoveToEx(hDC, 23, 517, NULL);      //设置画笔当前位置  
  117.         LineTo(hDC, 382, 517);          //从画笔当前位置画一条线到指定位置  
  118.         for(i=0;i<20;i++)
  119.         {
  120.             MoveToEx(hDC, 45+17*i, 517, NULL);      //设置画笔当前位置  
  121.             LineTo(hDC, 25 + 17 * i, 538);          //从画笔当前位置画一条线到指定位置 
  122.         }
  123.         EndPaint(hWnd, &PtStr);                 //结束绘图
  124.         DeleteObject(myFont);   //删除自定义字体,释放内存 
  125.         return 0;
  126.     case WM_DESTROY:                        //结束应用程序
  127.         PostQuitMessage(0);
  128.         return 0;
  129.     default:                                    //其他消息处理程序
  130.         return(DefWindowProc(hWnd, iMessage, wParam, lParam));
  131.         break;
  132.     }
  133.     return 0;
  134. }
  135. BOOLEAN InitWindowClass(HINSTANCE hInstance, int nCmdShow)          //定义窗口类
  136. {
  137.     WNDCLASSEX wcex;
  138.     HWND hWnd;
  139.     TCHAR *szWindowClass = _T("沪杭");
  140.     TCHAR *szTitle = _T("沪杭");
  141.     wcex.cbSize = sizeof(WNDCLASSEX);
  142.     wcex.style = 0;                     //窗口类型为缺省类型
  143.     wcex.lpfnWndProc = WndProc;     //窗口处理函数为WndProc
  144.     wcex.cbClsExtra = 0;                //窗口类无扩展
  145.     wcex.cbWndExtra = 0;                //窗口实例无扩展
  146.     wcex.hInstance = hInstance;     //当前实例句柄
  147.     wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
  148.     //窗口的最小化图标为缺省图标
  149.     wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
  150.     //窗口采用箭头光标
  151.     wcex.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
  152.     //窗口背景为白色
  153.     wcex.lpszMenuName = NULL;           //窗口中无菜单
  154.     wcex.lpszClassName = szWindowClass;//窗口类名为"窗口示例"
  155.     wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
  156.     if (!RegisterClassEx(&wcex))        //如果注册失败则发出警告声音
  157.         return FALSE;
  158.     hWnd = CreateWindow(szWindowClass,                          //生成窗口
  159.         szTitle,
  160.         WS_OVERLAPPEDWINDOW,
  161.         CW_USEDEFAULT,      //窗口左上角的X坐标
  162.         0,                              //窗口左上角的Y坐标
  163.         410,                        //窗口宽度
  164.         585,                        //窗口高度
  165.         NULL,
  166.         NULL,
  167.         hInstance,
  168.         NULL);
  169.     if (!hWnd)
  170.         return FALSE;
  171.     ShowWindow(hWnd, nCmdShow);                 //显示窗口
  172.     UpdateWindow(hWnd);
  173.     return TRUE;
  174. }

运行效果如图

C++绘制交通标志(二)

打赏
发表评论
表情 图片 链接