Maui學習之路(一)--Windows窗體設置

Maui的學習之路

作為 Maui的先行者,我有話要說,微軟你為了讓我成為牛 B 的程序員真的是煞費苦心,你一定是覺得我不夠牛逼所以針對我,存心想氣死我。

好了廢話不多說,Maui現在也算是正式發布了,我有點想用它來做一個桌面應用最好是支持 WindowsMac(當然 Linux我也想,但是微軟不給我),于是我開始著手搞了起來。按照官方教程,下載安裝 vs2022 最新預覽版(Mac 也一樣),勾選 Maui相關工作負載,創建 Maui模板程序,直接編譯運行,一頓操作行云流水,順利的讓人直呼有戲。

OK,程序運行完美,Mac 上也很完美,而且一套代碼在 WindowMac 上無縫運行,這很 nice,我開始有點信心滿滿。作為一名牛逼程序員我必須要有點自己的想法,比如我想做一個無邊框的桌面應用,這應該很 easy,只需要更改 windowstyle 為 none(我以為是這樣),因為一直以來都是這樣,于是我也準備這樣去做。可是找了半天無論是 Window 類或是 MauiWinUIWindow 還是 UIWindow 都沒有。

我一定是眼花了,我需要更加仔細一點,我提醒自己,于是我又花了半個小時仔細找了一遍,甚至還看了點 Maui的源碼(雖然我沒看懂)。是的,我沒有看錯,是真的沒有,好吧是我想得太簡單了,作為跨平臺程序要考慮那么多平臺,這不是件容易的事,我安慰自己。

好的此路不通,那么我去看看Maui的官方教程,這一定有畢竟是官方教程嗎?應該很全面。于是我又花了半個小時,看了一遍教程,很抱歉還是沒有,嗯這是一件極其難的事情,畢竟是跨平臺嗎,可以理解。那我去找找WinUI的官方教程吧,畢竟是用的WinUI3。說干就干,我三下五除二直奔主體,功夫不負有心人,終于在標題欄里面找到了答案,雖然有答案,但是我還是想說微軟真有你的,你做的這破玩意兒跟 mfc 有啥區別幾乎就是原生 api 的簡單封裝嗎,不愧是你 --- 我的巨硬(此處喊破喉嚨) 。

我呵呵一笑,于是寫下了 Maui Windows桌面程序修改標題欄的葵花寶典,只見上面密密麻麻寫著坑爹。秘籍如下:

1、 你一定要有耐心;

2、 你一定要有耐心;

3、 你一定要有耐心;

4、 在使用該方案前你一定要注冊 Windows 下的生命周期函數,參考文檔:應用生命周期 - .NET MAUI | Microsoft Docs[1],你也可以不用這個方法,而是在 app 下重寫 OnCreate 函數;

  • 注冊生命周期函數

87fc767b8f1deb1a066070b2952c08a1.png
  • 重寫 OnCreate 方法

f373e8450f40d9b2f7b4cf2f2dbb1c5d.png39b2d2d4c9006e44d3649d98ff76dc2e.png

5、 你一定要將 Maui Windows 下自帶的 ExtendsContentIntoTitleBar 設置為 false(這很重要,另外 Maui Window 類下有一個 SetTitleBar,對不起這不是你想的那樣,怎么修改他都無效,可能是我太水沒找到方法)

6、 使用 Maui 窗口句柄(Windows 平臺),獲取 AppWindow,修改 AppWindow 下的 TitleBar 的相關屬性,參考文檔:標題欄自定義 - Windows apps | Microsoft Docs [2]

3389ac7e90a2040a9c2a38bf448723d4.png

7、 完成以上步驟,那么恭喜你,你可以擁有一個無標題欄的窗口了(實際標題欄還在,只不過和下面的正式內容合并在一起了);

8、 好了完成了上述步驟,那么你一定也想做個,可以任意控制窗體初始化大小,以及最大化窗口的功能,這很抱歉,這真的是太難了。廢話不多說,直接上代碼,參考文檔:AppWindow Class (Microsoft.UI.Windowing) - Windows App SDK | Microsoft Docs [3]

a) 窗體最大化需要調用 Win32Api,給窗體發送最大化事件(我做了簡單的封裝有需要的小伙伴可以找我要,也許還有別的方案只是我太笨)

e75ca4ec0c8ec0e036e4e0d58f7cb8cd.png

b) 改變窗體大小需要調用 AppWindowMoveAndResize 注意這個函數內部并沒有考慮過 Dpi 縮放的問題,需要你自己解決

63c590086bc306c5e2c2f6eedd7f7408.png

