




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、-Foshan University課程設計說明書操作系統課程和設計學 院: 電子與信息工程學院 專 業:2021網絡工程2學 號:學生:二一五 年 七 月課程設計任務書專業級班一、 設計題目:操作系統圖形顯示程序接口設計二、 主要容: 本設計的目的是通過設計一些簡單的中斷調用接口,使學生掌握程序接口的設計方法。 要求在熟悉DOS操作系統的中斷接口及程序接口的根底上,利用C語言設計簡單的顯示程序接口,最后通過程序驗證全部接口的正確性。 三、 具體要求利用C語言設計DOS中斷中21H與圖形操作相關的中斷調用,具體包括:1、 設置點陣圖形的彩色2、 畫點3、 畫線4、 畫矩形5、 畫圓6、 屏幕區
2、域填充7、屏幕區域保存8、屏幕區域邏輯恢復9、去除屏幕/區域10、屏幕區域卷動11、鼠標控制12、多窗口功能 上述功能由兩局部程序驗證,中斷駐留程序和驗證程序。首先運行中斷駐留程序,然后運行驗證程序得到預期結果。4、 進度安排 1-2天:資料查找、系統分析,數據流程分析,概要設計1-2天:系統詳細設計、功能設計 5-6天:模塊設計、編程調試 1天:資料整理、課程設計說明書編寫。五、完成后應上交的材料1、課程設計說明書程序流程圖、功能模塊圖、相關數據構造、核心算法等2、相關源程序文件六、總評成績指導教師簽名日期年月日 系 主 任審核日期年月日目 錄一、程序概述51.1程序任務.51.2程序原理
3、.5二、概念原理.5三、總體設計.63.1設計流程圖.63.2實現方法.6四、詳細設計.74.1函數使用.7五、完成情況.7六、使用說明.7七、設計總結.97.1系統特色.97.2經歷教訓.97.3實踐感受.9參考資料.9附 錄.10一 程序概述1.1. 程序任務本設計是要求編寫一個簡單的命令解釋器,利用C語言、DOS中斷中21H與屏幕顯示相關的中斷調用進展設計的,主要完成要求中所提到的功能如:畫點、畫線、畫圓、填充、恢復、屏幕滾動等。1.2. 程序原理設計過程中發現使用C語言進展圖形操作如果使用傳統的功能菜單和接口選項,會使功能無法銜接,模塊化感嚴重,功能使用不連續的問題,用戶體驗非常低。所
4、以經過思考了查閱資料后,改用單面板上,鼠標控制輸入的方法實現功能,鼠標的控制使用已經包含了中斷機制,所以不用特意添加其他功能模塊的中斷。使用鼠標位置追蹤函數,建立int 33h中斷功能調用組,隨時獲取鼠標位置以及功能選擇。GetCursorPos(&point); / 獲取鼠標指針位置屏幕坐標,調用ScreenToClient(hwnd, &point) ; / 將鼠標指針位置轉換為窗口坐標,最后再檢測鼠標按下左鍵的狀態,調用函數GetAsyncKeyState(VK_LBUTTON)。二 概念原理2.1中斷 中斷:顧名思義,是指當出現需要時,CPU暫時停頓當前程序的執行而執行處理新情況的程序
5、和執行過程。即在程序運行過程中,系統出現了一個必須由CPU立即處理的情況,此時,CPU暫時中止程序的執行轉而處理這個新的情況的過程就叫做中斷。2.2 圖形顯示程序接口圖形顯示接口GDI提供了一系列的函數和相關的構造,應用程序可以使用它們在顯示器、打印機或其他設備上生成圖形化的輸出結果。使用GDI函數可以繪制直線、曲線、閉合圖形、路徑、文本以及位圖圖像。所繪制的圖形的顏色和風格依賴于所創立的繪圖對象,即畫筆、筆刷和字體。你可以使用畫筆來繪制直線和曲線,使用筆刷來填充閉合圖形的部,使用字體來書寫文本。2.3. 中斷駐留程序 中斷駐留程序,指的是當加載進存的程序執行完畢后,依然能夠保存產生的臨時數據
6、跟臨時狀態,而在下一次調用時繼續執行。2.4. 系統調用 系統調用,顧名思義,說的是操作系統提供應用戶程序調用的一組“特殊接口。用戶程序可以通過這組“特殊接口來獲得操作系統核提供的效勞,比方用戶可以通過文件系統相關的調用請求系統翻開文件、關閉文件或讀寫文件,可以通過時鐘相關的系統調用獲得系統時間或設置定時器等。 從邏輯上來說,系統調用可被看成是一個核與用戶空間程序交互的接口,它好比一個中間人,把用戶進程的請求傳達給核,待核把請求處理完畢后再將處理結果送回給用戶空間。三 總體設計選取顏色3.1程序流程圖畫點鼠鼠標 控 制畫線畫圓圖圖形顯示程序接口設計矩形多窗口功能屏幕幕 區 域 邏 輯 操作鼠標
7、控制去除屏幕/區域屏幕區域邏輯恢復屏幕區域保存屏幕區域填充3.2實現方法使用GetCursorPos(&point);函數獲取鼠標指針位置屏幕坐標,隨時獲取鼠標位置以及功能選擇。調用ScreenToClient(hwnd, &point) ; / 將鼠標指針位置轉換為窗口坐標,調用函數GetAsyncKeyState(VK_LBUTTON),檢測鼠標按下左鍵的狀態,根據鼠標狀態選擇功能并輸出。四 詳細設計4.1函數使用Show輸出功能面板邊框以及調色板色塊GetCursorPos(&point); / 獲取鼠標指針位置屏幕坐標ScreenToClient(hwnd, &point); / 將鼠
8、標指針位置轉換為窗口坐標Line() 畫線函數Bar() 畫條函數Rectangle()畫矩形函數Circle()畫圓函數Setfillstyle() 設置填充圖樣和顏色函數Getimage() 保存圖像函數Putimage() 輸出圖像函數Cleardevice();刷新屏幕五 完成情況 本程序完成了其中的選擇顏色,設置點陣圖形的彩色,畫點,畫線,畫矩形,畫圓,屏幕區域填充,屏幕區域保存,屏幕區域邏輯恢復,去除屏幕/區域,鼠標控制,多窗口功能。屏幕卷動功能尚未實現,但大局部及主要功能都已實現,并不影響使用,局部功能存在BUG,使用時需遵循一定使用方法,有待改善。六 使用說明左邊工具欄按順序為
9、1、畫曲線2、畫直線3、畫矩形4、畫圓5、封閉區域顏色填充6、保存畫面到文件7、清屏8、撤銷一步操作9、恢復之前保存的文件到畫面上底部為調色板,點擊選色七 設計總結7.1系統特色本系統使用單頁面操作,比起傳統的DOS界面操作的選項菜單來說,更加便利以及直觀,可以在同一窗口看到屢次操作的結果,用戶體驗更好,而且全程鼠標控制,直觀的菜單欄都是本軟件亮點。7.2經歷教訓本次課程設計一開場,我使用的是傳統的選擇菜單模式實現功能,每個功能都需要經過一次選擇和退出才能執行下一個功能,沒有連貫性,并不符合我們本次任務的畫板功能,經過與同學的討論分析后,我們才決定重新開場,更改界面,這告訴我們要擺脫定勢思維,
10、因為我們習慣于作選項接口,就忘了分析。做工程之前應先分析清楚,所需要的方法及功能再開場程序設計,而不應該使用老方法,直接開場。7.3實驗感受本次課程設計讓我對C語言的感悟更加深了一層,曾經以為C語言有許多功能都無法實現,但當開場課程設計并查找資料都發現,C語言功能強大而且深奧,之前所學習的東西可以說是滄海一粟,是在拿不出手,經過了大量翻閱C語言高級教程后,才有所了解。數據構造與操作系統知識也是不可或缺,作為本次設計的核心,操作系統的中斷功能又花費了我們大量的時間來理解,然后用C語言實現,又一次鍛煉了我的編碼功能,在做后退功能的時候,需要用到棧構造來保存之前多部操作,但是實現了棧之后,卻無法實現
11、 類 類型入棧,所以最終只能做出單步恢復的功能,還是有待改良。本次課程設計讓我加深了,軟件設計的整個流程以及對語言的熟悉程度,為以后打下堅實根底。參考資料1、?計算機操作系統教程?第2版堯學 史美林 編著 清華大學2、?操作系統實驗指導?任愛華 鵬 方毅 清華大學3、?操作系統實驗教程核心技術與編程實例?顧寶根王立松顧喜梅科學4、?C+編程思想?Bruck 著 侯捷譯 機械工業5、?C 語言程序中去除鍵盤緩沖區的方法? 長虹 職業技術學院學報附 錄*include*include *include *includevoid main() void show(); IMAGE img; init
12、graph(1000, 680); / 初始化繪圖窗口 HWND hwnd = GetHWnd(); / 獲取繪圖窗口句柄 POINT point; setfillcolor(LIGHTGRAY); show(); int *1,y1,a=0,p,color; char s=SAVE; char seban=調色板; char t=FULL; char c=CLEAR; char b=BACK; char r=RETURN; outte*t*y(15,220,t); outte*t*y(10,635,seban); outte*t*y(15,270,s); outte*t*y(10,320,c
13、); outte*t*y(15,380,b); outte*t*y(3,430,r);while(true) GetCursorPos(&point); / 獲取鼠標指針位置屏幕坐標 ScreenToClient(hwnd, &point); / 將鼠標指針位置轉換為窗口坐標 if(GetAsyncKeyState(VK_LBUTTON) if(point.y630) setcolor(getpi*el(point.*,point.y); color=getpi*el(point.*,point.y); if(point.*0&point.y50&point.y100&point.y150&p
14、oint.y200&point.y300&point.y250&point.y350&point.y400&point.y=450)/恢復到文件容 a=6; while(1) *1=point.*; y1=point.y; if(a=0) /曲線 getimage(&img,60,0,1000,610); GetCursorPos(&point); / 獲取鼠標指針位置屏幕坐標 ScreenToClient(hwnd, &point); / 將鼠標指針位置轉換為窗口坐標 line(*1,y1,point.*,point.y);if(!GetAsyncKeyState(VK_LBUTTON) b
15、reak; if(a=2)/矩形 if(!GetAsyncKeyState(VK_LBUTTON) getimage(&img,60,0,1000,610); GetCursorPos(&point); / 獲取鼠標指針位置屏幕坐標 ScreenToClient(hwnd, &point); / 將鼠標指針位置轉換為窗口坐標 line(*1,y1,point.*,y1); line(*1,y1,*1,point.y); line(*1,point.y,point.*,point.y); line(point.*,y1,point.*,point.y); break; if(a=1)/直線 if
16、(!GetAsyncKeyState(VK_LBUTTON) getimage(&img,60,0,1000,610); GetCursorPos(&point); / 獲取鼠標指針位置屏幕坐標 ScreenToClient(hwnd, &point); / 將鼠標指針位置轉換為窗口坐標 line(*1,y1,point.*,point.y); break; if(a=3)/圓 if(!GetAsyncKeyState(VK_LBUTTON) getimage(&img,60,0,1000,610); GetCursorPos(&point); / 獲取鼠標指針位置屏幕坐標 ScreenToC
17、lient(hwnd, &point); / 將鼠標指針位置轉換為窗口坐標far circle(*1, y1, (int)sqrt(point.*-*1)*(point.*-*1)+(point.y-y1)*(point.y-y1); break; if(a=4)/full if(!GetAsyncKeyState(VK_LBUTTON) getimage(&img,60,0,1000,610); GetCursorPos(&point); / 獲取鼠標指針位置屏幕坐標 ScreenToClient(hwnd, &point); / 將鼠標指針位置轉換為窗口坐標 setfillcolor(co
18、lor); setfillstyle(BS_SOLID); floodfill(point.*,point.y, BLACK); break; if(a=5)/后退putimage(60, 0, &img);break; if(a=6)/文件恢復 loadimage(&img, E:test.jpg); putimage(0,0, &img);break; void show() far floodfill(1,1,BLUE); setbkmode(TRANSPARENT);/背景模式。透明setcolor(BLACK);setfillcolor(BLACK);setfillstyle(BS_
19、SOLID);bar(75,620,95,640);/使用對角線坐標畫矩形setcolor(RED);setfillcolor(RED);setfillstyle(BS_SOLID);bar(75,650,95,670);/使用對角線坐標畫矩形setcolor(GREEN);setfillcolor(GREEN);setfillstyle(BS_SOLID);bar(105,620,125,640);/使用對角線坐標畫矩形setcolor(BLUE);setfillcolor(BLUE);setfillstyle(BS_SOLID);bar(105,650,125,670);/使用對角線坐標畫矩形setcolor(YELLOW);setfillcolor(YELLOW);setfillstyle(BS_SOLID);bar(135,620,155,640);/使用對角線坐標畫矩形setcolor(BROWN);setfillcolor(BROWN);setfillstyle(BS_SOLID);bar(135,650,155,670);/使用對角線坐標畫矩形setco
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年蕪湖宜居投資(集團)有限公司招聘10人筆試參考題庫附帶答案詳解
- 2025年安徽省應急管理廳直屬事業單位公開招聘工作人員筆試歷年典型考題及考點剖析附帶答案詳解
- 安全員專業試題及答案
- 中學心理健康教育c證考試試題及答案
- 車輛報廢擔保質押合同模板
- 財務審計與財務顧問綜合服務合同
- 餐飲企業客戶關系保密及營銷策略合同
- 通信設備市場調研與咨詢服務協議書
- 證券交易授權委托協議書范本深度解析
- 美術館場地租賃合同范本:展覽活動與藝術品保護
- 齒輪螺栓墊片沖壓模具畢業設計說明書
- GB/T 19668.7-2022信息技術服務監理第7部分:監理工作量度量要求
- GB/T 9115-2010對焊鋼制管法蘭
- GB/T 5478-2008塑料滾動磨損試驗方法
- GB/T 1095-2003平鍵鍵槽的剖面尺寸
- 農民工安全考試試卷試題
- 現代藝術野獸派-中外美術史-課件
- 雙曲線齒輪幾何設計
- 大型養路機械綜合講義
- 高分子材料完整版課件
- GB∕T 37456-2019 海洋平臺電驅動齒輪齒條升降裝置
評論
0/150
提交評論