MFC模擬360懸浮窗加速球視窗

2021-06-19 15:56:19 字數 2761 閱讀 5513

實現類似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...