面板引擎設計

2021-04-30 17:48:00 字數 1235 閱讀 1419

**引擎設計

**引擎設計思路:

其實也就是hook掉預設的視窗繪製,然後根據視窗類別,用自己的視窗渲染代替了windows預設的視窗渲染。這個過程非常繁瑣,特別考驗耐心和體力。

花了乙個上午,總算把button做好了,  下一步是把這個button應用到公司的客戶端上,效果不錯。

button的demo圖:

設計思路:

1. 首先載入乙個鉤子函式

setwindowshookex(wh_callwndproc,  (hookproc)wndproc, g_hhookdll, getcurrentthreadid());

鉤子實際上是乙個處理訊息的程式段,通過setwindowshookex系統呼叫,把它掛入系統。每當特定的訊息發出,在沒有到達目的視窗前,鉤子程式就先捕獲該訊息,亦即鉤子函式先得到控制權。這時鉤子函式即可以加工處理(改變)該訊息,也可以不作處理而繼續傳遞該訊息,還可以強制結束訊息的傳遞。

簡單的說,鉤子程式在訊息到達目的視窗前, 可以先處理(過濾, 丟棄...)該訊息。

2. 在視窗初始化時替換掉視窗處理函式(訊息到達目的視窗前), 同時儲存原視窗處理函式

mapg_mapwindow;   //每個視窗對應的原視窗函式

lresult callback  wndproc(int   icode,  wparam   wparam,   lparam   lparam)

return 0;

}3. 實現自己的button訊息處理函式hookbuttonwndproc,這裡要處理大堆的windows訊息(十分消耗體力和耐心)

lresult callback hookbuttonwndproc(hwnd hwnd, uint msg, wparam wp, lparam lp)

return 0;

4. 自己不處理的訊息可以call下原視窗函式處理一下。

int callprewndproc(hwnd hwnd, uint msg, wparam wp, lparam lp)

return result;

}總的來說,沒有必要在介面上花費太多時間, 有時候稍微調整一下介面也會好很多。 如果您確實需要乙個華麗的介面,可以使用如今已氾濫成災的**庫。

引擎學習之二 設計引擎

1 建立動態和靜態鏈結庫 lib hinstance loadlibrary lpctstr plibfilename zfxrenderer.cpp zfxrenderer.h 建立,得到,釋放 zfxrenderdevice.h 用於定義介面 確保載入到記憶體中的dll只載入一次,如果另乙個應用...

引擎層次化設計

作為乙個引擎程式設計師,在我以往經歷的專案中經常會遇到這樣的問題,這個功能是不是該市現在引擎中,似乎放在邏輯中 或者客戶端 也可以。每當舉棋不定的時候我都會想引擎到底該做什麼!我這裡我說說我的想法。很久以前並沒有什麼引擎,所有東西都是寫在一起的,當開發新的遊戲時基本上都是從頭開始,這樣就有大量重複的...

nginx指令碼引擎與設計設計 三

這一部分我們將 一些較細節的東西,加上前面 一 二 兩篇文章對典型情景的分析,我相信應該會對大家理解nginx的指令碼解析機制有很大的幫助的。這裡我們關注ngx http core main conf t 下面簡寫為cmcf 結構中的這兩個成員,cmcf variables keys和cmcf va...