欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Windows核心編程(5)

一、工具提示窗口

成都一家集口碑和實力的網(wǎng)站建設服務商,擁有專業(yè)的企業(yè)建站團隊和靠譜的建站技術,十載企業(yè)及個人網(wǎng)站建設經(jīng)驗 ,為成都成百上千客戶提供網(wǎng)頁設計制作,網(wǎng)站開發(fā),企業(yè)網(wǎng)站制作建設等服務,包括成都營銷型網(wǎng)站建設,品牌網(wǎng)站設計,同時也為不同行業(yè)的客戶提供成都網(wǎng)站設計、做網(wǎng)站的服務,包括成都電商型網(wǎng)站制作建設,裝修行業(yè)網(wǎng)站制作建設,傳統(tǒng)機械行業(yè)網(wǎng)站建設,傳統(tǒng)農(nóng)業(yè)行業(yè)網(wǎng)站制作建設。在成都做網(wǎng)站,選網(wǎng)站制作建設服務商就選創(chuàng)新互聯(lián)

1.有時候把鼠標移動到一個窗口控件的時候

會有一個提示彈出來,這個的原理就是給工具提示窗口

發(fā)送一個消息,TM_ADDTOOL 


2其中參數(shù)LPARAM是TOOLINFO結構體指針

typedef struct tagTOOLINFO{
UINT cbSize  結構體大小

UINT uFlag   焦點域的屬性

HWND hWnd 包含工具的窗口標題,如果指定TTF_IDISHWND標準

則忽略值,而是用uid成員的值作為窗口句柄

UINT_PTR uId 吐過uFlag包含TTF_IDISHWND

此值為"工具"窗口句柄,  如果內(nèi)有包含 此值為工具ID,

RECT rect 如果包含TTF_IDISHWNDj就忽略此值,否則指定工具大小的RECT結構

HINSTANCE hinst 應用程序?qū)嵗浔?/p>

LPTSTR lpszText 這個域可以有如下幾個值: 如果為LPSTR_TEXTCALBACK

工具就向它的窗口發(fā)送TTN_NEEDTEXT消息獲得要點是的字符串

如果為資源標識 則顯示資源標識所對應的字符串

如果為字符串指針,則顯示字符指針指向的字符串

LPARAM lParam void* lpReserved

)TOOLINFO;

}




二、窗口半透明

1.創(chuàng)建帶有擴展屬性的窗口,CreateWindow函數(shù)參數(shù)沒有擴展屬性信息

要帶有擴展信息使用CreateWindowEx

參數(shù)1 窗口窗口的擴展樣式

參數(shù)2 窗口類名

參數(shù)3 窗口標題

參數(shù)4 窗口樣式

參數(shù)5 6 坐標

參數(shù)7 8 大小

參數(shù)9 父窗口

參數(shù)10 窗口菜單句柄

參數(shù)11 程序?qū)嵗浔?/p>

參數(shù)12 創(chuàng)建窗口附加數(shù)據(jù)指針

通過CREATESTRUCT結構體傳遞到WM_CREATE消息的LPARAM參數(shù)中 




2改變窗口各種屬性: 風格,擴展風格,ID,窗口消息過程,用戶數(shù)據(jù)等

LONG SetWindowLong(

參數(shù)1 改變屬性的窗口

參數(shù)2 nIndex 改變的類型

改變樣式或擴展樣式 GWL_STYLE GWL_EXSTYLE

ID類型 GWL_ID

應用程序句柄類型 GWL_HINSTANCE

用戶數(shù)據(jù)類型 GWL_USERDATA

窗口消息處理類型 GWL)WNDPROC

LONG dwNewLong 窗口的新屬性值,具體的屬性類型依賴于nIndex參數(shù)

)

返回創(chuàng)建舊屬性,具體返回什么依賴nIndex參數(shù)




3獲取窗口的屬性

GetWindowLong

參數(shù)1 要獲取的窗口句柄

參數(shù)2 含義和上面的nIndex意義

返回nIndex參數(shù)類型獲得相應返回值


4.要修改擴展樣式,就要先獲得原來的擴展樣式

然后再修改,比如將普通窗口改成層窗口

//獲得樣式

LONG lExStyle = GetWindowLong(hWnd,GWL_EXSTYLE);