c) 啟用全屏,需要使用 AppWindowPresenter,參考文檔:AppWindowPresenter Class (Microsoft.UI.Windowing) - Windows App SDK | Microsoft Docs[4]

866a967e8b899296ae17767de473ce4e.png

終于一個簡單的窗體指定窗體大小、最大化窗體、無邊框的窗體終于完成了,這確實很簡單,滿滿的都是淚(現在還有一些問題就是標題欄拖動會影響按鈕沒法點擊)。

最后,我只能發出無能狂怒,巨硬,下次請把我當傻子可以嗎?

參考資料

[1]

參考文檔:應用生命周期 - .NET MAUI | Microsoft Docs: https://docs.microsoft.com/zh-cn/dotnet/maui/fundamentals/app-lifecycle

[2]

參考文檔:標題欄自定義 - Windows apps | Microsoft Docs : https://docs.microsoft.com/zh-cn/windows/apps/develop/title-bar?tabs=wasdk

[3]

參考文檔:AppWindow Class (Microsoft.UI.Windowing) - Windows App SDK | Microsoft Docs : https://docs.microsoft.com/zh-CN/windows/windows-app-sdk/api/winrt/microsoft.ui.windowing.appwindow?view=windows-app-sdk-1.0

[4]

參考文檔:AppWindowPresenter Class (Microsoft.UI.Windowing) - Windows App SDK | Microsoft Docs: https://docs.microsoft.com/zh-CN/windows/windows-app-sdk/api/winrt/microsoft.ui.windowing.appwindowpresenter?view=windows-app-sdk-1.0

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/286707.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/286707.shtml
英文地址,請注明出處:http://en.pswp.cn/news/286707.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Git 常用命令大全

Git 是一個很強大的分布式版本控制系統。它不但適用于管理大型開源軟件的源代碼,管理私人的文檔和源代碼也有很多優勢。 Git常用操作命令: 1) 遠程倉庫相關命令 檢出倉庫:$ git clone git://github.com/jquery/jquery.git 查看遠程倉庫&#…

為什么本地使用js或jquery操作cookie在谷歌瀏覽器chrome中不生效?

2019獨角獸企業重金招聘Python工程師標準>>> 為什么本地使用js或jquery操作cookie在谷歌瀏覽器chrome中不生效?新手學習js或jquery時,一般是在本地調試(前端學習一般用不到服務器端),當學習到cookie一節時&…

全解小程序猜數字游戲 04《 程序員變現指南之 微信QQ 小程序 真的零基礎開發寶典》

本系列教程是針對粉絲的變現教程,還不是粉絲的可以關注我并且到社區:https://bbs.csdn.net/topics/603436232 進行打卡,不是老粉的也可以獲取最終的技術變現學習,最終還有詳細的變現教程等你來。 社區有獎勵 下面有投票 本文也…

Android之解決主頁面Activity監聽fragment退出問題(由NavHostFragment和RxFragment一起管理fragment)

1、 問題 app里面目前主頁面是一個activity,然后部分fragment是由NavHostFragment管理,當splash、login等頁面也放在navigation時,按手機的返回鍵這些頁面只能一頁頁回退,因為設置了 app:defaultNavHost="true" 并不能在某個頁面例如splash、login按返回鍵時退…

linux之ps命令詳解

linux中ps(process status) 命令是LINUX下最常用的也是非常強大的進程查看命令,運用該命令可以確定有哪些進程正在運行和運行地狀態、進程是否結束、進程有沒有僵死、哪些進程占用了過多地資源等等。 ps命令最常用的是用于監控后臺進程的工作情況。 Linux 查看進程p…

【空間數據庫】傳統數據模型(層次、網狀、關系)和空間數據模型詳解

數據模型是指數據庫的組織形式,它決定了數據庫中數據之間聯系的表達方式,即把在計算機中表示客觀事物及其聯系的數據及結構稱為數據模型。本文詳細講述傳統三大數據模型和空間數據模型。 一、數據模型概述 數據模型是指數據庫的組織形式,它決定了數據庫中數據之間聯系的表…

聊聊 C# 中的多態底層 (虛方法調用) 是怎么玩的

最近在看 C 的虛方法調用實現原理,大概就是說在 class 的首位置存放著一個指向 vtable array 指針數組 的指針,而 vtable array 中的每一個指針元素指向的就是各自的 虛方法,實現方式很有意思,哈哈,現在我很好奇 C# 中…

sublime text 3 安裝、添加命令行啟動、漢化、注冊碼

