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

Windows核心編程(5)-創(chuàng)新互聯(lián)

一、工具提示窗口

創(chuàng)新互聯(lián)是一家專業(yè)提供建平企業(yè)網(wǎng)站建設(shè),專注與成都做網(wǎng)站、成都網(wǎng)站制作、成都h5網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為建平眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進行中。

1.有時候把鼠標(biāo)移動到一個窗口控件的時候


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

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

2其中參數(shù)LPARAM是TOOLINFO結(jié)構(gòu)體指針

typedef struct tagTOOLINFO{
UINT cbSize  結(jié)構(gòu)體大小

UINT uFlag  焦點域的屬性

HWND hWnd 包含工具的窗口標(biāo)題,如果指定TTF_IDISHWND標(biāo)準(zhǔn)

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

UINT_PTR uId 吐過uFlag包含TTF_IDISHWND

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

RECT rect 如果包含TTF_IDISHWNDj就忽略此值,否則指定工具大小的RECT結(jié)構(gòu)

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

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

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

如果為資源標(biāo)識 則顯示資源標(biāo)識所對應(yīng)的字符串

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

LPARAM lParam void* lpReserved

)TOOLINFO;


}

二、窗口半透明

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


要帶有擴展信息使用CreateWindowEx


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

參數(shù)2 窗口類名

參數(shù)3 窗口標(biāo)題

參數(shù)4 窗口樣式

參數(shù)5 6 坐標(biāo)


參數(shù)7 8 大小

參數(shù)9 父窗口

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

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

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

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

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

LONG SetWindowLong(

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

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

改變樣式或擴展樣式 GWL_STYLE GWL_EXSTYLE

ID類型 GWL_ID

應(yīng)用程序句柄類型 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ù)類型獲得相應(yīng)返回值

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

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

//獲得樣式

LONG lExStyle = GetWindowLong(hWnd,GWL_EXSTYLE);

//修改樣式

lExStyle |= WS_EX_LAYERED

//設(shè)置樣式

SetWindowLong(hWnd,GWL_EXSTYLE,lExStyle );

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

SetLayeredWindowAttributes


設(shè)置層窗口屬性

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

參數(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.大部分窗口都是長方形這樣的,當(dāng)要做成一個


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

2.SetWindowRgn函數(shù)

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

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

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

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

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

成功返回非零值

3.窗口RGN

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

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

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

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

4 CreateRoundRectRgn

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

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

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

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

int w圓角園寬度

int h園高度

5.CreateEllipticRgn

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

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

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

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

6.ExtCreateRegion

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

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

DWORD nCount lpData所指向控件大小

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

7.RGNDATA結(jié)構(gòu)體

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

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

8.RGNDATAHEADER 結(jié)構(gòu)體

DWIRD dwSize 結(jié)構(gòu)體大小

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里的鉤子

五、鉤子

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

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

HHOOK SetWindowsHookEx(

    int idHook, //鉤子類型


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

    (

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

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

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

    指向當(dāng)前進程的鉤子程序,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


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


    則hmode必須為NULL



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

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


)

2.鉤子類型

每一類型的鉤子可以使應(yīng)用程序能夠監(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)消息隊列中的移動鼠標(biāo),鍵盤事件

4) 設(shè)置輸入焦點事件

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

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

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

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

鍵盤消息,

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

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

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

CallNextHookEx(

    HHOOK hhk,當(dāng)前鉤子句柄


    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表示消息

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

LPARAM就為指向CWPSTRUCT結(jié)構(gòu)體指針.


5.卸載鉤子

UnhookWindowsHookEx

卸載之前安裝成功的鉤子

BOOL UnhookWindowsHookEx(

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


)成功返回TRUE

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

新聞名稱:Windows核心編程(5)-創(chuàng)新互聯(lián)
網(wǎng)頁URL:http://chinadenli.net/article0/ccgeoo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊品牌網(wǎng)站設(shè)計動態(tài)網(wǎng)站微信公眾號外貿(mào)建站網(wǎng)站營銷

廣告

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

成都app開發(fā)公司