//修改樣式

lExStyle |= WS_EX_LAYERED

//設置樣式

SetWindowLong(hWnd,GWL_EXSTYLE,lExStyle );




5.普通窗口變成層窗口 就可以具有半透明效果了

SetLayeredWindowAttributes

設置層窗口屬性

參數(shù)1 設置屬性窗口

參數(shù)2 掩碼顏色 可以用RGB指定

參數(shù)3 透明度取值范圍(0-255)0完全透明 255不透明

參數(shù)4 透明方式

LWA_ALPHA 參數(shù)2無效 參數(shù)3有效

LWA_COLORKEY 窗口中顏色為參數(shù)2的地方變透明

參數(shù)3失效


執(zhí)行成功返回TRUE




三、不規(guī)則窗口

1.大部分窗口都是長方形這樣的,當要做成一個

不規(guī)則的窗口應該這樣做

2.SetWindowRgn函數(shù)

在窗口區(qū)域之外的部分不顯示,相當于透明消息

窗口區(qū)域內(nèi)的正常顯示,窗口區(qū)域的編輯相當于窗口形狀

參數(shù)1 HWND 要改變窗口區(qū)域的句柄

參數(shù)2 HRGN 新的窗口區(qū)域句柄

參數(shù)3 BOOL 設置窗口區(qū)域后 窗口界面是否重畫

成功返回非零值


3.窗口RGN

CreateRectRgn 創(chuàng)建普通矩形區(qū)域

CreateRoundRectRgn 創(chuàng)建圓角矩形

CreateEllipticRgn 創(chuàng)建園型區(qū)域

ExtCreateRegion 創(chuàng)建自定義區(qū)域

4 CreateRoundRectRgn 

參數(shù)1 左上角x坐標

參數(shù)2 左上角y坐標

參數(shù)3 右下降x坐標

參數(shù)4 右下角y坐標

int w圓角園寬度

int h園高度


5.CreateEllipticRgn 

參數(shù)1 園的外切矩形左上角x坐標

參數(shù)2 園的外切矩形左上角y坐標

參數(shù)3 園的外切矩形右下降x坐標

參數(shù)4 園的外切矩形右下角y坐標


6.ExtCreateRegion 

參數(shù)1 lpx為執(zhí)行XFORM結構體指針,用對創(chuàng)建后的區(qū)域做變化

如果指針為空 代表創(chuàng)創(chuàng)建后區(qū)域不變換

DWORD nCount lpData所指向控件大小

CONST RGNDATA* lpData 指向RGNDATA結構體指針,包含區(qū)域數(shù)據(jù)信息


7.RGNDATA結構體

RGNDATAHEADER rdg 指向RGNDATAHEADER 結構體變量為區(qū)域數(shù)據(jù)頭信息

char Buffer[1]執(zhí)行一個任意大小緩沖區(qū).存放區(qū)域信息的RECT結構體


8.RGNDATAHEADER 結構體

DWIRD dwSize 結構體大小

DWORD iType 區(qū)域類型 必須為RDH_RECTANGLES

DWORD nCount 組成區(qū)域的所有矩形個數(shù)

DWORD nRgnSize 組成區(qū)域的所有矩形的緩沖區(qū)大小

RECT rcBound 區(qū)域的矩形邊界




四、截獲窗口消息或事件

1.有時候要改變Windows的MessageBox 改成自己的,

但是他是Windows里的, 我們沒有源碼, 所以我們需要用到

攔截他的PAINT消息,改變他的繪制效果.

2.可以通過子類化的方法 SetWindowLong 把他的消息過程改了

但是呢 他這個你要在哪里改呢, 如果是在他彈出來后在更改

這樣就給人效果不好了, 所以你要知道窗口是再哪初始化最好的

然后來修改, 對話框一般在WM_INITDIALOG消息進行初始化

所以在這里修改最好.把他子類化,

3.那我怎么知道WM_INITDIALOG這個消息呢

通過Windows里的鉤子



五、鉤子 

在目標消息函數(shù)處理之前,處理該消息

1.安裝鉤子函數(shù)SetWindowsHookEx

