windows程序運行原理以及vc++實現(xiàn)過程_第1頁
已閱讀1頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、windowswindows程序的運行原理以及程序的運行原理以及VCVC的實的實現(xiàn)過程現(xiàn)過程作者:佚名文章來源:網絡操作系統(tǒng)以消息機制把輸入設備的變化傳遞給我們的應用程序,操作系統(tǒng)所扮演的角色是神經末梢APP系統(tǒng)調用APIOS輸出輸入HARDWARE操作系統(tǒng)之所以成為操作系統(tǒng)是因為它能夠控制硬件的設備,能夠控制聲卡發(fā)出聲音,能夠控制顯卡畫一個窗口,但它是如何實現(xiàn)這些功能就不是我們所關心的了,這些是寫匯編的人員所要做的事情。操作系統(tǒng)又能夠

2、從輸入設備獲得信息,譬如說,操作系統(tǒng)能夠感受到鼠標的移動,并且還能知道鼠標移動后的位置。再比如說操作系統(tǒng)能感受到鍵盤的按下,并且知道按下的是哪個鍵,這些都表明操作系統(tǒng)和輸入輸出設備有一個關系,至于操作系統(tǒng)怎樣去控制輸入設備以及怎樣把輸入設備的信息拿到手的,這些我們都不用關心,這些是寫操作系統(tǒng)的人或者寫驅動程序的人所要干的事。由于應用程序是運行在操作系統(tǒng)上的,我們所關心的是應用程序和操作系統(tǒng)之間有什么樣的關系。就仿佛是機器人能夠走路,但是

3、機器人要走幾步,向哪個方向走,這些是機器人不關心的,它只是說我有走路的能力,至于怎么走需要主人對它發(fā)號施令了,如果我們要求機器人向南走5步,機器人才能完成行走的操作。同樣對于操作系統(tǒng)來說,操作系統(tǒng)能夠控制聲卡發(fā)出聲音,但是具體發(fā)出什么樣的聲音,是美妙的還是悲傷的就由應用程序來告訴操作系統(tǒng)的,應用程序怎樣告訴操作系統(tǒng)呢,我們在編寫C語言的時候通過調用函數(shù)來讓操作系統(tǒng)干某事,操作系統(tǒng)能夠執(zhí)行各種各樣的功能,它把這些功能都以函數(shù)的形式提供給應

4、用程序,應用程序通過調用這些函數(shù)來通知操作系統(tǒng)該干什么事情,操作系統(tǒng)的各種各樣的功能都對應相應的函數(shù),這些函數(shù)的集合叫做API。如控制機器人的函數(shù)集合我們叫robotAPI,像JAVA里也有操作我們的系統(tǒng)的函數(shù),我們把它叫做JAVAAPI,這里的API與WINDOWSAPI是沒有關系的。每個應用程序都有一個隊列,叫消息隊列,什么叫隊列呢其實就是一個緩沖區(qū)(就是定義的一個數(shù)組,數(shù)組有多大,緩沖區(qū)就有多大),然后你可以往里面存數(shù),別人就可以

5、從里面取數(shù)。先取的是你最先存入的數(shù)。就好象尋呼臺的尋呼系統(tǒng),來了一個尋呼信息,就有尋呼小姐將該信息交給發(fā)射機發(fā)布出去,如果在一秒鐘一次來了很多個尋呼請求,發(fā)射機就有可能忙不過來,為了不至于把信息丟失,我們就準備一個很大的緩沖區(qū),有100個格STYLE里有兩個參數(shù)是CS_HREDRAW和CS_VREDRAW,當我們把窗口的大小發(fā)生改變時(最小化、最大化、覆蓋一樣),顯卡要重新給我們把窗口畫一遍(窗口是繪出來的),這時候原來在窗口上畫的東西

6、就被沖掉了,如果不這么做的話,我們的窗口的大小無法發(fā)生改變,這里我們指定兩個參數(shù)就是指定當窗口水平和垂直方向發(fā)生大小改變時需不需要顯卡重新畫窗口,畫窗口的時候顯卡會用你定義的窗口的背景顏色進行重畫。這就好比我們每到春節(jié)的時候要給汽車重新噴漆一樣,如果我們不指定這兩個參數(shù)就是說我不重新噴漆了,只用水沖一下就可以。以在窗口上畫線為例進行演示。cbClsExtra、cbWndExtra是兩個補充說明的參數(shù),是當窗口的參數(shù)不夠的時候用。hIco

7、n是圖標的句柄,可以通過API函數(shù)LoadIcon加載,MAKEINTRESOURCE是把一個整數(shù)轉成字符串的宏。注意字符串就是一個地址,標識一個字符數(shù)組常量的首地址。WD是一個unsignedshtDWD是一個unsignedlong。如果需要使用一個自定義的圖標,第一個參數(shù)就應該是hInstance,第二個參數(shù)是MAKEINTRESOURCE(IDI_ICON1)。在VC中編輯圖標,并保存,#include“resource.h“將

8、1.rc增加到工程。hCurs是鼠標指針的句柄??梢酝ㄟ^API函數(shù)LoadCurs加載。curs里的IDC_H是定義在win2000的頭文件中的,要裝win2000SDK.hbrBackground是窗口背景刷子的句柄NULL表示沒有刷子。通過API函數(shù)GetStockObject得到。注意這里要接觸一個近指針和遠指針的概念,這些是16位操作系統(tǒng)的產物,是用來標識指針的管理范圍的,在32位的操作系統(tǒng)上已經沒有意義了,我們可以發(fā)現(xiàn)它們都定

9、義成空了。這里GetStockObject的返回值要進行類型轉換。(設置一個任意的顏色?)hInstance是應用程序實例的句柄。我的一個應用程序起動了,應用程序就裝在內存中了,成為一個實例(因為應用程序可以啟動多個,我們把它們每個應用程序用實例句柄來管理和區(qū)分),以后操作系統(tǒng)想控制我的應用程序,我必須把應用程序的句柄傳給操作系統(tǒng)。這個應用程序的句柄我們把它叫做實例句柄。我們任何一個窗口都應該屬于一個應用程序實例,所以我們在這里要指定應

10、用程序的實例句柄。這個實例句柄是由操作系統(tǒng)分配給我們的。應用程序都有一個入口函數(shù),在DOS里是MAIN函數(shù),在WINDOWS里是WINMAIN函數(shù),我們發(fā)現(xiàn)應用程序的實例句柄是操作系統(tǒng)在WINMAIN函數(shù)里傳給我們的。hPrevInstance是先前的應用程序的實例句柄。通過這個參數(shù)我們可以控制一個應用程序只能啟動一份。當然我們在這里由于是WIN32的系統(tǒng)無法簡單實現(xiàn)只程序啟動一份。(WinMain函數(shù)是操作系統(tǒng)調用的,所以WinMai

11、n的參數(shù)是操作系統(tǒng)賦值的。)lpszMenuName注意菜單不是窗口。用SPY可以查看。lpszClassName是窗口類型的名字。如富康988。設計完窗口后我們要注冊窗口類RegisterClass,注冊完了才能生產這一款窗口,否則操作系統(tǒng)不知道你要產生什么樣的窗口。隨后我們調用CreateWindow去產生窗口,這里有個窗口的樣式參數(shù),WS_OVERLAPPEDWINDOW是一個包裝樣式,如果想去掉某個功能就將去掉的樣式取反,然后將

溫馨提示

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

評論

0/150

提交評論