日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

2.Windows 界面技术发展现状

發布時間:2023/12/2 windows 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2.Windows 界面技术发展现状 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

毫無疑問,Windows的流行推動了圖形界面的發展,從最原始的Win32界面庫到MFC,再到最近UWP界面庫,Windows界面庫的發展也代表了界面庫和整個軟件行業的發展方向。本文就簡單梳理下整個Windows界面庫的發展歷程和現狀。

Win32

Windows 整個系統的圖形界面是建立在Win32圖形界面接口上的,它提供了Windows界面編程的基本模型——顯示管理窗口和消息循環分發事件。Win32是C接口形式,一個典型的窗口程序如下,可以看到就是按照通用界面庫模型來的,不再贅述,對此感興趣的可以看Petzold的《Windows程序設計》。Win32需要考慮細節太多,目前實際編程很少再用原生win32了,一般是第三方界面庫基于Win32包裝或其他語言通過包裝Win32來提供基本界面功能。

#include <windows.h>LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) {static TCHAR szAppName[] = TEXT ("窗口類名稱");HWND hwnd;MSG msg;WNDCLASSEX wndclassex = {0};//設計窗口類wndclassex.cbSize = sizeof(WNDCLASSEX);wndclassex.style = CS_HREDRAW | CS_VREDRAW;wndclassex.lpfnWndProc = WndProc;wndclassex.cbClsExtra = 0;wndclassex.cbWndExtra = 0;wndclassex.hInstance = hInstance;wndclassex.hIcon = LoadIcon (NULL, IDI_APPLICATION);wndclassex.hCursor = LoadCursor (NULL, IDC_ARROW);wndclassex.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);wndclassex.lpszMenuName = NULL;wndclassex.lpszClassName = szAppName;wndclassex.hIconSm = wndclassex.hIcon;//注冊窗口類if (!RegisterClassEx (&wndclassex)){MessageBox (NULL, TEXT ("RegisterClassEx failed!"), szAppName, MB_ICONERROR);return 0;}//產生窗口hwnd = CreateWindowEx (WS_EX_OVERLAPPEDWINDOW, szAppName, TEXT ("窗口名稱"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance,NULL); //顯示窗口ShowWindow (hwnd, iCmdShow);UpdateWindow (hwnd);//啟動消息循環泵循環獲取消息分配到窗體過程函數處理while (GetMessage (&msg, NULL, 0, 0)){TranslateMessage (&msg);DispatchMessage (&msg);}return msg.wParam; }//窗體過程函數 LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {HDC hdc;PAINTSTRUCT ps;switch (message){case WM_CREATE:return (0);case WM_PAINT:hdc = BeginPaint (hwnd, &ps);EndPaint (hwnd, &ps);return (0);case WM_DESTROY:PostQuitMessage (0);return (0);}return DefWindowProc (hwnd, message, wParam, lParam); }

?MFC

可以看到Win32創建一個簡單的界面需要大段的代碼,既然是遵循相同的模型,恰好適逢C++技術發展,微軟借助C++技術將界面編程抽象成許多類,包裝諸多細節,最明顯的兩個特征:

1.簡化窗口創建,窗口創建和類綁定,創建的公共操作封裝到基類中

2.窗口過程統一勾到一個處理函數中,然后分發到對應的每個窗口類中(可以參考我的這篇文章)

這樣開發者只需要重寫部分虛函數,填充消息消息響應表實現響應函數即可,大大減少了開發者的工作量,而且結合VC提供的可視化功能,能夠快速的完成界面代碼的生成。但是MFC封裝臃腫了,繼承層次過多,且當時的C++標準尚未完善為了彌補有很多hack設計,但是MFC經過這么多年的發展已經相當穩定了,所以現在主要用在工業領域,算是工業領域的一個標準了,一些小公司和小工具也還是在用MFC,感興趣的入門可以看看孫鑫《VC++深入詳解》,提高可以看侯捷的《深入詳解MFC》和David《Visual C++ 技術內幕》。

WTL

因為MFC的臃腫,微軟的一個開發小組業余開發了WTL,并且逐漸被大家接受,WTL主要基于C++ 模板技術,封裝很輕量級,而且兼具MFC的諸多優點,還可以和MFC混用。但是因為WTL技術上相對MFC要求較高,目前主要是一些大廠(360、金山等)在用,而且由于WTL的封裝很易于擴展,國內大多數Windows C++界面庫都是基于WTL開發的,接下來關于界面庫的編寫也主要基于WTL講解。

WTL出來的相對較晚,微軟也沒有大力宣傳過,市面上講解的書不多,詳細了解WTL可以看看WTL for MFC Programmers系列文章,這是中文版本鏈接。

Qt Widget

