北郵程序設(shè)計(jì)繪圖程序_第1頁(yè)
北郵程序設(shè)計(jì)繪圖程序_第2頁(yè)
北郵程序設(shè)計(jì)繪圖程序_第3頁(yè)
北郵程序設(shè)計(jì)繪圖程序_第4頁(yè)
北郵程序設(shè)計(jì)繪圖程序_第5頁(yè)
已閱讀5頁(yè),還剩55頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院1C++程序設(shè)計(jì)實(shí)踐第1章繪圖程序設(shè)計(jì)

北京郵電大學(xué)信息與通信工程學(xué)院

2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-2-第一章繪圖程序設(shè)計(jì)1.1項(xiàng)目分析和設(shè)計(jì)1.2窗口程序基礎(chǔ)知識(shí)1.3繪圖基礎(chǔ)知識(shí)1.4繪圖程序Draw的實(shí)現(xiàn)2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-3-1.1項(xiàng)目分析和設(shè)計(jì)

2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-4-1.1項(xiàng)目分析和設(shè)計(jì)需求分析1.功能需求

能繪制由基本圖元(點(diǎn)、線、圓、橢圓、文字)組成的各種圖形或動(dòng)畫,可以響應(yīng)鼠標(biāo)事件(菜單項(xiàng))。2.界面要求

應(yīng)用程序提供用戶區(qū)供繪圖使用,用戶區(qū)可以顯示坐標(biāo)軸、原點(diǎn)等。2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-5-1.1項(xiàng)目分析和設(shè)計(jì)界面設(shè)計(jì)

在界面上可設(shè)置菜單,布置菜單項(xiàng),按用戶需求完成特定繪圖功能,在繪圖客戶區(qū)可以顯示坐標(biāo)軸、原點(diǎn)等。2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-6-1.1項(xiàng)目分析和設(shè)計(jì)總體設(shè)計(jì)軟件架構(gòu)2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-7-1.1項(xiàng)目分析和設(shè)計(jì)總體設(shè)計(jì)類關(guān)系圖2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-8-1.2窗口程序基礎(chǔ)知識(shí)

2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-9-1.2窗口程序基礎(chǔ)知識(shí)WINDOWSAPI基礎(chǔ)1.句柄句柄(handle)是整個(gè)Windows編程的基礎(chǔ),用于標(biāo)識(shí)應(yīng)用程序中不同的對(duì)象。比如一個(gè)窗口、圖標(biāo)、輸出設(shè)備或文件,均對(duì)應(yīng)著一個(gè)句柄。句柄是指一個(gè)對(duì)象的標(biāo)識(shí),而指針是一個(gè)對(duì)象的首地址。但從實(shí)際處理的角度講,即可以把句柄定義為指針,又可以把它定義為同類對(duì)象數(shù)組的索引。句柄通常是一個(gè)32位的整數(shù)(32位計(jì)算機(jī)系統(tǒng))。2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-10-2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-11-1.2窗口程序基礎(chǔ)知識(shí)WINDOWSAPI基礎(chǔ)2.事件和消息Windows應(yīng)用程序是基于事件驅(qū)動(dòng)的,對(duì)于每個(gè)事件(如鼠標(biāo)事件,窗口改變事件,定時(shí)器事件等),系統(tǒng)都將產(chǎn)生相應(yīng)的消息。消息會(huì)被放入應(yīng)用程序的消息隊(duì)列中,然后應(yīng)用程序?qū)南㈥?duì)列中取出消息,最后分發(fā)給相應(yīng)的窗口過(guò)程函數(shù)進(jìn)行處理。2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-12-1.2窗口程序基礎(chǔ)知識(shí)WINDOWSAPI基礎(chǔ)2.事件和消息2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-13-1.2窗口程序基礎(chǔ)知識(shí)WINDOWSAPI基礎(chǔ)2.事件和消息2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-14-1.2窗口程序基礎(chǔ)知識(shí)WINDOWSAPI基礎(chǔ)2.事件和消息

對(duì)于WindowsAPI應(yīng)用程序的編寫者,他所能看到的是事件的分發(fā)(僅一點(diǎn)點(diǎn))和事件的響應(yīng),而事件的響應(yīng)則是編程的主要工作所在。2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-15-1.2窗口程序基礎(chǔ)知識(shí)基本的WINDOWS應(yīng)用程序Winmain()函數(shù)

