一、項(xiàng)目介紹
大家想必都知道QQ聊天對(duì)話框中,有一個(gè)抖動(dòng)個(gè)功能,相信大家也都用過(guò).本源碼即仿這個(gè)效果制造一個(gè)窗口抖動(dòng),讓大家開(kāi)開(kāi)眼界。
二、運(yùn)行截圖
抱歉各位,因?yàn)槭谴翱诙秳?dòng)動(dòng)態(tài)效果,所以實(shí)在沒(méi)辦法截圖,請(qǐng)大家自己腦補(bǔ)吧 qaq~
三、代碼思路
本源碼主要就是調(diào)用了windows中的幾個(gè)API,包括GetForegroundWindow獲取句柄,核心動(dòng)作為MoveWindow
移動(dòng)位置,通過(guò)更改該本API中的坐標(biāo)位置,加上Sleep和循環(huán)即可實(shí)現(xiàn)抖動(dòng)效果,大家可以嘗試修改坐標(biāo)差或等待時(shí)間,來(lái)達(dá)到不同的抖動(dòng)效果,大家可以自行嘗試。
四、完整源碼
VC6.0等常見(jiàn)編譯器即可,無(wú)額外環(huán)境依賴
#include <stdio.h> #include <windows.h> int main(int argc, char *argv[]) { RECT rect; //RECT是一個(gè)矩形結(jié)構(gòu)體,相當(dāng)于保存了一個(gè)矩形的四條邊的坐標(biāo) HWND hwnd = NULL,oldhwnd = NULL; //兩個(gè)窗口句柄 int x,y,width,height; //用來(lái)保存窗口橫縱坐標(biāo)和寬度、高度的變量 int i; system("title C語(yǔ)言研究中心www.sztianhecheng.cn"); for(i=0;i<50;i++) { hwnd = GetForegroundWindow(); //一個(gè)API函數(shù),獲取活動(dòng)窗口的句柄 if(hwnd!=oldhwnd) { GetWindowRect(hwnd,&rect); //獲取指定窗口的位置 x = rect.left; y = rect.top; width = rect.right - x; height = rect.bottom - y; oldhwnd = hwnd; //把剛剛獲取的窗口句柄保存起來(lái)。 } MoveWindow(hwnd,x-10,y,width,height,TRUE); //向左移動(dòng)了10像素,下同 Sleep(5); //暫停5毫秒 MoveWindow(hwnd,x-10,y-10,width,height,TRUE); Sleep(5); MoveWindow(hwnd,x,y-10,width,height,TRUE); Sleep(5); MoveWindow(hwnd,x,y,width,height,TRUE); Sleep(5); } return 0; }
C語(yǔ)言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競(jìng)賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點(diǎn)擊了解:
一點(diǎn)編程也不會(huì)寫(xiě)的:零基礎(chǔ)C語(yǔ)言學(xué)練課程
解決困擾你多年的C語(yǔ)言疑難雜癥特性的C語(yǔ)言進(jìn)階課程
從零到寫(xiě)出一個(gè)爬蟲(chóng)的Python編程課程
只會(huì)語(yǔ)法寫(xiě)不出代碼?手把手帶你寫(xiě)100個(gè)編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競(jìng)賽課入門(mén)課程
手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程