qt并非微軟的界面庫,他是一個跨平臺的C++界面庫,最早由諾基亞開發用于手機界面展示,現在由奇趣公司維護。之所以把Qt放在這里講,是因為Qt在Windows上使用非常廣泛,而且引入了非常多新的設計。如果把原生Win32比作界面庫1.0,MFC/WTL比作界面庫2.0,那么Qt Widget可以算是界面庫3.0。它引入了xml布局界面,支持Qss樣式,支持非常多系統組件,非常易于編寫現代化的DirectUI界面,現在Qt被廣泛的用在了工業領域,互聯網產品比如WPS,YY語音等也都是基于Qt編寫。可以說如果需要一種跨平臺的C++界面庫,那么Qt是最好的選擇。可以參考書籍Jasmin 《C++ GUI Qt 4編程(第2版)》,這本書有點老,可以結合現在文檔一起看,Qt的文檔寫的非常好。

WinForm

winform并非C++界面庫,但是微軟后期的主要精力在于推廣自己的C#語言,因此winform可以看做是微軟界面庫發展的延續。Winform是基于Win32封裝,屏蔽了很多細節,擁有超多組件,結合VC編寫所見即所得界面非常簡單。但是打包發布Winform窗體程序時,一般需要帶上對應.Net 運行時,因此程序體積比較大,但是勝在開發效率快和COM、數據庫集合非常好,很多企業化辦公和管理系統都是基于Winform來編寫的。

WPF

Winform主要還是基于win32界面庫,在新的互聯網時代DirectUI的誕生讓開發者可以編寫更加現代化更加炫酷支持更多自定義的界面,為此微軟大力推出了WPF。DirectUI技術某種程度上其實就是在客戶端界面編程做到類似Web前端開發,通過聲明式的類xml和css控制顯示,通過類腳本控制界面動作和效果,做到顯示和邏輯分離

WPF曾是微軟大力推的界面技術,它引入了很多革新的概念——xaml布局、數據綁定技術等等,支持更加復雜的繪制和特效,和Qt Widget類似,但是更加強大,進一步提高了開發效率,可以看做界面庫3.5。但是由于WPF最開始基于CPU渲染,有很大的性能問題,現在某種程度上已經得到了很好的優化,然而和winform一樣有依賴.net運行時的問題,而許多互聯網公司的產品都是需要支持Window?XP(比如QQ、360安全衛士等),所以WPF不是桌面應用程序界面開發首選,WPF現在還是主要用在企業化辦公和管理系統。

UWP和Qt QML

在移動互聯網的路上,微軟并沒有走的很好,為了打出差異,推出了手機/平板/PC一體的Win8,隨之推出的是號稱一次編寫到處運行UWP應用,其實UWP很像WPF,但是界面編寫方式更貼近Web前端。UMP應用市場正在逐漸完善,但是畢竟操作體驗和傳統PC windows有差別,且很多地方還是處于一種混合的方式,只能等待微軟改進和時間磨合了,具體前途怎樣現在很難說,依賴于.Net的問題同樣是現階段的一個制約,微軟馬上要停止Win7的支持,可能有利于UWP的發展,國內的一些大廠都推出了自家的UWP應用(比如QQ、愛奇藝等)做提前布局。UWP可以看做界面庫4.0,當然這是我個人的排序,僅做參考,感興趣的可以直接看官方MSDN文檔,示例非常全。

Qt QML和UWP很像,同時支持PC/平板/應用編寫,編寫方式也很類似Web前端,如果之前就是Qt Widget開發者可以很快入門,特別是有一些有跨平臺需求多系統支持的場合應用較多,感興趣的可以看看Qt官方文檔。

libcef/node-webkit/electron

前面說過因為Web前端的方式真正做到了顯示和邏輯分離,PC界面庫越來越模仿Web前端的方式,與其模仿Web前端不如直接就用Web前端來寫界面。之前介紹過通過內嵌IE瀏覽器來編寫桌面應用的程序,但是因為微軟各個版本的IE對現代化Web前端的支持有限,只能做有限的工作。得益于Google開源的Chromium項目,開發者們基于Chromium改造提供基于Web瀏覽器的界面庫libcef/node-webkit/electron:

1.libcef打包了一部分Chromium常用功能,封裝成庫,開發者可以在程序中直接調用就完成了瀏覽器的嵌入

2.node-webkit/electron更甚,直接基于 Chromium 和 Node.js打造一套完整框架, 讓你可以使用 HTML, CSS 和 JavaScript 構建應用

越來越多的應用開始采用這種方式,比如網易云音樂、網易云筆記甚至微軟自家產品VS Code,唯一限制這種方式流行的是需要打包很多Chromium庫,安裝包體積較大,但是在現在這種寬帶和磁盤體積下,似乎也不是什么大問題。

這種方式支持跨平臺,支持老系統,且直接使用現有Web前端開發人員即可完成開發,減少學習成本,可以說是一個非常好的方式,這也是我強烈推薦的現階段桌面應用構建方式。當然它也不是萬能的,如果你想寫個簡單工具,或者系統優化應用最好還是用傳統的方式。

?

Windows界面庫的發展就介紹到這里,基本上整個脈絡如此,由于主要討論的是一般PC桌面應用開發,相關的其他技術比如DirectX、OpenGL、SiverLight不在討論范圍,感興趣的可以自行查找下相關資料。

原創,轉載請注明來自http://blog.csdn.net/wenzhou1219

總結

以上是生活随笔為你收集整理的2.Windows 界面技术发展现状的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。