大學的時候接觸過MFC,不過那是在上數位影像處理處理的實驗課上,做一組圖片去噪程式時候用到的.而且,當時也是拿別人做好的架構,我自己增加一些去噪的演算法實現的源碼而已,對MFC談不上多麼深入的理解.
去年做手機開發,對android也有一定的瞭解.現在又在搞MFC了,看到有類似的地方,於是就先寫這樣一篇文章了.
1.布局檔案的比較
android的布局檔案都是工程的目錄下:res/layout/*.xml ,當然這個*號代表的檔案名稱是開發人員自己起的名字.
MFC的布局檔案,很奇怪,居然是一個.rc結尾的檔案.用visual studio開啟可以看到裡麵包含Dialog,Icon,Menu,StringTable,Version這些部分(根據工程的不同可能有所區別).Dialog底下的才是頁面配置.從這點來看,MFC的布局檔案不是一個普通的布局檔案,而是個按鈕,菜單,表徵圖,常量等一些程式編譯時間需要的資源的一個匯總的檔案.
2.表徵圖資源
android所用到的表徵圖或者圖片都是放在res/drawable目錄下的.當然,較新版本會為了適應不同解析度在會對drawable拆開成小表徵圖/中等表徵圖/大表徵圖檔案夾.
MFC裡面的表徵圖資源,就直接放在工程的res目錄下了.
3.一些常量
android會將使用到的常量放到res/values目錄下的開發人員指定的xml檔案中;
MFC的rc檔案中,倒是有個StringTable可以和android常量檔案對應.不過,像我前面說的,MFC的rc檔案,就是個匯總檔案,有點大雜燴的樣子.
4.如何找到所需的控制項
android在工程目錄下gen目錄中,產生一個R.java的檔案.這個檔案中有程式所使用的一些控制項的ID的編號.根據這個編號和對應的布局檔案,就能在程式中使用對應的控制項了.在android程式中,使用findViewById就可以找到對應的控制項了,返回的結果是個view對象,需要做一次類型轉換,轉換到對應的具體控制項類型,這樣就能在程式中對控制項做操作了.
MFC也有類似機制.不過它是在.rc檔案同一級產生一個resource.h檔案.使用:GetDlgItem()方法來擷取,擷取到的是一個控制項的控制代碼,相當於這個控制項的指標.
5.文本控制項的值的設定與擷取
android裡面直接掉對應的.setText方法設定,調用.getText方法擷取.
MFC裡面比較常見的做法是先將文本控制項和一個類的成員屬性綁定起來.即在繼承自Cwnd的子類的DoDataExchange方法裡面,使用DDX_Text(pDX, 控制項ID, 類的變數名)的方式將介面中的控制項裡面的值和類成員變數綁定起來.再通過Updata(True)將控制項中的文本值刷回到類成員屬性上.
6.事件
android裡面一般都是調用setOnXXListner(new View.onXXListner(){})來增加事件處理.
MFC裡面一般是通過在BEGIN_MESSAGE_MAP 和 END_MESSAGE_MAP之間,添加對應的事件(組件ID,對應的處理函數引用)這種方式來增加事件處理的.