???? 技術總監又給段伏櫪布置任務了,這次和計算器和錄音機不同,并不需要他去寫代碼,而是要想辦法讓程序去適應產品。公司做的GPS導航儀的屏幕分辨率是320x240,屬于典型的3.2'的LCD,和現在市面上鋪天蓋地的5'和7'尺寸不同,那時候的4.3'也是很稀少,3.2'是絕對的主流。可對于這樣的一個主流,微軟卻視而不見,最簡單的例子,控制面板中很多選項,其對話框的很多都是超出屏幕的大小。雖然可以通過Platform Builder來設置設備的顯示模式,但對話框大小不是480x320,就是是240x320,無論采用那種模式,都是無法適應3.2'的LCD。而技術總監交代給段伏櫪的任務,就是解決這一難題。
???
??? 雖然大家都知道,Windows CE是開放源代碼的,并且這些控制面板的程序確實也是通過這些源代碼編譯出來的,那么直接更改然后再重新編譯不就好了?段伏櫪也是這么想的。一般來說,變更對話框的大小,只要更改相應的.res文件即可,雖然段伏櫪是菜鳥,但好歹也弄過幾個程序,對于這點也是心知肚明。可當段伏櫪使用EVC來重新對控制面板的組件進行布局之后,卻傻眼了:這些.res無法再通過鏈接了!段伏櫪不信邪,持續嘗試了好幾個控制面板的組件,都是如此,這下他可傻眼了。本來以為很簡單的事情,還覺得是老柳嫌麻煩不去弄,原來這還是一個大難題啊!
???
??? 反正段伏櫪之前所做的工作也從來沒有順利過,雖然這時候遇到了挫折,但也不至于灰心喪氣。于是還是和往常一樣,通過搜索引擎來查找資料。不經意間,在CSDN論壇的一篇帖子上找到一個專門研究Windows CE的QQ群,突然有一種找到組織的感覺,趕快申請加入。沒想到,剛加進去,才發現群里正在熱火朝天地辯論。事情是由一個網名為“水域”的QQ挑起的。
???
??? 水域:“你們這些固守C++的,全是SB!”
???
??? 像這樣的話語,自然會激起Q友的反擊,和水域干上的,是另一個名為“專屬天使”的QQ。
???
??? 專屬天使:“你才SB呢!用C#有什么了不起?”
???
??? 水域:“你們全是一群固步自封的老家伙!不懂得去運用新技術,肯定要被社會淘汰!一群SB!”
???
??? 專屬天使:“C++是萬能的!”
???
??? 水域:“哼!還萬能呢!匯編語言才是萬能的,什么都要轉為匯編語言才能進而成為二進制代碼,可你看看,現在邏輯復雜一點的單片機程序,還有幾個人是用匯編的?都是用C!”
???
??? 看起來,水域似乎是力挺C語言,但接下來話鋒一轉:“對于Windows CE來說,C++就相當于單片機的匯編,C#就相當于單片機的C!兩者的差距,不可同言而語!”
???
??? 這還沒完,水域繼續說到:“你們之所以堅持C++,一方面是自己不肯接受新事務,另一方面是要誤導初學者!因為C++難學,初學者學了C++后,很難趕得上你們現在的水平,你們自然就高枕無憂了。如果是C#,初學者學一段時間,就能上手寫程序,你們這些老家伙就要被炒了!”
???
??? 最后,水域丟下一個問題:“你們說C#不好,那么我問你們,C#有哪里不好了?”
???
??? 段伏櫪用的正是C++,雖然他并不反對C#,甚至可以說,如果有時間有精力他也會去學學C#,但現在這么貶低自己正在使用的語言,他也覺得非常不爽,特別是水域的語氣。于是,在網上流傳很多C#的缺點,他正好拿來用。還不等專屬天使回話,段伏櫪啪啪就打字回應:“C#的效率太低了!”
???
??? 正如所料,水域立馬回話:“又是人云亦云!效率怎么低了?你有沒有測過?低多少?對使用有沒有影響?”
???
??? 段伏櫪頓時語塞,這不就像老柳讓自己用查表方式去計算除法一樣嗎,照搬以前的經驗去瞎指揮,而不去考慮實際的運用。段伏櫪也只是在網上看了人家的評論,自己也沒有親自去實踐,自然也不會知道這效率差多少。其實程序員這一職業,沒有那么多似是而非的方面,是就是,不是就不是,容不得半點含糊。比如說,一個檢測病人生命特征的程序,應該按照什么規范去檢測就要怎么去做,不能說似乎這樣可以,那樣也行,因為很可能就那么一點偏差,一條生命就此消失。雖然段伏櫪并不是做生命相關的設備,但其中的道理卻是想通的。這個和做行政的,人事之類的處事方式非常不同,他們為了不引起更多的矛盾,往往說話只說六分,剩余的四分需要自己去揣摩。至于是對還是錯,那就無所謂了,只要不對公司的利益有損害即可。
???
??? 水域的話語,就像一個巴掌,狠狠地扇在了段伏櫪的臉上,感覺火辣辣的,無以反駁。很顯然,群里面的人對于這個問題,大家都沒譜,因為沒有人真正去實際測試過。只不過這也暴露了一點,QQ群里面的人基本上都是做應用的,如果有人是做系統級別的話,只需要丟出一句:“你用C#寫寫驅動看看?”估計水域就無從下手了。因為Windows CE是嵌入式設備所用,和桌面PC的應用環境大為不同。做桌面運用的,其實真的是很少去接觸驅動級別的;但對于Windows CE來說,卻是截然不同:如果你不懂得C++,那么你如何去看底層的BSP包代碼?如果連BSP代碼都看不懂,那板子又該如何調試起來?板子都無法啟動,還談何做產品?相對于桌面以應用為重,嵌入式接觸更多的是底層驅動級別。當然,這些對于剛出茅廬的段伏櫪來說,是完全不懂這一層的關系的。
???
??? 水域有一種傲氣,混混灑灑說了那么多,覺得自己不屑與這些頑固的老家伙為伍,罵了幾句之后,毅然退群。對于很多程序員老鳥來說,類似的事情不勝枚舉,充其量只是一個小小的插曲,但對于段伏櫪今后的態度,卻產生了深遠的影響:任何事情,即使對方說得言之鑿鑿,也要自己親自測試一番,眼見才能為實,絕對不能人云亦云!
???
??? 不過加入這個QQ群,段伏櫪也不算是完全沒有收獲。當段伏櫪提出如何更改程序對話框大小的時候,就有人建議不妨使用exeScope看看。exeScope是桌面Windows常用的一個更改界面的工具,很多朋友都喜歡用它來漢化界面。Windows CE下面的程序,雖然不能直接在Windows XP上運行,但程序的組織還是相同的。段伏櫪抱著試試看的心態,用exeScope更改了幾個Windows CE程序,放到公司的設備中:一切正常!根據LCD大小更改后的程序,完美地運行在了Windows CE中!段伏櫪感覺就跟撿到了寶貝似的,不過有了上一次的教訓,這次他只是偷偷地呆在座位上樂呵樂呵。
???
??? 其實對于程序員來說,絕對不能拘于形式。最重要是明確自己的目標,需要達到什么樣的目的,至于使用什么手段,則不是所關心的。如果段伏櫪一直不轉變自己的觀念,總是從代碼的角度入手 ,雖然最終也可能解決問題,但所耗費的時間,絕對比直接更改程序文件要多。
???
??? 段伏櫪是菜鳥,這沒錯,但他身上卻有一種百折不撓,尋根問底的特性。雖然解決了程序大小不能適應屏幕的問題,但他還是決心去探究為什么采用EVC更改后的.res會導致Windows CE系統無法編譯的真正原因。老天不負有心人,段伏櫪發現,如果是用EVC更改了.res文件并且保存的話,EVC會添加不少額外的東西,甚至是原來的描述符也會被更改。而這些添加的或是被更改的字段,正是系統無法正確編譯的真正原因!如果要解決這問題,只能采用記事本來進行修改。但沒有了IDE,坐標都不好設置,肯定還要花費很多的精力,既然問題已經解決,并且根源也找到了,段伏櫪就不再去深究。
???
??? 只不過段伏櫪覺得,自己遇到這樣的問題,說不定別人也可能會遇上。既然如此,為何不將它寫出來呢?恰好搜索問題的時候,找到了CSDN這個網站,并且上面不是剛好有個博客系統嗎?說干就干,段伏櫪趕緊注冊了一個賬號,并且將這過程整理為一篇《WinCE 系統界面修改偏方(一)》的文章,堂而皇之地發表于博客之中。雖然文筆很嫩,言語很不通順,并且其中的知識點很可能為眾多高手所不齒,但畢竟這是自己的第一篇技術文章,所謂的兒不嫌母丑狗不嫌家貧便是如此。只不過對于一個新人來說,發表的一篇沒什么技術含量的文章,實在不會引起很大的波瀾。發表了近一周之后,點擊率也寥寥無幾,而這為數不多的點擊率,有一半還是出自于自己的手。幸好段伏櫪對此也有心理準備,本來就不報很大希望的事情,談何來的失望?只不過這一口子一開,就再也剎不了車。在往后的日子里,只要段伏櫪知道了點新東西,就會往博客上放。每次往上面寫文章的時候,段伏櫪總會幻想:會不會有一天,自己這些文章能夠結集出版呢?只不過這念頭只是轉瞬即逝,自己又不是韓寒,僅僅是一個小小的菜鳥,有誰去看重自己?雖然覺得出書的概率很渺茫,不免有點失望,但段伏櫪還是暗暗下決心,不管結果如何,寫技術博客這習慣,一定要堅持下去,就像自己堅持走程序員這條路一樣。
??? 注:
??? BSP是板級支持包(Board Support Package)的縮寫,是通常用在嵌入行業中的一個術語,用來代表在一個特殊硬件平臺上快速構建一個嵌入操作系統所需的原始資料或者二進制軟件包。BSP的作用是支持操作系統,使之能夠更好的運行于硬件平臺。BSP是相對于操作系統而言的,不同的操作系統對應于不同定義形式的BSP,包括Windows CE、Linux、Vxworks等。SoC/CPU廠商應向其芯片的用戶提供一個基本的BSP包,以支持主板廠商或整機制造廠商在此基礎上定制和開發各種商用終端產品。
- 前言
- 《那些年啊,那些事——一個程序員的奮斗史》——01
- 《那些年啊,那些事——一個程序員的奮斗史》——02
- 《那些年啊,那些事——一個程序員的奮斗史》——03
- 《那些年啊,那些事——一個程序員的奮斗史》——04
- 《那些年啊,那些事——一個程序員的奮斗史》——05
- 《那些年啊,那些事——一個程序員的奮斗史》——06
- 《那些年啊,那些事——一個程序員的奮斗史》——07
- 《那些年啊,那些事——一個程序員的奮斗史》——08
- 《那些年啊,那些事——一個程序員的奮斗史》——09
- 《那些年啊,那些事——一個程序員的奮斗史》——10
- 《那些年啊,那些事——一個程序員的奮斗史》——11
- 《那些年啊,那些事——一個程序員的奮斗史》——12
- 《那些年啊,那些事——一個程序員的奮斗史》——13
- 《那些年啊,那些事——一個程序員的奮斗史》——14
- 《那些年啊,那些事——一個程序員的奮斗史》——15
- 《那些年啊,那些事——一個程序員的奮斗史》——16
- 《那些年啊,那些事——一個程序員的奮斗史》——17
- 《那些年啊,那些事——一個程序員的奮斗史》——18
- 《那些年啊,那些事——一個程序員的奮斗史》——19
- 《那些年啊,那些事——一個程序員的奮斗史》——20
- 《那些年啊,那些事——一個程序員的奮斗史》——21
- 《那些年啊,那些事——一個程序員的奮斗史》——22
- 《那些年啊,那些事——一個程序員的奮斗史》——23
- 《那些年啊,那些事——一個程序員的奮斗史》——24
- 《那些年啊,那些事——一個程序員的奮斗史》——25
- 《那些年啊,那些事——一個程序員的奮斗史》——26
- 《那些年啊,那些事——一個程序員的奮斗史》——27
- 《那些年啊,那些事——一個程序員的奮斗史》——28
- 《那些年啊,那些事——一個程序員的奮斗史》——29
- 《那些年啊,那些事——一個程序員的奮斗史》——30
- 《那些年啊,那些事——一個程序員的奮斗史》——31
- 《那些年啊,那些事——一個程序員的奮斗史》——32
- 《那些年啊,那些事——一個程序員的奮斗史》——33
- 《那些年啊,那些事——一個程序員的奮斗史》——34
- 《那些年啊,那些事——一個程序員的奮斗史》——35
- 《那些年啊,那些事——一個程序員的奮斗史》——36
- 《那些年啊,那些事——一個程序員的奮斗史》——37
- 《那些年啊,那些事——一個程序員的奮斗史》——38
- 《那些年啊,那些事——一個程序員的奮斗史》——39
- 《那些年啊,那些事——一個程序員的奮斗史》——40
- 《那些年啊,那些事——一個程序員的奮斗史》——41
- 《那些年啊,那些事——一個程序員的奮斗史》——42
- 《那些年啊,那些事——一個程序員的奮斗史》——43
- 《那些年啊,那些事——一個程序員的奮斗史》——44
- 《那些年啊,那些事——一個程序員的奮斗史》——45
- 《那些年啊,那些事——一個程序員的奮斗史》——46
- 《那些年啊,那些事——一個程序員的奮斗史》——47
- 《那些年啊,那些事——一個程序員的奮斗史》——48
- 《那些年啊,那些事——一個程序員的奮斗史》——49
- 《那些年啊,那些事——一個程序員的奮斗史》——50
- 《那些年啊,那些事——一個程序員的奮斗史》——51
- 《那些年啊,那些事——一個程序員的奮斗史》——52
- 《那些年啊,那些事——一個程序員的奮斗史》——53
- 《那些年啊,那些事——一個程序員的奮斗史》——54
- 《那些年啊,那些事——一個程序員的奮斗史》——55
- 《那些年啊,那些事——一個程序員的奮斗史》——56
- 《那些年啊,那些事——一個程序員的奮斗史》——57
- 《那些年啊,那些事——一個程序員的奮斗史》——58
- 《那些年啊,那些事——一個程序員的奮斗史》——59
- 《那些年啊,那些事——一個程序員的奮斗史》——60
- 《那些年啊,那些事——一個程序員的奮斗史》——61
- 《那些年啊,那些事——一個程序員的奮斗史》——62
- 《那些年啊,那些事——一個程序員的奮斗史》——63
- 《那些年啊,那些事——一個程序員的奮斗史》——64
- 《那些年啊,那些事——一個程序員的奮斗史》——65
- 《那些年啊,那些事——一個程序員的奮斗史》——66
- 《那些年啊,那些事——一個程序員的奮斗史》——67
- 《那些年啊,那些事——一個程序員的奮斗史》——68
- 《那些年啊,那些事——一個程序員的奮斗史》——69
- 《那些年啊,那些事——一個程序員的奮斗史》——70
- 《那些年啊,那些事——一個程序員的奮斗史》——71
- 《那些年啊,那些事——一個程序員的奮斗史》——72
- 《那些年啊,那些事——一個程序員的奮斗史》——73
- 《那些年啊,那些事——一個程序員的奮斗史》——74
- 《那些年啊,那些事——一個程序員的奮斗史》——75
- 《那些年啊,那些事——一個程序員的奮斗史》——76
- 《那些年啊,那些事——一個程序員的奮斗史》——77
- 《那些年啊,那些事——一個程序員的奮斗史》——78
- 《那些年啊,那些事——一個程序員的奮斗史》——79
- 《那些年啊,那些事——一個程序員的奮斗史》——80
- 《那些年啊,那些事——一個程序員的奮斗史》——81
- 《那些年啊,那些事——一個程序員的奮斗史》——82
- 《那些年啊,那些事——一個程序員的奮斗史》——83
- 《那些年啊,那些事——一個程序員的奮斗史》——84
- 《那些年啊,那些事——一個程序員的奮斗史》——85
- 《那些年啊,那些事——一個程序員的奮斗史》——86
- 《那些年啊,那些事——一個程序員的奮斗史》——87
- 《那些年啊,那些事——一個程序員的奮斗史》——88
- 《那些年啊,那些事——一個程序員的奮斗史》——89
- 《那些年啊,那些事——一個程序員的奮斗史》——90
- 《那些年啊,那些事——一個程序員的奮斗史》——91
- 《那些年啊,那些事——一個程序員的奮斗史》——92
- 《那些年啊,那些事——一個程序員的奮斗史》——93
- 《那些年啊,那些事——一個程序員的奮斗史》——94
- 《那些年啊,那些事——一個程序員的奮斗史》——95
- 《那些年啊,那些事——一個程序員的奮斗史》——96
- 《那些年啊,那些事——一個程序員的奮斗史》——97
- 《那些年啊,那些事——一個程序員的奮斗史》——98
- 《那些年啊,那些事——一個程序員的奮斗史》——99
- 《那些年啊,那些事——一個程序員的奮斗史》——100
- 《那些年啊,那些事——一個程序員的奮斗史》——101
- 《那些年啊,那些事——一個程序員的奮斗史》——102
- 《那些年啊,那些事——一個程序員的奮斗史》——103
- 《那些年啊,那些事——一個程序員的奮斗史》——104
- 《那些年啊,那些事——一個程序員的奮斗史》——105
- 《那些年啊,那些事——一個程序員的奮斗史》——106
- 《那些年啊,那些事——一個程序員的奮斗史》——107
- 《那些年啊,那些事——一個程序員的奮斗史》——108
- 《那些年啊,那些事——一個程序員的奮斗史》——109
- 《那些年啊,那些事——一個程序員的奮斗史》——110
- 《那些年啊,那些事——一個程序員的奮斗史》——111
- 《那些年啊,那些事——一個程序員的奮斗史》——112
- 《那些年啊,那些事——一個程序員的奮斗史》——113
- 《那些年啊,那些事——一個程序員的奮斗史》——114
- 《那些年啊,那些事——一個程序員的奮斗史》——115
- 《那些年啊,那些事——一個程序員的奮斗史》——116
- 《那些年啊,那些事——一個程序員的奮斗史》——117
- 《那些年啊,那些事——一個程序員的奮斗史》——118
- 《那些年啊,那些事——一個程序員的奮斗史》——119
- 《那些年啊,那些事——一個程序員的奮斗史》——120
- 《那些年啊,那些事——一個程序員的奮斗史》——121
- 《那些年啊,那些事——一個程序員的奮斗史》——122
- 《那些年啊,那些事——一個程序員的奮斗史》——123
- 《那些年啊,那些事——一個程序員的奮斗史》——124
- 《那些年啊,那些事——一個程序員的奮斗史》——125
- 《那些年啊,那些事——一個程序員的奮斗史》——126
- 《那些年啊,那些事——一個程序員的奮斗史》——127
- 《那些年啊,那些事——一個程序員的奮斗史》——128 (終章)