主頁 > 軟體工程 > 如何學習Windows編程

如何學習Windows編程

2020-09-11 20:42:59 軟體工程

如下內容轉自:https://zhuanlan.zhihu.com/p/24773204





一是為了備忘,而是遇到好東西分享一下,和需要的一起學習




 有很多初入門的小朋友跟我說,他們想學“底層”的技術,因為覺得技術含量高,所以想學Windows C++開發,看著呼叫一個個的引數超級多,呼叫起來超級麻煩的Windows API,覺著很酷。于是我念頭一轉,就有了這篇文章,根據我多年來做Windows 客戶端的經驗,跟大家談談Windows C++,該從哪一方面入手,這不會是一個有技術深度的文章,只是偶爾會涉及到一些術語以及一些入門書籍而已,對于Windows開發的老鳥們來說,只當是看著好玩了。

首先來談談最初的Windows開發。

如果打開《Windows程式設計》這本書,關于Windows開發的來龍去脈就一目了然了。但是要注意,《Windows程式設計》是一本純講述Windows API的書,確切的說,這本書主要講的是關于Windows 用戶態的API,也就是User32.dll GDI32.dll這兩個庫檔案中的函式,大部分的內容都是關于Windows最基本的視窗元素的操控方面的API,比如創建視窗,繪制視窗,關閉視窗,訊息回圈等等。這本書不需要你有C++方面的知識,理論上說只要你有C語言的基礎就可以看懂,但是如果你連C語言的基礎也沒有,看這本書可能會發生一些困難,如果你學過其它一門非面向物件的語言,這本書實際上也能夠勉強看懂。我在大學的時候就看了這本書,但是直到現在也沒有看完,書中的某些知識,實際上在Windows開發中已經很少用到了,我個人認為是沒有必要把這本書從頭到位看一遍的,在看了前面幾章以后,我就蠢蠢欲動,寫了一些簡單的程式,迅速鞏固了關于這些API呼叫的記憶,為今后進化到Windows C++階段打下了一個良好的基礎。所以,寫程式是很重要的,這個階段,我建議大家寫一些簡單的程式,比如打字測速程式,自己創建一個訊息回圈,創建一個視窗,創建一個游標,用GDI函式輸出圖形及文字,這樣下來,基本的Windows程式設計概念就有了,不過注意寫的時候不要大段的Copy書上的代碼,全部自己寫,否則無助于理解各個API的含義,這個程式,因為是自己寫的第一個Windows程式,所以時間限定在一個月到一個半月之內比較合適。度過這個階段以后,Windows編程的基本概念就應該在你腦海中形成了。

下面進入第二個階段,也就是C++風格的Windows開發,也就是職場上需求量很大的Windows C++程式員干的事。

這時候你需要了解一下這個老掉牙的叫做MFC的東西,MFC是啥呢,其實是一個很原始的,用代碼來拼搭界面的C++庫,當然,因為是C++庫,所以你必須具備了一定的C++知識。不過別因為原始就小巧了它,MFC比傳統的Windows SDK開發方式還是要前進了一大步的,因為不管怎么說,它總算沾了面向物件的一點邊,有那么一點點面向物件的意思了,比如一個視窗,會被封裝成CWnd類,里面有創建視窗的成員函式,視窗繪制的函式也被封裝了進去,CWnd又會有其它的視窗派生類,比如CView啊CFrameWnd以及各類視窗控制元件。學了MFC,你就基本上對Windows C++開發入門了,換而言之,如果你學的還算過關的話,應該能在市場上淘到一份關于Windows C++開發的作業了。其實作在很多公司還在使用MFC這個老黃牛,雖然MFC跟現在流行的界面庫的易用程度比實在是差的太遠,但是MFC的界面效率高,細節操控豐富這仍然是不爭的事實。

在這個階段上,你可以做一些簡單的稍微上得了臺面的程式了,比如開發一個基于IE內核的瀏覽器,之所以我讓你開發這個程式,是因為開發IE相關的程式能學到很多跟COM有關的知識,COM也同樣是Windows客戶端開發人員的必備技能,它的生命力跟MFC一樣的頑強,甚至有過之而無不及。

這個階段上,如果你對MFC足夠熟悉了,還可以接觸一下WTL這個輕量級的模板界面庫,其實如果有了MFC的基礎,WTL的學習程序是很愉快的,很多MFC中的概念,比如訊息映射,在WTL中都有對應的東西,WTL更小巧,封裝的更高端(模板庫嘛),但是微軟官方不支持,所以不像MFC在MSDN上有專門的檔案。最重要的是,WTL和ATL可以結合的非常好,這樣就使得在WTL上呼叫ATL寫的COM組件或是在ATL寫的COM組件中呼叫WTL的視窗變的簡單輕松,所以,以我現在的脾氣,是更加推薦大家使用WTL而非MFC的,但是毫無疑問的,WTL的學習成本更高,所以仁者見仁智者見智啦。

接下來就該學習COM了,學習COM嘛,幾本關于COM的基礎理論書籍還是要看的,比如《COM技術內幕》這個本書我比較推薦,比較淺顯,適合COM的初學者,另外潘愛民的《COM原理與應用》我也看過,馬馬虎虎也還算過得去吧,雖然感徑訓是前面那本更好一點。至于那本神乎其神的《COM本質論》,我覺得不看也罷,那本書初看的時候沒看幾頁就走神,實在是晦澀,素我直言,《COM本質論》這本書,如果你沒有好的C++基礎還是別看了,純粹給自己添堵。

