南京信息工程大學(xué) 實(shí)驗(yàn)(實(shí)習(xí))報(bào)告 實(shí)驗(yàn)(實(shí)習(xí))名稱 圖形程序設(shè)計(jì)及其應(yīng)用 實(shí)驗(yàn)(實(shí)習(xí))日期 一、實(shí)驗(yàn)?zāi)康?/span> 1.熟悉圖形設(shè)備接口的概念及其應(yīng)用。
二、實(shí)驗(yàn)內(nèi)容及步驟 實(shí)驗(yàn)任務(wù) 1.熟悉基于圖形應(yīng)用的程序設(shè)計(jì); 2.掌握刷新技術(shù)及其應(yīng)用; 3.掌握映射模式的應(yīng)用; 4.掌握繪圖工具的使用。 實(shí)驗(yàn)內(nèi)容 編寫一個(gè)程序,在屏幕上出現(xiàn)一個(gè)圓心沿正弦曲線軌跡移動(dòng)的實(shí)心圓,且每隔四分之一周期,圓的填充色和圓的周邊顏色都發(fā)生變化,同時(shí)圓的半徑在四分之一周期之內(nèi)由正弦曲線幅值的0.2倍至0.6倍線性增長(zhǎng)。 程序代碼: #include<windows.h> #include<stdlib.h> #include<string.h> #include<math.h> #define Pi 3.1415926
long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam); double dfTheta=0,dfRange=100.0; long i=0,j=0; long lCentreX=0,lCentreY=0,lRadious=(long)(0.2*dfRange); POINT lpSin[100]; int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow) { HWND hwnd ; MSG Message ; WNDCLASS wndclass ; wndclass.cbClsExtra=0; //窗口類無(wú)擴(kuò)展 wndclass.cbWndExtra=0; //窗口實(shí)例無(wú)擴(kuò)展 wndclass.hInstance=hInstance; //當(dāng)前實(shí)例句柄 wndclass.hCursor=LoadCursor(NULL,IDC_ARROW) ; //窗口采用箭頭光標(biāo) wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); //窗口背景為白色 wndclass.lpszMenuName=NULL; //窗口中無(wú)菜單 wndclass.lpszClassName="SIN" ; //窗口類名為"窗口" wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION); //窗口的最小化圖標(biāo)為缺省圖標(biāo) wndclass.lpfnWndProc=WndProc; //定義窗口處理函數(shù) wndclass.style=0; if(!RegisterClass( &wndclass)) //如果注冊(cè)失敗則發(fā)出警告 { MessageBeep(0) ; return FALSE ; } //---------------- 創(chuàng)建窗口 ------------------- hwnd=CreateWindow( "SIN", //窗口類名 "4_6", //窗口實(shí)例的標(biāo)題名 WS_OVERLAPPEDWINDOW, //窗口的風(fēng)格 CW_USEDEFAULT, 0, //窗口左上角坐標(biāo)為缺省值 CW_USEDEFAULT, 0, //窗口的高和寬為缺省值 NULL, //此窗口無(wú)父窗口 NULL, //此窗口無(wú)主菜單 hInstance, //創(chuàng)建此窗口的應(yīng)用程序的當(dāng)前句柄 NULL //不使用該值 ); //--------------- 顯示窗口 ---------------------- ShowWindow( hwnd, nCmdShow) ; //-------------- 繪制用戶區(qū) --------------------- UpdateWindow(hwnd); //--------------- 消息循環(huán) ---------------------- for(int j=0;j<100;j++) //生成正弦曲線的點(diǎn)坐標(biāo) { lpSin[j].x=(long)(j*2*Pi/100*60); lpSin[j].y=(long)(dfRange*sin(j*2*Pi/100)); }
while( GetMessage(&Message, 0, 0, 0)) { TranslateMessage( &Message) ; DispatchMessage( &Message) ; } return Message.wParam; //消息循環(huán)結(jié)束即程序終止時(shí)將信息返回系統(tǒng) } long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam) { HDC hDC; //定義指向設(shè)備的句柄 HBRUSH hBrush; //定義指向畫刷的句柄 HPEN hPen; //定義指向畫筆的句柄 PAINTSTRUCT PtStr;//定義指向包含繪圖信息的結(jié)構(gòu)體變量 switch(iMessage) //處理消息 { case WM_PAINT: //處理繪圖消息 hDC=BeginPaint(hWnd,&PtStr); SetWindowOrgEx(hDC,-200,-200,NULL); //設(shè)置映像模式 hPen=CreatePen(PS_DASH,1,RGB(255,0,0)); //黑色畫筆 SelectObject(hDC,hPen); //選擇畫筆 Polyline(hDC,lpSin,100); if(i<=25) //第一個(gè)1/4周期 { hPen=CreatePen(PS_DASH,1,RGB(255,0,0));
hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(255,0,0)); lRadious=(long)(dfRange*0.2+i%25*dfRange*0.4/25);//計(jì)算半徑 } else if(i<=50) { hPen=CreatePen(PS_DASH,1,RGB(0,255,0));
hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(0,255,0)); lRadious=(long)(dfRange*0.2+i%25*dfRange*0.4/25);//計(jì)算半徑 } else if(i<=75) { hPen=CreatePen(PS_DASH,1,RGB(0,0,255));
hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(0,0,255)); lRadious=(long)(dfRange*0.2+i%25*dfRange*0.4/25);//計(jì)算半徑 } else { hPen=CreatePen(PS_DASH,1,RGB(255,255,0));
hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(255,255,0)); lRadious=(long)(dfRange*0.2+i%25*dfRange*0.4/25);//計(jì)算半徑 } SelectObject(hDC,hBrush); //選擇畫刷 SelectObject(hDC,hPen); lCentreX=lpSin[i].x; //圓心x坐標(biāo) lCentreY=lpSin[i].y; //圓心y坐標(biāo) Ellipse(hDC,lCentreX-lRadious,lCentreY-lRadious, lCentreX+lRadious,lCentreY+lRadious); //畫圓
i++; DeleteObject(hPen); //刪除畫筆 DeleteObject(hBrush); //刪除畫刷 EndPaint(hWnd,&PtStr); //刪除設(shè)備環(huán)境指針 Sleep(100); //停0.1秒 if(i<100) InvalidateRect(hWnd,NULL,1); //刷新用戶區(qū) return 0; case WM_DESTROY: //關(guān)閉窗口 PostQuitMessage(0); return 0; default: return(DefWindowProc(hWnd,iMessage,wParam,lParam)); } } 程序運(yùn)行結(jié)果:
三、實(shí)驗(yàn)結(jié)果 通過本次試驗(yàn)我了解了基于圖形應(yīng)用的程序設(shè)計(jì),掌握刷新技術(shù)及其應(yīng)用;學(xué)會(huì)了映射模式的應(yīng)用;并且基本了解了繪圖工具的使用;進(jìn)一步加深了對(duì)可視化的了解。
|
|