程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 利用繪圖函數創建填充區,繪圖函數填充區

利用繪圖函數創建填充區,繪圖函數填充區

編輯:C++入門知識

利用繪圖函數創建填充區,繪圖函數填充區


  1 #include <Windows.h>
  2 #include <tchar.h>
  3 BOOLEAN InitWindowClass(HINSTANCE hInstance, int nCmdShow);
  4 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
  5 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
  6 {
  7     MSG msg;
  8     if (!InitWindowClass(hInstance, nCmdShow))
  9     {
 10         MessageBox(NULL, L"創建窗口失敗!", _T("創建窗口"), NULL);
 11         return 1;
 12     }
 13     while (GetMessage(&msg, NULL, 0, 0))
 14     {
 15         TranslateMessage(&msg);
 16         DispatchMessage(&msg);
 17     }
 18 
 19     return(int)msg.wParam;
 20 }
 21 
 22 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
 23 {
 24     HDC hDC;
 25     PAINTSTRUCT PtStr;
 26     HBRUSH hBrush;
 27     HPEN hPen;
 28     static int dispMode = -1;
 29     LPCTSTR str;
 30     switch (message)
 31     {
 32     case WM_LBUTTONDOWN:
 33         InvalidateRect(hWnd, NULL, TRUE);
 34         break;
 35     case WM_PAINT:
 36         hDC = BeginPaint(hWnd, &PtStr);
 37         dispMode = (dispMode + 1) % 6;
 38         switch (dispMode)
 39         {
 40         case 0:
 41             str = _T("映射方式MM_TEXT:缺省的映射方式");
 42             SetMapMode(hDC, MM_TEXT);                    //設置映射方式為缺省方式
 43             TextOut(hDC, 0, 0, str, _tcsclen(str));        //輸出映射方式及映射比例
 44             break;
 45         case 1:
 46             str = _T("映射方式MM_ISOTROPIC:窗口坐標為20×20,映射為視口尺寸為10×10,圖形縮小1倍");
 47             SetMapMode(hDC, MM_ISOTROPIC);                //設置映射方式
 48             SetWindowExtEx(hDC, 20, 20, NULL);            //窗口矩形為×20
 49             SetViewportExtEx(hDC, 10, 10, NULL);        //映射為視口的矩形為×10
 50             TextOut(hDC, 0, 0, str, _tcsclen(str));
 51             break;
 52         case 2:
 53             str = _T("映射方式MM_ISOTROPIC:窗口坐標為10×10,映射為視口尺寸為20×20,圖形放大1倍");
 54             SetMapMode(hDC, MM_ISOTROPIC);
 55             SetWindowExtEx(hDC, 10, 10, NULL);            //窗口矩形為10×10
 56             SetViewportExtEx(hDC, 20, 20, NULL);        //映射為視口的矩形為20×20
 57             TextOut(hDC, 0, 0, str, _tcsclen(str));
 58             break;
 59         case 3:
 60             str = _T("映射方式MM_ANISOTROPIC:窗口坐標為10×10,映射為視口尺寸為20×10,圖形橫向放大1倍,縱向不變");
 61             SetMapMode(hDC, MM_ANISOTROPIC);
 62             SetWindowExtEx(hDC, 10, 10, NULL);            //窗口矩形為10×10
 63             SetViewportExtEx(hDC, 20, 10, NULL);        //映射為視口的矩形為20×10
 64             TextOut(hDC, 0, 0, str, _tcsclen(str));
 65             break;
 66         case 4:
 67             str = _T("映射方式MM_ANISOTROPIC:窗口坐標為10×10,映射為視口尺寸為20×5,圖形橫向放大1倍,縱向縮小1倍");
 68             SetMapMode(hDC, MM_ANISOTROPIC);
 69             SetWindowExtEx(hDC, 10, 10, NULL);            //窗口矩形為10×10
 70             SetViewportExtEx(hDC, 20, 5, NULL);            //映射為視口的矩形為20×5
 71             TextOut(hDC, 0, 0, str, _tcsclen(str));
 72             break;
 73         case 5:
 74             str = _T("映射方式MM_ISOTROPIC:窗口坐標為10×10,映射為視口尺寸為20×5,圖形為了保持原縱橫比,系統會調整映射比例");
 75             SetMapMode(hDC, MM_ISOTROPIC);
 76             SetWindowExtEx(hDC, 10, 10, NULL);            //窗口矩形為10×10
 77             SetViewportExtEx(hDC, 20, 5, NULL);            //映射為視口的矩形為20×5
 78             TextOut(hDC, 0, 0, str, _tcsclen(str));
 79             break;
 80         }
 81         hPen = (HPEN)GetStockObject(BLACK_PEN);            //設置畫筆為系統預定義的黑色畫筆
 82         hBrush = (HBRUSH)GetStockObject(DKGRAY_BRUSH);    //深灰色畫刷
 83         SelectObject(hDC, hBrush);                        //選擇畫刷
 84         SelectObject(hDC, hPen);                        //選擇畫筆
 85         RoundRect(hDC, 50, 120, 100, 200, 15, 15);        //圓角矩形
 86         hBrush = (HBRUSH)GetStockObject(LTGRAY_BRUSH);    //淡灰色畫刷
 87         SelectObject(hDC, hBrush);                        //選擇畫刷
 88         Ellipse(hDC, 150, 50, 200, 150);                //橢圓
 89         hBrush = (HBRUSH)GetStockObject(HOLLOW_BRUSH);    //采用系統預定義的虛畫刷
 90         SelectObject(hDC, hBrush);                        //選擇畫刷
 91         Pie(hDC, 250, 50, 300, 100, 250, 50, 300, 50);    //餅形
 92         EndPaint(hWnd, &PtStr);                        //結束繪畫
 93         break;
 94     case WM_DESTROY:
 95         PostQuitMessage(0);                            //調用PostQuitMessage發出WM_QUIT消息
 96         break;
 97     default:
 98         return DefWindowProc(hWnd, message, wParam, lParam);//默認時采用系統消息默認處理函數
 99         break;
100     }
101     return 0;
102 }
103 
104 BOOLEAN InitWindowClass(HINSTANCE hInstance, int nCmdShow)
105 {
106     WNDCLASSEX wcex;
107     HWND hWnd;
108     TCHAR szWindowClass[] = L"窗口示例";
109     TCHAR szTitle[] = L"映射模式及填充示例圖";
110     wcex.cbSize = sizeof(WNDCLASSEX);
111     wcex.style = 0;
112     wcex.lpfnWndProc = WndProc;
113     wcex.cbClsExtra = 0;
114     wcex.cbWndExtra = 0;
115     wcex.hInstance = hInstance;
116     wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
117     wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
118     wcex.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
119     wcex.lpszMenuName = NULL;
120     wcex.lpszClassName = szWindowClass;
121     wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
122     if (!RegisterClassEx(&wcex))
123         return FALSE;
124     hWnd = CreateWindow(
125         szWindowClass,
126         szTitle,
127         WS_OVERLAPPEDWINDOW,
128         CW_USEDEFAULT, CW_USEDEFAULT,
129         CW_USEDEFAULT, CW_USEDEFAULT,
130         NULL,
131         NULL,
132         hInstance,
133         NULL
134         );
135     if (!hWnd)
136         return FALSE;
137     ShowWindow(hWnd, nCmdShow);
138     UpdateWindow(hWnd);
139     return TRUE;
140 }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved