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

mengkun 2.6K 2
  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 String2 = L"注 意 信 号 灯"//创建一个变量存储要输出的字符串  
  31.     switch (iMessage)  //处理消息
  32.     {
  33.     case WM_PAINT:                              //处理绘图消息
  34.         hDC = BeginPaint(hWnd, &PtStr);
  35.         SetMapMode(hDC, MM_TEXT);       //设置映像模式
  36.         hPen = CreatePen(PS_DOT, 30, RGB(0, 0, 0)); //设置画笔
  37.         SelectObject(hDC, hPen);        //选择画笔
  38.         MoveToEx(hDC, 201, 48, NULL);       //设置画笔当前位置
  39.         LineTo(hDC, 36, 327);           //      /
  40.         LineTo(hDC, 360, 327);          //   —
  41.         LineTo(hDC, 201, 48);           //      \
  42.         hPen = CreatePen(PS_DOT, 58, RGB(0, 0, 0)); //设置画笔
  43.         SelectObject(hDC, hPen);        //选择画笔
  44.         MoveToEx(hDC, 201, 164, NULL);      //设置画笔当前位置
  45.         LineTo(hDC, 201, 275);          //      /
  46.         hPen = CreatePen(PS_SOLID, 1, RGB(255, 0, 0));  //设置画笔
  47.         hBrush = CreateSolidBrush(RGB(255, 0, 0));  //设置一个单色填充画刷
  48.         SelectObject(hDC, hBrush);              //选择画刷
  49.         SelectObject(hDC, hPen);                //选择画笔
  50.         Ellipse(hDC, 179, 143, 224, 188);       //红灯
  51.         hPen = CreatePen(PS_SOLID, 1, RGB(236, 240, 20));   //设置画笔
  52.         hBrush = CreateSolidBrush(RGB(236, 240, 20));   //设置一个单色填充画刷
  53.         SelectObject(hDC, hBrush);              //选择画刷
  54.         SelectObject(hDC, hPen);                //选择画笔
  55.         Ellipse(hDC, 179, 199, 224, 199 + 45);      //黄灯
  56.         hPen = CreatePen(PS_SOLID, 1, RGB(0, 255, 0));  //设置画笔
  57.         hBrush = CreateSolidBrush(RGB(0, 255, 0));  //设置一个单色填充画刷
  58.         SelectObject(hDC, hBrush);              //选择画刷
  59.         SelectObject(hDC, hPen);                //选择画笔
  60.         Ellipse(hDC, 179, 251, 224, 251+45);        //绿灯
  61.         myFont = CreateFont(        //创建一个自定义字体  
  62.             55,             //字体的高度(字体大小)  
  63.             0,              //由系统根据高宽比选取字体最佳宽度值  
  64.             0,              //文本的倾斜度为0,表示水平  
  65.             0,              //字体的倾斜度为0  
  66.             FW_NORMAL,      //字体的粗度,FW_NORMAL为正常  FW_HEAVY为最粗  
  67.             0,              //非斜体字  
  68.             0,              //无下划线  
  69.             0,              //无删除线  
  70.             GB2312_CHARSET, //表示所用的字符集为ANSI_CHARSET  
  71.             OUT_DEFAULT_PRECIS, //输出精度为缺省精度  
  72.             CLIP_DEFAULT_PRECIS,    //剪裁精度为缺省精度  
  73.             DEFAULT_QUALITY,        //输出质量为缺省值  
  74.             DEFAULT_PITCH | FF_DONTCARE,//字间距和字体系列使用缺省值  
  75.             L"微软雅黑"             //字体名称  
  76.         );
  77.         SetTextColor(hDC, RGB(0, 0, 0));  //设置文本颜色为翠绿色  
  78.         SetBkMode(hDC, TRANSPARENT);  //设置背景颜色为透明色  
  79.         SelectObject(hDC, myFont);      //将自定义字体选入设备环境  
  80.         TextOutW(hDC, 57, 379, String2, wcslen(String2));//使用当前字体输出文本  
  81.         EndPaint(hWnd, &PtStr);                 //结束绘图
  82.         DeleteObject(myFont);   //删除自定义字体,释放内存 
  83.         return 0;
  84.     case WM_DESTROY:                        //结束应用程序
  85.         PostQuitMessage(0);
  86.         return 0;
  87.     default:                                    //其他消息处理程序
  88.         return(DefWindowProc(hWnd, iMessage, wParam, lParam));
  89.         break;
  90.     }
  91.     return 0;
  92. }
  93. BOOLEAN InitWindowClass(HINSTANCE hInstance, int nCmdShow)          //定义窗口类
  94. {
  95.     WNDCLASSEX wcex;
  96.     HWND hWnd;
  97.     TCHAR *szWindowClass = _T("注意信号灯");
  98.     TCHAR *szTitle = _T("注意信号灯");
  99.     wcex.cbSize = sizeof(WNDCLASSEX);
  100.     wcex.style = 0;                     //窗口类型为缺省类型
  101.     wcex.lpfnWndProc = WndProc;     //窗口处理函数为WndProc
  102.     wcex.cbClsExtra = 0;                //窗口类无扩展
  103.     wcex.cbWndExtra = 0;                //窗口实例无扩展
  104.     wcex.hInstance = hInstance;     //当前实例句柄
  105.     wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
  106.     //窗口的最小化图标为缺省图标
  107.     wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
  108.     //窗口采用箭头光标
  109.     wcex.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
  110.     //窗口背景为白色
  111.     wcex.lpszMenuName = NULL;           //窗口中无菜单
  112.     wcex.lpszClassName = szWindowClass;//窗口类名为"窗口示例"
  113.     wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
  114.     if (!RegisterClassEx(&wcex))        //如果注册失败则发出警告声音
  115.         return FALSE;
  116.     hWnd = CreateWindow(szWindowClass,                          //生成窗口
  117.         szTitle,
  118.         WS_OVERLAPPEDWINDOW,
  119.         CW_USEDEFAULT,      //窗口左上角的X坐标
  120.         0,                              //窗口左上角的Y坐标
  121.         410,                        //窗口宽度
  122.         530,                        //窗口高度
  123.         NULL,
  124.         NULL,
  125.         hInstance,
  126.         NULL);
  127.     if (!hWnd)
  128.         return FALSE;
  129.     ShowWindow(hWnd, nCmdShow);                 //显示窗口
  130.     UpdateWindow(hWnd);
  131.     return TRUE;
  132. }

运行效果如图

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

发表评论 取消回复
表情 图片 链接 代码

  1. easonlee
    easonlee Lv 1

    编译错误
    C:\Users\LiZhi\Documents\Tencent Files\1807365372\FileRecv\MobileFile\C++\not game,but we can use in our life\redgreenlight.cpp In function 'LRESULT WndProc(HWND, UINT, UINT, LONG)':
    31 23 C:\Users\LiZhi\Documents\Tencent Files\1807365372\FileRecv\MobileFile\C++\not game,but we can use in our life\redgreenlight.cpp [Error] converting to execution character set: Illegal byte sequence
    84 13 C:\Users\LiZhi\Documents\Tencent Files\1807365372\FileRecv\MobileFile\C++\not game,but we can use in our life\redgreenlight.cpp [Error] converting to execution character set: Illegal byte sequence
    ……

    • easomlee
      easomlee Lv 1

      @easonlee是不是要用vc编译??

分享