等到有了COM的基礎概念了,就可以看看《深入決議ATL》,ATL就是用來寫COM的,雖然它也封裝了一些視窗,控制元件,不過這本書稍微寫的深了一點,大段的代碼剖析,初學者看起來還是有難度的,我當初很多地方都是強迫自己看完的,看完了后,識訓還是不小的。

在你有了一定的Windows程式開發經驗之后,可以看《Windows核心編程》,這本書講的都是關于Windows內核方面的東西,比如行程啦,內核物件啦,執行緒啦,DLL啦,SEH啦,總之我的看法,這本書與《Windows程式設計》遙相呼應,彌補了前者的不足,大篇幅的講述了Kernel32.dll里面的函式,這本書很多內容我都通讀了好幾遍,某個國內排名前三的互聯網公司面試,面試官的很多問題都是這本書里的東西,所以強烈建議大家把這本書好好學習一下。

總結了一下,看書是很重要的,但是不要忘了寫代碼,我得感覺,看書的時間和寫代碼的時間在三七開是比較好的,戰爭中學習戰爭,實踐出真知,這才是最重要的。

uj5u.com熱心網友回復:

頂一個,任重而道遠啊。 我也是從《Windows程式設計》起步的。

uj5u.com熱心網友回復:

這個作者大概是做客戶端的……作為寫過不知道多少個IE內核瀏覽器的程式員,不認為初學者需要學IE編程……大部分界面還是不用IE做引擎的。要學COM的話可以去學ADO、DirectX之類用途更廣的組件。

我是上班之后才學VC,看MSDN(光碟版,那時候網路是撥號,在線版沒法看)和Visual C++的那些示例代碼一個月之后就開始干活了,入門之后就是去跑那些Windows SDK示例了,畢竟做Windows開發的訊息回圈和執行緒同步這兩個基本的要學。COM是用了六個月才搞懂,老板是不會等那么久的。

uj5u.com熱心網友回復:

參考 2 樓 蔣晟的回復:
這個作者大概是做客戶端的……作為寫過不知道多少個IE內核瀏覽器的程式員,不認為初學者需要學IE編程……大部分界面還是不用IE做引擎的。要學COM的話可以去學ADO、DirectX之類用途更廣的組件。

我是上班之后才學VC,看MSDN(光碟版,那時候網路是撥號,在線版沒法看)和Visual C++的那些示例代碼一個月之后就開始干活了,入門之后就是去跑那些Windows SDK示例了,畢竟做Windows開發的訊息回圈和執行緒同步這兩個基本的要學。COM是用了六個月才搞懂,老板是不會等那么久的。

牛人??,其實我是做自動化的不是做編程的,手頭上有個電子顯微鏡,是UVC攝像頭.上面有個拍照按鍵,用了一個周了解一下USB,也抓捕到了那個按鍵的資料包,了解了是標準的UVC協議,看網上有介紹通過directshow可以捕獲按鍵事件,看了陸老師的編程指導,因為不知道有Com這個東西,看的云里霧里,于是用了一周時間又看了潘老師的Com原理與應用的前三章,對com有點淺認識,于是又回過頭看陸老師的那本書,之前介紹com的總算能夠能接受一點,但是到鏈接那塊有好多函式又看不懂了,迷茫了,不知道從哪里學,有沒有更通俗的directshow相關的書籍?還望前輩指點一下

uj5u.com熱心網友回復:

參考 1 樓 mmcanyu的回復:
頂一個,任重而道遠啊。 我也是從《Windows程式設計》起步的。

牛人??,其實我是做自動化的不是做編程的,手頭上有個電子顯微鏡,是UVC攝像頭.上面有個拍照按鍵,用了一個周了解一下USB,也抓捕到了那個按鍵的資料包,了解了是標準的UVC協議,看網上有介紹通過directshow可以捕獲按鍵事件,看了陸老師的編程指導,因為不知道有Com這個東西,看的留個那本書,云里霧里,于是用了一周時間又看了潘老師的Com原理與應用的前三章,對com有點淺認識,于是又回過頭看陸老師的那本書,之前介紹com的總算能夠能接受一點,但是到鏈接那塊有好多函式又看不懂了,迷茫了,不知道從哪里學,有沒有更通俗的directshow相關的書籍?還望前輩指點一下

uj5u.com熱心網友回復:

參考 1 樓 mmcanyu的回復:
頂一個,任重而道遠啊。 我也是從《Windows程式設計》起步的。

能不能留個微信,一起學習

uj5u.com熱心網友回復:

directshow我是直接啃directx sdk示例的,不過現在directshow搬到Windows sdk里面去了。

uj5u.com熱心網友回復:

參考 5 樓 chunxulele 的回復:
Quote: 參考 1 樓 mmcanyu的回復:
頂一個,任重而道遠啊。 我也是從《Windows程式設計》起步的。

能不能留個微信,一起學習


十幾年前的事了啊,哈哈。
討厭COM,ocx之類的東西,有可選的堅決不用。

uj5u.com熱心網友回復:

堅持是最好的學習方式

uj5u.com熱心網友回復:

uj5u.com熱心網友回復:

學習 .net不是更好

uj5u.com熱心網友回復:

好文章,已轉載。

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/7391.html

標籤:基礎類

上一篇:纖程和執行緒里面按程式呼叫函式有什么區別?

下一篇:CtreeCtrl 隱藏滾動條后,如何實作滑鼠中輪滾動功能

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more