實現類似360懸浮視窗這樣的效果,當視窗在螢幕邊緣時,滑鼠移開,就自動向邊緣隱藏,滑鼠放上去,就又平滑顯示出來。
正常狀態:
邊緣自動隱藏:
mfc實現不規則視窗
然後需要給沒有標題欄的視窗增加拖拽移動的功能,這個就是自己手動傳送乙個訊息,使windows認為滑鼠在標題條上
對於視窗的移動顯示隱藏,使用了定時器。
其中有一些做判斷的函式,如判斷在視窗在螢幕某個邊緣,判斷滑鼠是否在視窗內部等。
由於這裡還是截圖然後用ps簡單選擇了個範圍,所以還有毛邊,若是有美工原圖或ps仔細些,是沒問題的。
②給dlg類ctest360dlg新增一條訊息響應onlbuttondown,在其中傳送wm_nclbuttondown訊息,達到拖動效果。
void ctest360dlg::onlbuttondown(uint nflags, cpoint point)
③新增幾個判斷視窗是否在螢幕邊緣的函式:
//是否靠近螢幕左邊緣
bool ctest360dlg::nearleftborder()
return false;
}//是否靠近螢幕上邊緣
bool ctest360dlg::nearupborder()
return false;
}//是否靠近右邊緣
bool ctest360dlg::nearrightborder()
return false;
}
④判斷滑鼠是否在視窗內。
bool ctest360dlg::mouseinwnd()
return false;
}
⑤定義乙個定時器,#define timer_move 1
在ctest360dlg::oninitdialog()中啟動:
bool ctest360dlg::oninitdialog()
處理如下:
void ctest360dlg::ontimer(uint_ptr nidevent)
//靠近螢幕上邊緣
if (nearupborder())
//靠近螢幕左邊緣
if (nearleftborder())
//靠近螢幕右邊緣
if (nearrightborder())
}cdialog::ontimer(nidevent);
}
其中getkeystate先強行過濾掉滑鼠按下,讓這種情況不移動。避免剛拖動視窗到螢幕邊緣時滑鼠還沒鬆開就直接開始移動了。
3個move函式,是真正按畫素移動視窗的地方,包括來回(出螢幕和進螢幕)。原理是一樣的,看明白乙個就ok了。
void ctest360dlg::moveup()
else
rc.bottom = rc.top + height;
movewindow(rc);
} //滑鼠在別處,視窗就往上移出螢幕
else
else
rc.bottom = rc.top + height;
movewindow(rc); }}
void ctest360dlg::moveleft()
else
rc.right = rc.left + width;
movewindow(rc);
} //滑鼠在別處,視窗就往上移出螢幕
else
else
rc.right = rc.left + width;
movewindow(rc); }}
void ctest360dlg::moveright()
else
rc.right = rc.left + width;
movewindow(rc);
} //滑鼠沒在視窗上,視窗就往右移出螢幕
else
else
rc.right = rc.left + width;
movewindow(rc);
}}
對moveup做說明:
當timer中判斷到視窗在螢幕上邊緣時,進入moveup,如果此時滑鼠進入視窗內,視窗就往下方移動直到完全顯示;如果滑鼠離開視窗,那麼視窗會立即往上隱藏,直到留下一小截。 360官方軟體現在是換了個半圓形的視窗「趴」在螢幕邊上。這裡主要是模擬觸發移動的效果。
幾張截圖
左側:
上側:
右側:
mfc模擬360懸浮窗加速球test360_vs2008工程.rar
vc 實現懸浮窗,迅雷360懸浮球效果
1.setwindowrgn建立圓角懸浮窗dlgfloat rgn.createroundrectrgn rect.left,rect.top,rect.width rect.height 13,13 m rgnwnd.deleteobject m rgnwnd.createrectrgn 0,0,...
Andorid 任意介面懸浮窗,實現懸浮窗如此簡單
1.支援拖動,提供自動貼邊等動畫 2.內部自動進行許可權申請操作 3.可自由指定要顯示懸浮窗的介面 4.應用退到後台時,懸浮窗會自動隱藏 5.位置不可變的懸浮窗無需許可權申請 6.位置及寬高可設定百分比值,輕鬆適配各解析度 7.鏈式呼叫,簡潔清爽 第 1 步 在工程的 build.gradle 中新...
IOS 應用懸浮窗
在應用的檢視的最頂層新增乙個uiwindow,用這個uiwindow 充當懸浮窗,給uiwindow新增移動的手勢監聽,讓懸浮窗隨著手指移動,釋放的時候,讓它以動畫的方式靠邊 懸浮窗測試 建立乙個懸浮視窗 mwindow assistivetouch alloc initwithframe cgre...