很早就用上了Notepad2這個支援文法高亮的記事本,不過是以前很早的版本且被人漢化了。之後,發現了help功能表列關於Notepad2的官方網站,收穫不少。竟然開源,看樣子國外的開源精神不得不佩服!網址告訴大家:http://www.flos-freeware.ch/notepad2.html
裡面現在最新版的是Notepad2 4.1.24 ,包括了源碼。
效果如下:
於是來了興緻,看自己能不能編譯,裡面的一個Notepad2.sln工程檔案肯定垃圾,面對如此複雜的依賴關係很難編譯,何況之後發現少了個很重要的源碼檔案,我想僅憑這個工程檔案是很難成功的。可巧,發現wdkbuild檔案夾中有個命令列檔案,這下好了,各源檔案之間的依賴關係變的清晰可見了。
@echo off</p><p>rem set WDKBASEDIR=C:/WinDDK/7600.16385.1<br />set WDKBASEDIR=D:/Programme/Microsoft wdk7</p><p>set INCLUDE=%WDKBASEDIR%/inc/crt;%WDKBASEDIR%/inc/api;%WDKBASEDIR%/inc/api/crt/stl60;%WDKBASEDIR%/inc/ddk<br />set LIB=%WDKBASEDIR%/lib/crt/i386;%WDKBASEDIR%/lib/win7/i386<br />set LIBPATH=<br />set VSCOMNTOOLS=</p><p>md "../Release"<br />del "../Release/*.obj"<br />del "../Release/*.exe"<br />del "../Release/*.pdb"<br />del "../Release/*.idb"</p><p>"%WDKBASEDIR%/bin/x86/x86/cl.exe" @cl.txt<br />"%WDKBASEDIR%/bin/x86/rc.exe" /fo"../Release/Notepad2.res" "../src/Notepad2.rc"<br />"%WDKBASEDIR%/bin/x86/x86/link.exe" @link.txt<br />
看了一下,用的是WinDDK驅動開發包,還是新版的DDK7.1,只好安裝了。從這個可以看出這個很重要的東西來,不然用VS編譯可就麻煩大了,嘿嘿。
且往下看,有兩個文字檔的引用,看cl.txt的前幾句
/Fo"../Release/" /I "../scintilla/include" /I "../scintilla/src" /I "../scintilla/win32" /D "STATIC_BUILD" /D "SCI_LEXER" /D "WIN32" /D "_WINDOWS" /D "NDEBUG" /D "_UNICODE" /D "UNICODE" /c /EHsc /GF /MD /O1 /Os /W3
/Tp "../scintilla/win32/PlatWin.cxx"
/Tp "../scintilla/win32/ScintillaWin.cxx"
/Tp "../scintilla/src/AutoComplete.cxx"
...........
發現有個很重要的檔案夾scintilla,怎麼沒有這個檔案夾呢?網上搜了一下,發現是一個很出名的文法高亮包,其中Notepad2就用到了這個包(該網站http://www.scintilla.org/上也有說明)。
於是下載下來,將scintilla檔案夾複製到與wdkbuil同級的檔案夾下,點build.cmd批處理運行(可以在裡面加一些pause暫停一下,以免一閃瑞而過,比如在cl行後加了pause,在link行後再加個pause)。
出現了好多問題,主要從Edit.c(1867):error C2001:newline in constant 錯誤開始(警告就先不管了)。
開啟檔案看了看,StrChr(L"'?,pszTextW[i])這句可能有問題,管它呢,改一下:StrChr(L"",pszTextW[i]) 嗯,這下子好了,只有幾個警告對產生可執行檔問題不大,以後再改。
再按一下,執行link。
這下子,問題更多了,細看主要是關於KeyWords.obj的,可能是KeyWords.cxx中有些通不過,嗯是這樣子的。沒辦法只好又把KeyWords.cxx檔案的從第333行開始到427行結束的LINK_LEXER(***),給註譯掉。
總算編譯成功了,運行了下Notepad2.exe OK,且不說有BUG,至少程式已經在你的掌控之內,再進行必要的修改也不成問題了。