intAPIENTRYWinMain(HINSTANCEhInstance,//當(dāng)前實(shí)例句柄HINSTANCEhPrevInstance,//前實(shí)例句柄LPSTRlpCmdLine,//命令行參數(shù)intnShowCmd)//指明窗口如何顯示{ MSGmsg; //聲明一個(gè)保存消息的變量WNDCLASSwndclass;2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-16-//初始化窗口類,并向操作系統(tǒng)注冊(cè)該窗口類if(!hPrevInstance) {wndclass.style=CS_HREDRAW|CS_VREDRAW;wndclass.lpfnWndProc=ccc_win_proc;//指定窗口函數(shù)(消息處理入口)wndclass.cbClsExtra=0;wndclass.cbWndExtra=0;wndclass.hInstance=hInstance;wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION); //指定窗口類的圖標(biāo)wndclass.hCursor=LoadCursor(NULL,IDC_ARROW); //指定窗口類的光標(biāo)wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//指定填充窗口背景的畫刷wndclass.lpszMenuName=NULL;wndclass.lpszClassName="CCC_WIN";//窗口類名稱

RegisterClass(&wndclass); }2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-17-//初始化窗口,生成窗口并顯示更新窗口 chartitle[80]; GetModuleFileName(hInstance,title,sizeof(title));//得到當(dāng)前運(yùn)行程序的全路徑 HWNDhwnd=CreateWindow("CCC_WIN", title, WS_OVERLAPPEDWINDOW&~WS_MAXIMIZEBOX, CW_USEDEFAULT, CW_USEDEFAULT, GetSystemMetrics(SM_CYFULLSCREEN)*3/4, GetSystemMetrics(SM_CYFULLSCREEN)*3/4, NULL, NULL, hInstance, 0);//用注冊(cè)的窗口類生成窗口實(shí)例//顯示窗口 ShowWindow(hwnd,nShowCmd); UpdateWindow(hwnd);//若UpdateRegion不空,則發(fā)送WM_PAINT消息2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-18-

while(GetMessage(&msg,NULL,0,0)) //消息循環(huán),對(duì)用戶操作進(jìn)行響應(yīng) { TranslateMessage(&msg); //將虛擬鍵消息轉(zhuǎn)換成字符消息,再送入消息隊(duì)列 DispatchMessage(&msg); //分發(fā)消息,將消息隊(duì)列中消息發(fā)送到窗口處理函數(shù) } returnmsg.wParam;}2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-19-1.2窗口程序基礎(chǔ)知識(shí)基本的WINDOWS應(yīng)用程序2、窗口過(guò)程函數(shù)

