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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

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

intAPIENTRYWinMain(HINSTANCEhInstance,//當(dāng)前實(shí)例句柄HINSTANCEhPrevInstance,//前實(shí)例句柄LPSTRlpCmdLine,//命令行參數(shù)intnShowCmd)//指明窗口如何顯示{ MSGmsg; //聲明一個保存消息的變量WNDCLASSwndclass;2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-16-//初始化窗口類,并向操作系統(tǒng)注冊該窗口類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);//用注冊的窗口類生成窗口實(shí)例//顯示窗口 ShowWindow(hwnd,nShowCmd); UpdateWindow(hwnd);//若UpdateRegion不空,則發(fā)送WM_PAINT消息2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-18-

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

窗口過程函數(shù)是一個對每一個消息都進(jìn)行處理的函數(shù)。其一般形式為帶有多個分支的switch結(jié)構(gòu)。通過把傳送來的消息和系統(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ù),對其他的消息進(jìn)行處理 returnDefWindowProc(hwnd,message,wParam,lParam); }return0;}2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-21-1.2窗口程序基礎(chǔ)知識基本的WINDOWS應(yīng)用程序3、例1-1編寫一個簡單的windows程序,只有基本框架代碼,沒有具體功能。

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

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

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

#defineIDM_FIG1 104#defineIDM_FIG2 105#defineIDM_EXIT 106

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

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

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

Windows窗口一旦創(chuàng)建,它就自動地產(chǎn)生了與之相對應(yīng)的設(shè)備描述表數(shù)據(jù)結(jié)構(gòu),用戶可運(yùn)用該結(jié)構(gòu),實(shí)現(xiàn)對窗口顯示區(qū)域的GDI操作,如劃線、寫文本、繪制位圖、填充等,并且所有這些操作均要通過設(shè)備描述表句柄來進(jìn)行。2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-36-1.3繪圖基礎(chǔ)知識圖形設(shè)備接口GDI畫筆和畫刷是最重要的繪圖工具,而選用繪圖工具進(jìn)行繪圖操作的一般步驟是:(1)獲得設(shè)備環(huán)境句柄;(2)獲得繪圖工具;(3)在設(shè)備環(huán)境中選擇繪圖工具;(4)調(diào)用輸出函數(shù)進(jìn)行輸出;(5)在設(shè)備環(huán)境中選擇原來的繪圖工具,并刪除新的繪圖工具。2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-37-1.3繪圖基礎(chǔ)知識基本圖形繪制(熟悉GDI函數(shù))例1-3在屏幕上畫若干個點(diǎn),并顯示一個文本在例1-1的基礎(chǔ)上,編寫DrawPixels函數(shù),并在消息處理時調(diào)用它。caseWM_PAINT: hdc=BeginPaint(hwnd,&ps); DrawPixels(hwnd,hdc); EndPaint(hwnd,&ps);2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-38-1.3繪圖基礎(chǔ)知識基本圖形繪制(熟悉GDI函數(shù))如果要在窗口工作區(qū)中繪圖,則必須遵守某些規(guī)則。每當(dāng)將WM_PAINT消息發(fā)送到應(yīng)用程序時,就必須重畫工作區(qū)。這是因為有許多外部事件需要應(yīng)用程序重新繪制這個窗口——如用戶調(diào)整了正在繪圖的窗口大小,或者是在用戶移動另一個窗口以暴露以前隱藏的窗口。caseWM_PAINT: hdc=BeginPaint(hwnd,&ps); DrawPixels(hwnd,hdc); EndPaint(hwnd,&ps);2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-39-1.3繪圖基礎(chǔ)知識基本圖形繪制(熟悉GDI函數(shù))例1-3在屏幕上畫若干個點(diǎn),并顯示一個文本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)); //輸出一個文本 TextOut(hdc,50,50,TEXT("TEST"), lstrlen(TEXT("TEST"))); //畫20個點(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ǔ)知識基本圖形繪制(熟悉GDI函數(shù))2023/2/5北京郵電大學(xué)信息與通信工程學(xué)院-41-1.3繪圖基礎(chǔ)知識基本圖形繪制(熟悉GDI函數(shù))例1-4在屏幕上畫一個三角形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ǔ)知識基本圖形繪制(熟悉GDI函數(shù))例1-4在屏幕上畫一個三角形在例1-1的基礎(chǔ)上,編寫DrawTriangle函數(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-//顯示一個點(diǎn)GraphicWindow&operator<<(Pointp);//顯示一個圓GraphicWindow&operator<<(Circlec);//顯示一條線GraphicWindow&operator<<(Lines);//顯示一個文本串GraphicWindow&operator<<(Messaget);//打開一個窗口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-//畫一個點(diǎn)voidpoint(doublex,doubley,COLORREFmColor);//畫一條線voidline(doublexfrom,doubleyfrom,doublexto,doubleyto,COLORREFmColor);//畫一個橢圓voidellipse(doublex,doubley,doublera,doublerb,COLORREFmColor);//圖形方式輸出一個文本串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繪制一個能夠?qū)崟r走動的時鐘:表盤是黑色的,時針紅色,分針綠色,秒針黃色,表盤上的時鐘點(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),"會走動的時鐘");

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

最新文檔

評論

0/150

提交評論