Windows程式內部執行機制

2021-06-23 03:04:33 字數 3480 閱讀 6448

2、sdk(software development kit)軟體開發包

3、常用控制代碼:

視窗控制代碼(hwnd)        位圖控制代碼(

hbitmap

)            圖示控制代碼(hicon)            選單控制代碼(hmenu)、

檔案控制代碼(hfile)       當前例項控制代碼

(hinstance

)    全域性記憶體物件控制代碼(

hglobal

)   

區域性記憶體物件控制代碼(hlocal)

裝置環境控制代碼(

hdc)     游標控制代碼(hcursor)            字型控制代碼(hfont)            畫筆控制代碼(hpen)、

畫刷控制代碼(hbrush) 

4、常用資料型別

byte    word    long    dword    uint    bool    

pstr   32位字元指標

colorref    32位整數,表示乙個顏色

handle   控制代碼

lpstr    32位指標,指向字元

lpcstr   32位指標,指向字串常量

lptstr   32位指標,指向字串,此字串可移植到unicode和dbcs雙字符集

ltctstr  32位指標,指向字串常量,

此字串可移植到unicode和dbcs雙字符集

lpvoid   32位指標,可指向任何型別資料

lpresult 32位數值,作為視窗函式或callback函式的返回型別

wndproc  32位指標,指向乙個視窗函式 

lparam   32位數值,作為視窗函式和callback函式的引數

wparam   作為視窗函式和callback函式的引數,在win 16中是16位,在win32中是32位

5、訊息是由msg結構體來表示的,msg定義如下

typedef struct tagmsg

msg;

6、訊息可分為「進隊訊息」和「不進隊訊息」,進隊訊息將由系統放入應用程式的訊息佇列中,然後由應用程式取出並傳送。不進隊的訊息在系統呼叫視窗過程時直接傳送個給視窗。不管是進隊訊息還是不進隊訊息,最終都有系統呼叫視窗過程函式對訊息進行處理。

7、完整的win32程式實現步驟:

(1)winmain函式的定義

winmain函式的原型宣告:

int winapi winmain ;

(2)建立乙個視窗

一、設計乙個視窗

視窗特徵結構體wndclass

typedef struct _wnclass

wndclass;    

二、註冊乙個視窗

呼叫registerclass函式對其進行註冊,註冊成功後才可以建立該型別的視窗。

三、建立視窗

用creatwindow函式產生這種型別的視窗

hwnd creatwindow ;

四、顯示及更新視窗

showwindow函式(顯示視窗)

bool showwindow (

hwnd hwnd,    //成功建立視窗後返回的那個視窗控制代碼

intn cmdshow    //指定了視窗顯示的狀態  常見的幾種:sw_hide 隱藏視窗並啟用其他視窗

sw_show 在視窗原來的位置以原來的尺寸啟用和顯示視窗

sw_showmaxmized 啟用視窗並將其最大化顯示

sw_showminimized 啟用視窗並將其最小化顯示

sw_shownormal 啟用並顯示視窗 );

bool updatawindow (

hwnd hwnd // )

(3)進行訊息迴圈

我們需要乙個訊息迴圈,不斷從訊息隊中取出訊息,並進行響應。

用getmessage()函式(接收wm_quit返回非零,出錯返回-1,其他為0)

bool getmessage (

lpmsg lpmsg,  //指向乙個訊息結構體,getmessage從執行緒的訊息佇列中取出的訊息資訊將儲存在該結構體物件中

hwnd hwnd,    //指定接收屬於哪個視窗的訊息。(通常設為null,用於接收屬於執行緒的所有視窗的視窗訊息

uint wmsgfiltermin,    //獲取的訊息的最小值(通常設為0)

uint wmsgfiletermax    //獲取的訊息的最大值(兩個值都設為0,則接收所有訊息 )

獲取訊息還可以呼叫peekmessage函式

bool peekmessage (

lpmsg lpmsg,  //指向乙個訊息結構體,getmessage從執行緒的訊息佇列中取出的訊息資訊將儲存在該結構體物件中

hwnd hwnd,    //指定接收屬於哪個視窗的訊息。(通常設為null,用於接收屬於執行緒的所有視窗的視窗訊息

uint wmsgfiltermin,    //獲取的訊息的最小值(通常設為0)

uint wmsgfiletermax,    //獲取的訊息的最大值(兩個值都設為0,則接收所有訊息

uint wremovemsg    //指定訊息獲取方式 pm_noremove表示不會從訊息佇列移除,pm_remove會移除(和getmessage一致) )

傳送訊息可以用sendmessage函式,將訊息直接傳送給視窗,不進訊息佇列

postmessage函式,將訊息放入與建立視窗的執行緒相關聯的訊息佇列後立即返回

postthredmessage函式,用於向執行緒傳送訊息

(4)編寫視窗過程函式

lresult callback windowproc (

hwnd hwnd,

uint umsg,//訊息**

wparam wparam,

lparam lparam  )

8、translatemessage(&msg)函式用於將虛擬鍵訊息轉換為字元資訊

dispatchmessage(&msg) 函式分配乙個乙個訊息到視窗過程,由視窗過程函式對訊息進行處理(實際中間還有給作業系統環節)

9、為什麼要重繪?因為儲存視窗中的圖形資料涉及的資料量太大,為了節省記憶體,提高效率,我們採用重繪的方式。

10、變數的命名約定(匈牙利表示法)

a    陣列

b    布林值

by   無符號字元

c    字元

cb   位元組記數

rgb  儲存rgb顏色值的長整型

cx,cy 短整型(計算x,y的長度)

dw   無符號長整型

fn   函式

h    控制代碼

i    整數

m_   類的資料成員

n    短整型或整型

np   近指標

p    指標

l    長整型

lp   長指標

s    字串

sz   以零結束的字串

tm   正文大小

w    無符號整數

x,y  無符號整數(表示x或y座標)

Windows程式內部執行機制

我們在寫c程式的時候會呼叫各種庫函式來輔助完成某些功能,例如printf,這就是api,windows作業系統提供了1000多種api函式。軟體開發包 software development kit 假如我們要開發呼叫中心,在購買語音卡的同時,廠商就會提供語音卡的sdk開發包,以方便我們對語音卡的...

Windows應用程式執行機制(筆記)

windows應用程式 以 windows 作為平台執行的應用程式。api函式 api函式 windows 提供了大量可以在應用程式中呼叫的,用 c語言編寫的函式。windows api 函式的功能如下 1.視窗管理函式 實現視窗的建立 移動和修改等功能。2.圖形裝置函式 實現圖形的繪製及操作功能,...

HelloWorld 程式執行機制

1.隨便新建乙個資料夾,存放 新建乙個j a檔案檔案字尾名為.j a helloworld.j a 注意點 系統可能沒有顯示檔案字尾名,我們需要手動開啟3.編寫 public class helloworld 4.編譯j ac j a檔案,會生成乙個class檔案 5執行class檔案,j a cl...