T之家訊 窗口Snap功能最早出現于Win7系統。當時其正式名稱為Aero Snap,作為Windows7的招牌功能之一,用戶可以通過拖動窗口來實現各種形態和大小改變,包括最大化、半屏、還原等。到了Win8/Win8.1時代,該功能又得到了擴展。由于Modern應用自身特點,尤其是在Windows8中不能實現傳統的窗口化顯示,因此Snap讓用戶在使用Modern應用時,能夠在屏幕上合理安排應用占屏空間大小,這對于使用平板電腦的用戶來說更為方便。
在Win10中,Snap功能又得到了進一步的提升。在Windows10預覽版中,很多用戶都已經體驗過升級版的Snap功能了。現在微軟官方博客詳細介紹了這一功能。由于Win10能夠更好地統一Win32應用和Windows應用(原Modern應用)窗口模式,微軟結合這幾年用戶對于窗口操作的使用習慣,推出了升級版的Snap。Win10中的Snap除了繼承Win7/Win8.1的特性之外,還能夠更好地適應高分辨率設備、多顯示器、觸屏設備以及2合1設備。
Snap 協助
該功能是在傳統Aero Snap的基礎上發展而來。在Win7中,當你把窗口拖動到屏幕左邊或右邊時,只會讓當前窗口占據半個屏幕,不會影響其他窗口。而在Win10中,執行同樣的操作后,如果還有其他多個窗口存在,系統會讓你選擇一個占據另外一半屏幕的窗口。
角落 Snap
這種Snap形式是傳統Aero Snap的擴展,目的是適應高分辨率大屏幕用戶操作。顧名思義,只要把窗口拖動到屏幕4個角落,窗口就會變成屏幕四分之一大小停靠在相應角落,這讓大尺寸設備更高效的安排窗口占據屏幕的空間。
另外,使用Win鍵+上、下、左、右方向鍵可以調整選中的窗口的大小和形態,適用于以上提到的所有Snap形式。
Snap 填充
在Win8/Win8.1中,用戶可以方便的調節各個Modern應用占據屏幕比例,而傳統桌面應用卻不能實現這種比例自動調節,需要用戶逐個手動調節才能實現。在Win10中,微軟將會把這種智能模式推廣到桌面應用。具體來說,當你用Snap模式操作過一個窗口,再恢復原來的大小后,系統就會記錄剛才Snap操作的情況。此時如果你再用Snap方式操作另外的窗口,系統就會自動安排其填充當前可用屏幕空間。如果當前窗口很多的話,該功能的作用就十分明顯了。
多顯示器Snap支持
在Win10中,你可以在多顯示器模式下實現各自的Snap功能。也就是說,每個顯示器邊緣各自獨立,你可以在每個顯示器上實現Snap窗口效果,這種安排可以讓多顯示器用戶更加合理方便的安排窗口。
在平板電腦和2合1設備上的平板模式和Snap
Win8是首個可讓平板電腦執行多任務的操作系統,與之相配套的就是Snap窗口調節功能。在Windows 8.1中,兩個應用的占屏比例可以是50/50、70/30以及62/38,或者你也可以使用其他自定義比例。
在Win10平板模式中,你可以使用與Win8.1類似的Snap安排模式。根據微軟從Win8.1收集的數據來看,使用默認比例和手動安排應用占屏比例的用戶大約各占一半,因此微軟打算在Win10平板模式中讓應用占屏盡量一步到位,并且使用和Win8.1相同的操作模式。微軟表示將進一步改善這種使用體驗。
不僅如此,現在桌面應用也能在平板模式下使用Snap功能。而且在進入和退出該模式后,系統會提供你可能喜歡的窗口布局形式,以免影響你的工作連續性。另外,Snap Assist在平板模式下也更為方便,能夠與桌面模式有相同體驗。
Win10新版Snap功能可以讓用戶在使用不同輸入設備時,包括觸摸屏、鍵盤、鼠標、手寫筆等都能夠有良好體驗。隨著Win10不斷的發展,這項功能將會為用戶帶來更大的方便。(Source:Microsoft)
我們可以通過使用Win32Api來制作一些強大的功能,本文將通過示例代碼來介紹使用Win32Api來之做桌面窗口停靠功能;
效果圖:
一.通過Nuget 引入 Vanara.PInvoke.Shell32 和 PInvoke.User32 這兩個庫。
二.功能列表
1.Berth 函數,將窗口停靠在桌面的右側;
1).使用 Shell32.SHAppBarMessage 函數的兩次調用將桌面的指定位置設置為"AppBar"區域;
2).使用AppWindow將窗口的模式設置為菜單模式(該模式會將窗口的標題欄移除,并且禁用了用戶更改窗口大小的功能);
3).使用 User32.SetWindowLong函數將任務欄里面的應用圖標隱藏;
4).使用User32.MoveWindow函數設置指定的大小,并且將窗口移動到指定的位置。
2.Detach 函數,將窗口取消停靠;
1).使用Shell32.SHAppBarMessage 函數移除 “AppBar” ,將桌面恢復正常;
2).使用AppWindow 將窗口設置為普通模式(將原本隱藏的標題欄顯示出來,已經更改為可以更改窗口大小);
3).使用 User32.SetWindowLong函數將原本被移除的圖標顯示出來;
4).使用User32.MoveWindow函數設置指定的大小,并且將窗口移動到指定的位置。
三.所有代碼