1. 安裝sublime: 下載:http://www.sublimetext.com/3 添加命令行啟動:設置環境變量->計算機->右鍵屬性->高級系統設置->環境變量->系統變量->Path->編輯,加入";安裝路徑"(如:;D:\Progr…

MVC基礎知識-View

public ActionResult Index() {ViewBag.Message "Modify this template to jump-start your ASP.NET MVC application.";//展現到視圖中數據//~/Views/Home/Index.cshtmlreturn View(); //展現指定的視圖,當沒有指定視圖名稱時,默認是指向根目…

Android之設置當前app為默認瀏覽器研究

1 需求 把當前app設置為默認瀏覽器 2 主要思路 分析競品,我們主要通過2種方式設置app為默認瀏覽器 直接跳 手機“設置默認應用”界面來讓用戶選擇 默認瀏覽器為哪個app打開一個鏈接,拉起手機所有瀏覽器,讓用戶去選擇哪個瀏覽器,并且只有點擊“始終”才會生效,僅僅點擊“…

Linux下的用戶和組

2019獨角獸企業重金招聘Python工程師標準>>> 用戶和組 GNU/Linux 通過用戶和用戶組實現訪問控制 —— 包括對文件訪問、設備使用的控制。Linux 默認的訪問控制機制相對簡單直接,不過還有一些更加高級的機制,包括 ACL 和 LDAP Authentication.…

漫畫C語言 做個聊天軟件你不懂也得懂

學完C語言做不出東西?不存在的,咱們做一個最“隱私”的聊天器,就倆人,你和我。咱們聊天的信息你知我知沒別人知。 對了,本文評論區點贊、收藏抽獎。 社區也有抽獎,本周社區抽獎帖子 :https://b…

【Microstation】第一章:Microstation三維模型構建概述

MicroStation 是國際上和AutoCAD齊名的二維和三維CAD設計軟件,第一個版本由Bentley兄弟在1986年開發完成。其專用格式是DGN,并兼容AutoCAD的DWG/DXF等格式。 MicroStation是Bentley 工程軟件系統有限公司在建筑、土木工程、交通運輸、加工工廠、離散制造…

libgdx游戲引擎開發筆記(十)SuperJumper游戲例子的講解(篇四)---- 主游戲界面內部框架編寫...

上一講,我們已經實現了點擊play進入游戲界面但僅僅是個黑屏 今天,我們就試著編寫代碼讓它出現游戲的一些簡單場景。還是在上一講的代碼基礎上,我們創建兩個類:World 和 WorldRenderer 1.Word類: 12345678910111213141…

看看《System.CommandLine》

記得之前出過幾篇.net tool工具的文章,當時的做法是所有工具的語法分析全部自己解釋,自己執行,語法的解釋占了大部分時間,反而工具的功能被弱化了。其實微軟有一個CommandLine框架在緩慢的發展著,至今都沒有正式發布&a…

Sublime Text 3 import Anaconda 無法正常補全模塊名解決辦法

Sublime Text 3 Anaconda配置 在安裝Sublime Text3之后我們總會安裝一些插件,比如Python的Anaconda自動補全插件。但是,裝好之后發現import 時無法像別的IDE里面那樣自動補全模塊名,就像圖中一樣: 解決辦法在Sublime Text的git…

hdu - 2586 How far away ?(最短路共同祖先問題)

題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid2586 最近公共祖先問題~~LAC離散算法 題目大意:一個村子里有n個房子,這n個房子用n-1條路連接起來,接下了有m次詢問,每次詢問兩個房子a,b之間的距離是多少。 很明顯…

Android之添加固定圖標到桌面

我的QQ群 1 需求 Android之添加固定圖標到桌面 2 部分實現 在AndroidManifest.xml里面添加如下權限 <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /><uses-permission android:name="com.android.launcher.perm…

想做程序員?不同方向入門路線全解

學習計算機編程有很多方向如果你沒有一個正確的路線&#xff0c;那么就會&#xff1a; 就會跟上面所說的那樣&#xff0c;被迫成為一個全棧&#xff0c;這是比較尷尬的。 若你想比較準確的針對某個方向學習&#xff0c;那就繼續往下看吧。 一、程序員分為哪幾個方向 隨著…

【轉】OpenGL超級寶典筆記——紋理映射Mipmap

原文地址 http://my.oschina.net/sweetdark/blog/177812 , 感謝作者&#xff0c;若非法轉載請聯系本人。 目錄[-] MipmappingMipmap過濾構建Mip層Mipmaps 硬件生成LOD&#xff08;多細節層次&#xff09;偏好紋理對象管理多個紋理常駐紋理紋理優先級回顧Mipmapping Mipmap是一個…