事件處理程式WinProc

2022-09-18 21:27:13 字數 1699 閱讀 5656

事件處理函式是乙個**函式,windows在窗體中發生須要處理的事件時,在主時間迴圈中呼叫該函式。時間處理函式可處理不論什麼想處理的事件,其它的事件傳遞給windows進行處理。

在使用者和windows執行某些操作時,將生成一些針相應用程式的事件和訊息,全部這些訊息都將進入乙個佇列中,而針對乙個應用程式窗體的事件和訊息將從訊息佇列中轉移到該窗體的私有佇列中。

然後主事件迴圈將獲取這些訊息並將它們傳送給窗體的winproc進行處理。

訊息處理函式的原型是:

lresult callback windowproc(

hwnd hwnd,//傳送方的窗體控制代碼

uint msg,//訊息id,即訊息的種類

wparam wparam,//具體資訊

lparam lparam);//具體資訊

當使用者移動窗體或調整窗體大小或被還有乙個應用程式彈出窗體遮住等時產生這個訊息。wm_paint非常重要,對於directx遊戲。這無關緊要,由於我們以30-60fps(幀每秒)的速度重繪螢幕。而對普通windows應用程式就非常重要了,要進行重繪,否則就會一直被其它窗體遮住。

而對directx應用程式,我們不希望windows覺得螢幕沒有被重繪,所以要讓windows系統知道我們已經對這個訊息進行處理了。

因此,要 驗證窗體的客戶矩形,最簡單的方法是呼叫 beginpaint()和endpaint().這兩個函式驗證窗體,。並用儲存在windows類變數hbrbackground中的背景畫刷來又一次填充背景。通常是這樣寫的:

hdc = beginpaint(hwnd, &ps);

// todo: 在此加入隨意畫圖**...

endpaint(hwnd, &ps);

hwnd為窗體控制代碼。兩個函式在相應的窗體進行畫圖。ps為 paintstruct結構的位址,這個結構包括了要重繪的區域。

其結構例如以下:

typedef struct tagpaintstruct  paintstruct

這裡最重要的字段是 rcpaint ,為乙個rect結構。包括須要重繪的最小矩形。windows試圖做盡可能少的工作。當窗體被破壞時。windows會告訴您須要又一次畫圖以恢復窗體內容的最小矩形區域。

beginpaint()返回的是乙個圖形場景控制代碼或稱為裝置上下文控制代碼。

wm_destroy 窗體被銷毀時傳送該訊息。

一般是使用者單擊了窗體的關閉圖示或從窗體的系統選單中選擇關閉後的直接結果。這裡須要釋放全部資源。並通過傳送wm_quit訊息,來告訴windows全然終止該程序。

這裡這個訊息僅僅關閉窗體,但並不會關閉應用程式。應用程式將繼續執行僅僅是沒有窗體。所以這裡傳送終止程式的訊息為 wm_quit。是用專門的函式 postquitmessage()函式來傳送它。呼叫postquitmessage(0)來將wm_quit訊息增加訊息佇列中,而這個訊息將導致主迴圈事件結束。

在wm_destroy中。處理全部清理工作,然後呼叫postquitmessage(0),結束主迴圈。

處理完訊息後使用 return(0),退出winproc,並告訴windows已經對訊息進行處理。

對於其它為處理的訊息,呼叫預設訊息處理程式 defaultwindowproc(),這個函式是乙個傳遞函式,將為處理的訊息傳遞給windows進行預設處理。

return defwindowproc(hwnd, message, wparam, lparam);

事件處理程式

標籤 標籤 點我 如果新增多個輸出資訊或者其他需求,每次都需要尋找此段 更改太麻煩,少這個方法還可行,若千萬行 以上,怎麼找。我們是否靈活方便?由此擴充套件示例2 點我 新增多個輸出資訊或其他需求,如何處理?答 直接在js 定義函式,函式名稱 到html 指定元素屬性 動態事件 的值裡,如上 但是這...

事件處理程式

事件處理程式就是響應某個事件的函式,簡單地來說,就是函式。我們又把事件處理程式稱為事件偵聽器。事件處理程式是以 on 開頭的,比如點選事件的處理程式是 onclick 事件處理程式大概由以下5種。一 html事件處理程式 html事件處理程式,它是寫在html裡面的,是全域性作用域 例子 點選事件觸...

JS事件 事件處理程式之IE事件處理程式

與訪問dom中的event物件不同,要訪問ie中的event物件有幾種不同的方式,取決於指定事件處理程式的方法。在使用dom0級方法新增事件處理程式時,event物件作為window物件乙個屬性存在。來看下面例子。var btn document.getelementbyid mybtn btn.o...