窗口過(guò)程函數(shù)是一個(gè)對(duì)每一個(gè)消息都進(jìn)行處理的函數(shù)。其一般形式為帶有多個(gè)分支的switch結(jié)構(gòu)。通過(guò)把傳送來(lái)的消息和系統(tǒng)中預(yù)定義的消息常量進(jìn)行比較,從而判斷消息的類型,執(zhí)行不同的操作。2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-20-LRESULTCALLBACKccc_win_proc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam){ PAINTSTRUCTps; //thedisplay'spaintstruct HDCmainwin_hdc; switch(message) { caseWM_PAINT://窗口刷新消息 mainwin_hdc=BeginPaint(hwnd,&ps);//置UpdateRegion為空 //ccc_win_main(); //調(diào)用用戶的繪圖程序

EndPaint(hwnd,&ps); break; caseWM_DESTROY: PostQuitMessage(0); break;

default://調(diào)用默認(rèn)的消息處理函數(shù),對(duì)其他的消息進(jìn)行處理 returnDefWindowProc(hwnd,message,wParam,lParam); }return0;}2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-21-1.2窗口程序基礎(chǔ)知識(shí)基本的WINDOWS應(yīng)用程序3、例1-1編寫一個(gè)簡(jiǎn)單的windows程序,只有基本框架代碼,沒(méi)有具體功能。

2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-22-1.2窗口程序基礎(chǔ)知識(shí)基本的WINDOWS應(yīng)用程序3、例1-1第一步:建立一個(gè)新的工程啟動(dòng)VisualStudio,選擇菜單項(xiàng)“文件”,點(diǎn)擊“新建---項(xiàng)目”,在彈出窗口中項(xiàng)目類型選擇“win32”,繼續(xù)選擇“win32項(xiàng)目”,為項(xiàng)目起名“Draw”。

2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-23-1.2窗口程序基礎(chǔ)知識(shí)基本的WINDOWS應(yīng)用程序3、例1-1第一步:建立一個(gè)新的工程點(diǎn)擊“確定”后,在彈出窗口中進(jìn)行“應(yīng)用程序設(shè)置”,選擇“windows應(yīng)用程序”,選中“空項(xiàng)目”,然后點(diǎn)擊“完成”。

2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-24-1.2窗口程序基礎(chǔ)知識(shí)基本的WINDOWS應(yīng)用程序3、例1-1第二步:設(shè)置字符集在生成的解決方案名稱上,單擊鼠標(biāo)右鍵,在彈出的菜單條上,選擇“屬性”2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-25-1.2窗口程序基礎(chǔ)知識(shí)基本的WINDOWS應(yīng)用程序3、例1-1第二步:設(shè)置字符集在彈出的窗口中,選擇“配置屬性”=>“常規(guī)”,點(diǎn)擊“字符集”右側(cè)下拉框選中“未設(shè)置”。然后“確定”。2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-26-1.2窗口程序基礎(chǔ)知識(shí)基本的WINDOWS應(yīng)用程序3、例1-1第三步:為工程添加源文件/頭文件/資源文件??梢孕陆ㄔ次募焉厦鎃inMain和窗口過(guò)程函數(shù)的代碼復(fù)制,也可以直接把本書附帶的程序添加到工程里。要記得包含頭文件。#include<cstdlib>#include"windows.h"usingnamespacestd;然后就可以編譯運(yùn)行了!2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-27-1.2窗口程序基礎(chǔ)知識(shí)資源文件Windows資源可以是標(biāo)準(zhǔn)的,也可以是自定義的。標(biāo)準(zhǔn)資源中的數(shù)據(jù)描述了圖標(biāo)、光標(biāo)、菜單、對(duì)話框、位圖和加速鍵表等。應(yīng)用程序自定義的資源,則包含任何特定應(yīng)用程序需要的數(shù)據(jù)。2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-28-1.2窗口程序基礎(chǔ)知識(shí)資源文件例1-2增加菜單第四步:為工程添加如下資源文件。//fig.rc#include“resource.h”//MenuIDC_TEST2MENUBEGINPOPUP"&File"BEGIN MENUITEM"時(shí)鐘", IDM_FIG1 MENUITEM"Fig2", IDM_FIG2 MENUITEM"E&xit", IDM_EXITENDEND2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-29-1.2窗口程序基礎(chǔ)知識(shí)資源文件例1-2增加菜單第四步:為工程添加如下資源文件。//Resource.h

#defineIDM_FIG1 104#defineIDM_FIG2 105#defineIDM_EXIT 106

#defineIDC_TEST2 1092023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-30-1.2窗口程序基礎(chǔ)知識(shí)資源文件例1-2增加菜單第五步:消息循環(huán)部分需要增加菜單命令消息處理。staticintmenuId=0;

caseWM_COMMAND: wmId=LOWORD(wParam); wmEvent=HIWORD(wParam);

switch(wmId) { caseIDM_FIG1: menuId=IDM_FIG1; InvalidateRect(hwnd,NULL,TRUE); break;

caseIDM_FIG2: menuId=IDM_FIG2; InvalidateRect(hwnd,NULL,TRUE); break;

caseIDM_EXIT: DestroyWindow(hwnd); break; } break;2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-31-1.2窗口程序基礎(chǔ)知識(shí)資源文件例1-2增加菜單第五步:窗口類注冊(cè)之前需要添加菜單資源,在RegisterClass(&wndclass);語(yǔ)句之前增加下面的語(yǔ)句。wndclass.lpszMenuName=MAKEINTRESOURCE(IDC_TEST2);然后就可以編譯運(yùn)行了!2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-32-1.3繪圖基礎(chǔ)知識(shí)

2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-33-1.3繪圖基礎(chǔ)知識(shí)圖形處理技術(shù)GDI圖形技術(shù)OpenGL技術(shù)DirectX技術(shù)2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-34-1.3繪圖基礎(chǔ)知識(shí)圖形設(shè)備接口GDI設(shè)備描述表(DeviceContext,DC),用于應(yīng)用程序和物理設(shè)備之間進(jìn)行交互,它是GDI的關(guān)鍵元素。設(shè)備描述表是一種數(shù)據(jù)結(jié)構(gòu),它包括了一個(gè)設(shè)備(如顯示器和打印機(jī))繪制屬性的相關(guān)信息。所有的繪制操作通過(guò)設(shè)備描述表進(jìn)行。應(yīng)用程序不能直接訪問(wèn)設(shè)備描述表,只能由各種相關(guān)的API函數(shù)通過(guò)設(shè)備描述表句柄來(lái)間接訪問(wèn)該結(jié)構(gòu)。

2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-35-1.3繪圖基礎(chǔ)知識(shí)圖形設(shè)備接口GDI顯示器設(shè)備描述表,總是與某個(gè)窗口或這窗口上的某個(gè)顯示區(qū)域相關(guān)。

Windows窗口一旦創(chuàng)建,它就自動(dòng)地產(chǎn)生了與之相對(duì)應(yīng)的設(shè)備描述表數(shù)據(jù)結(jié)構(gòu),用戶可運(yùn)用該結(jié)構(gòu),實(shí)現(xiàn)對(duì)窗口顯示區(qū)域的GDI操作,如劃線、寫文本、繪制位圖、填充等,并且所有這些操作均要通過(guò)設(shè)備描述表句柄來(lái)進(jìn)行。2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-36-1.3繪圖基礎(chǔ)知識(shí)圖形設(shè)備接口GDI畫筆和畫刷是最重要的繪圖工具,而選用繪圖工具進(jìn)行繪圖操作的一般步驟是:(1)獲得設(shè)備環(huán)境句柄;(2)獲得繪圖工具;(3)在設(shè)備環(huán)境中選擇繪圖工具;(4)調(diào)用輸出函數(shù)進(jìn)行輸出;(5)在設(shè)備環(huán)境中選擇原來(lái)的繪圖工具,并刪除新的繪圖工具。2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-37-1.3繪圖基礎(chǔ)知識(shí)基本圖形繪制(熟悉GDI函數(shù))例1-3在屏幕上畫若干個(gè)點(diǎn),并顯示一個(gè)文本在例1-1的基礎(chǔ)上,編寫DrawPixels函數(shù),并在消息處理時(shí)調(diào)用它。caseWM_PAINT: hdc=BeginPaint(hwnd,&ps); DrawPixels(hwnd,hdc); EndPaint(hwnd,&ps);2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-38-1.3繪圖基礎(chǔ)知識(shí)基本圖形繪制(熟悉GDI函數(shù))如果要在窗口工作區(qū)中繪圖,則必須遵守某些規(guī)則。每當(dāng)將WM_PAINT消息發(fā)送到應(yīng)用程序時(shí),就必須重畫工作區(qū)。這是因?yàn)橛性S多外部事件需要應(yīng)用程序重新繪制這個(gè)窗口——如用戶調(diào)整了正在繪圖的窗口大小,或者是在用戶移動(dòng)另一個(gè)窗口以暴露以前隱藏的窗口。caseWM_PAINT: hdc=BeginPaint(hwnd,&ps); DrawPixels(hwnd,hdc); EndPaint(hwnd,&ps);2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-39-1.3繪圖基礎(chǔ)知識(shí)基本圖形繪制(熟悉GDI函數(shù))例1-3在屏幕上畫若干個(gè)點(diǎn),并顯示一個(gè)文本voidDrawPixels(HWNDhwnd,HDChdc){ //獲得客戶區(qū)域 RECTr; GetClientRect(hwnd,&r); //設(shè)置映像模式 SetMapMode(hdc,MM_ISOTROPIC);

//設(shè)置窗口坐標(biāo)范圍 SetWindowExtEx(hdc,100,100,NULL); //設(shè)置視口坐標(biāo)范圍 SetViewportExtEx(hdc,r.right,r.bottom,NULL); //客戶區(qū)背景為黑色 FillRect(hdc,&r,(HBRUSH)GetStockObject( BLACK_BRUSH)); //輸出一個(gè)文本 TextOut(hdc,50,50,TEXT("TEST"), lstrlen(TEXT("TEST"))); //畫20個(gè)點(diǎn) for(inti=0;i<20;i++) SetPixelV(hdc,20+i,20+i,RGB(255,255,255));}2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-40-1.3繪圖基礎(chǔ)知識(shí)基本圖形繪制(熟悉GDI函數(shù))2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-41-1.3繪圖基礎(chǔ)知識(shí)基本圖形繪制(熟悉GDI函數(shù))例1-4在屏幕上畫一個(gè)三角形voidDrawTriangle(HWNDhwnd,HDChdc){ //獲得客戶區(qū)域 RECTr; GetClientRect(hwnd,&r);

//設(shè)置映像模式 SetMapMode(hdc,MM_ISOTROPIC); //設(shè)置窗口坐標(biāo)范圍 SetWindowExtEx(hdc,100,100,NULL); //設(shè)置視口坐標(biāo)范圍 SetViewportExtEx(hdc,r.right,r.bottom,NULL); //繪制三角形 Pointp[]={Point(10,10),Point(10,19),Point(22,19)}; MoveToEx(hdc,p[0].get_x(),p[0].get_y(),NULL); for(inti=0;i<3;i++) { if(i==2) {LineTo(hdc,p[0].get_x(),p[0].get_y()); continue; } LineTo(hdc,p[i+1].get_x(),p[i+1].get_y()); }}classPoint{public:Point(doublex1=0.0,doubley1=0.0){x=x1;y=y1;}doubleget_x()const{returnx;}doubleget_y()const{returny;}private:doublex,y;};2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-42-1.3繪圖基礎(chǔ)知識(shí)基本圖形繪制(熟悉GDI函數(shù))例1-4在屏幕上畫一個(gè)三角形在例1-1的基礎(chǔ)上,編寫DrawTriangle函數(shù),并在消息處理時(shí)調(diào)用它。caseWM_PAINT: hdc=BeginPaint(hwnd,&ps); DrawTriangle(hwnd,hdc); EndPaint(hwnd,&ps);2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-43-1.4繪圖程序Draw的實(shí)現(xiàn)基本圖元類基類Shape類是抽象類classShape{public: virtualvoidmove(doubledx,doubledy)=0; virtualvoidSetColor(COLORREFmColor)=0;};2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-44-1.4繪圖程序Draw的實(shí)現(xiàn)基本圖元類classPoint:publicShape{public:Point(){x=0.0,y=0.0;}Point(doublex1,doubley1){x=x1;y=y1;}doubleget_x()const{returnx;}doubleget_y()const{returny;}COLORREFget_color()const{returncolor;}

virtualvoidmove(doubledx,doubledy) {x+=dx;y+=dy;}virtualvoidSetColor(COLORREFmColor) {color=mColor;}private:doublex;doubley;COLORREFcolor;};2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-45-1.4繪圖程序Draw的實(shí)現(xiàn)基本圖元類classLine:publicShape{public:Line(){}Line(Pointp1,Pointp2){from=p1;to=p2;}Pointget_start()const{returnfrom;}Pointget_end()const{returnto;}COLORREFget_color()const{returncolor;}

virtualvoidmove(doubledx,doubledy);virtualvoidSetColor(COLORREFmColor) {color=mColor;}private:Pointfrom;Pointto;COLORREFcolor;};voidLine::move(doubledx,doubledy){from.move(dx,dy);to.move(dx,dy);}2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-46-1.4繪圖程序Draw的實(shí)現(xiàn)基本圖元類classCircle:publicShape{public:Circle(){radius=0.0;}Circle(Pointp,doubler){center=p;radius=r;}Pointget_center()const{returncenter;}doubleget_radius()const{returnradius;}COLORREFget_color()const{returncolor;}virtualvoidmove(doubledx,doubledy) {center.move(dx,dy);}virtualvoidSetColor(COLORREFmColor) {color=mColor;}private:Pointcenter;doubleradius;COLORREFcolor;};2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-47-1.4繪圖程序Draw的實(shí)現(xiàn)基本圖元類classMessage{public:Message(){}Message(Points,doublex);Message(Points,conststring&m) {start=s;text=m;}Pointget_start()const{returnstart;}stringget_text()const{returntext;}voidmove(doubledx,doubledy) {start.move(dx,dy);}private:Pointstart;stringtext;};Message::Message(Points,doublex){start=s;charbuf[20];sprintf(buf,"%g",x);text=buf;}2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-48-1.4繪圖程序Draw的實(shí)現(xiàn)繪圖類classGraphicWindow{public:GraphicWindow():_user_xmin(-10),_user_xmax(10),_user_ymin(10),_user_ymax(-10){}//設(shè)置窗口坐標(biāo)voidcoord(doublexmin,doubleymin,doublexmax,doubleymax){_user_xmin=xmin,_user_xmax=xmax;_user_ymin=ymin,_user_ymax=ymax;}//清除窗口voidclear();

2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-49-//顯示一個(gè)點(diǎn)GraphicWindow&operator<<(Pointp);//顯示一個(gè)圓GraphicWindow&operator<<(Circlec);//顯示一條線GraphicWindow&operator<<(Lines);//顯示一個(gè)文本串GraphicWindow&operator<<(Messaget);//打開(kāi)一個(gè)窗口voidopen(HWNDhwnd,HDCmainwin_hdc);

private://邏輯到設(shè)備x坐標(biāo)轉(zhuǎn)換intuser_to_disp_x(doublex)const;//邏輯到設(shè)備y坐標(biāo)轉(zhuǎn)換intuser_to_disp_y(doubley)const;//設(shè)備到邏輯x坐標(biāo)轉(zhuǎn)換doubledisp_to_user_x(intx)const;//設(shè)備到邏輯y坐標(biāo)轉(zhuǎn)換doubledisp_to_user_y(inty)const;2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-50-//畫一個(gè)點(diǎn)voidpoint(doublex,doubley,COLORREFmColor);//畫一條線voidline(doublexfrom,doubleyfrom,doublexto,doubleyto,COLORREFmColor);//畫一個(gè)橢圓voidellipse(doublex,doubley,doublera,doublerb,COLORREFmColor);//圖形方式輸出一個(gè)文本串voidtext(stringt,doublex,doubley);

//邏輯坐標(biāo)double_user_xmin,_user_xmax,_user_ymin,_user_ymax;

//設(shè)備坐標(biāo)(像素為單位)int_disp_xmax,_disp_ymax;//設(shè)備環(huán)境句柄HDC_hdc;};2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-51-1.4繪圖程序Draw的實(shí)現(xiàn)例1-7繪制一個(gè)能夠?qū)崟r(shí)走動(dòng)的時(shí)鐘:表盤是黑色的,時(shí)針紅色,分針綠色,秒針黃色,表盤上的時(shí)鐘點(diǎn)為白色。2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-52-#include"ctime"#include"cmath"#include"cstdlib"#include"Resource.h"#include"ccc_shap.h"#include"ccc_msw.h"

#definePI3.1415926GraphicWindowcwin;

voidmclock(){ Shape*pShape;

cwin<<Message(Point(-2,7),"會(huì)走動(dòng)的時(shí)鐘");

2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-53- /*畫表盤*/ intradius=6; Pointorg(0,0); pShape=&org; pShape->SetColor(RGB(255,255,255));//白色 cwin<<org; CircleclkPlate(org,radius); pShape=&clkPlate; pShape->SetColor(RGB(0,0,255)); //藍(lán)色 cwin<<clkPlate;

doublex,y,x_s,y_s,x_m,y_m,x_h,y_h; inti; for(i=0;i<12;i++) { x=0.9*radius*sin(PI*i/6); y=0.9*radius*cos(PI*i/6);

PointmPoint(x,y); pShape=&mPoint; pShape->SetColor((RGB(255,255,255))); cwin<<mPoint; }

2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-54- structtmlocal; time_tt; //獲取系統(tǒng)日歷時(shí)間 t=time(NULL); //將日歷時(shí)間轉(zhuǎn)化為本地時(shí)間 localtime_s(&local,&t);

x_s=0.89*radius*sin(PI*(local.tm_sec)/30); y_s=0.89*radius*cos(PI*(local.tm_sec)/30);

x_m=0.7*radius*sin(PI*(local.tm_min)/30); y_m=0.7*radius*cos(PI*(local.tm_min)/30);

x_h=0.5*radius*sin(PI*(local.tm_hour)/6); y_h=0.5*radius*cos(PI*(local.tm_hour)/6);

2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-55- *畫表針*/ PointhEnd(x_h,y_h),mEnd(x_m,y_m),sEnd(x_s,y_s); LinehLine(org,hEnd),mLine(org,mEnd),sLine(org,sEnd);

hLine.SetColor((RGB(255,0,0))); //紅色 mLine.SetColor((RGB(0,255,0))); //綠色 sLine.SetColor((RGB(255,255,0))); //黃色 cwin<<hLine<<mLine<<sLine<<org;}2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-5

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論