HHOOK SetWindowsHookEx(

    int idHook, //鉤子類型


    HOOKPROC lpfn, //鉤子程序函數(shù)指針

    (

    如果dwThreadId參數(shù)為0或者是由別的進程創(chuàng)建的線程表示,

    那么ipfn必須指向DLL中的鉤子程序,,

    如果dwThreadId為當前進程所創(chuàng)建的線程標識,那么ipfn可以

    指向當前進程的鉤子程序,lpfn為HOOKPROC

    typedef LRESULT(CALLBACK* HOOKPROC)(int code,WPARAM,LPARAM)

    code 提示了是否處理該消息,如果參數(shù)值為HC_ACTION,則可以處理

    該消息,如果code值小于0,則不需要處理消息,這是要調(diào)用CallNext

    HookEx函數(shù)并返回這個函數(shù)的值,CallNextHookEx為調(diào)用鉤子列表

    中下一個鉤子的鉤子程序.

    )


    HINSTANCE hmod,//lpfn所在程序模塊的實例句柄,如果dwThreadId

    為當前進程所創(chuàng)建的線程表示并且鉤子程序代碼也也位于當前進程,

    則hmode必須為NULL

    

    DWORD dwThreadId, //鉤子程序相關聯(lián)的線程的標識符,如果為0,

    鉤子程序就與所有程序關聯(lián),這時的鉤子就是全局鉤子.

)



2.鉤子類型

每一類型的鉤子可以使應用程序能夠監(jiān)視不同類型的消息處理機制

具體有:WH_CALLWNDPROC和WH_CALLWNDPROCRET:這兩種類型使你

監(jiān)視發(fā)送到窗口過程的消息,系統(tǒng)再消息發(fā)送到接收窗口過程之前調(diào)用

WH_CALLWNDPROC類型的鉤子,在窗口過程處理完消息之后調(diào)用

WH_CALLWNDPROCRET類型的鉤子

WH_CBT:以下事件之前,系統(tǒng)都調(diào)用WH_CBT類型鉤子 

1) 激活,建立,最小化,最大化,移動,改變窗口大小,等窗口事件

2) 完成系統(tǒng)指令

3) 來自系統(tǒng)消息隊列中的移動鼠標,鍵盤事件

4) 設置輸入焦點事件

5) 同步系統(tǒng)消息隊列事件

WH_GETMESSAGE: 監(jiān)視從消息隊列返回的消息,可使用

該鉤子類型去監(jiān)視鼠標和鍵盤輸入,已經(jīng)發(fā)送到消息隊列中的其他消息

WH_KEYBOARD:應用程序可以使用WH_KEYBODY類型的鉤子監(jiān)視消息隊列中的

鍵盤消息,

WH_MOUSE 應用程序可以使用WH_MOUSE類型的鉤子來監(jiān)視消息隊列中鼠標消息



3.將鉤子信息床底到當前鉤子鏈中的下一個子程,一個鉤子程序可以調(diào)用這個

函數(shù)之前或之后處理鉤子的信息

CallNextHookEx(

    HHOOK hhk,當前鉤子句柄

    int nCode, 等同于HOOKPROC的nCode

    WPARAM wParam, 等同于HOOKPROC的wParam

    LPARAM lParam, 等同于HOOKPROC的lParam

)




4.HOOKPROC回調(diào)函數(shù)

LRESULT CAKKBACK HookProc(
int iCode HC_ACTION HC_GETNEXT HC_SKIP HC_NOREMOVE.....

WPARAM 取決于鉤子類型

LPARAM 取決于鉤子類型

比如鉤子類型是WH_KEYBOARD那么lParam和wParam等同于WM_KEYDOWN的

lParam和wParam,如果鉤子類型為WH_CALLWNDPROC,wParam表示消息

是否來源于當前線程(非零,則表示當前線程,否則來源于其他線程)

LPARAM就為指向CWPSTRUCT結構體指針. 


5.卸載鉤子

UnhookWindowsHookEx

卸載之前安裝成功的鉤子

BOOL UnhookWindowsHookEx(

    HHOOK hhk  //之前安裝鉤子返回的鉤子句柄 

)成功返回TRUE




網(wǎng)站名稱:Windows核心編程(5)
本文鏈接:http://www.chinadenli.net/article14/peeode.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供面包屑導航網(wǎng)站設計電子商務品牌網(wǎng)站建設網(wǎng)站建設網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化