**引擎設計
**引擎設計思路:
其實也就是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...