MFC技術內幕學習筆記

2021-04-13 05:36:52 字數 1927 閱讀 4566

第一章 windows和vc++開發環境

windows程式中必須要有winmain函式,因為該函式最重要的任務是建立該應用程式的主視窗。windows程式與基於ms-dos程式的最大差別就在於:ms-dos程式是通過呼叫作業系統的

功能來獲得使用者輸入的,而windows程式是通過作業系統傳送的訊息來處理使用者輸入的。用developer studio建立專案developer studio會建立很多中間檔案,這些檔案還是有必要

第二部分 框架、檢視、訊息對映

mfc庫應用程式框架沒有採用虛函式來處理windows訊息,而是通過巨集將訊息對映到派生類相應的成員函式上。

vc++有兩個預編譯系統:自動的和手工的。所謂的預編譯頭就是把乙個工程中的那一部分**,預先編譯好放在乙個檔案裡(通常是以.pch為副檔名的),這個檔案就稱為預編譯頭

檔案c/c++**--------甚至是inline的函式,但是必須是穩定的,在工程開發的過程中不會被經常改變。如果這些**被修改,則需要重新編譯生成預編譯標頭檔案。注意生成預編

譯標頭檔案是很耗時間的。同時你得注意預編譯標頭檔案通常很大,通常有6-7m大。注意及時清理那些沒有用的預編譯標頭檔案。這些預先編譯好的**可以是任何的也許你會問:現在

的編譯器都有time stamp的功能,編譯器在編譯整個工程的時候,它只會編譯那些經過修改的檔案,而不會去編譯那些從上次編譯過,到現在沒有被修改過的檔案。那麼為什麼還

要預編譯標頭檔案呢?答案在這裡,我們知道編譯器是以檔案為單位編譯的,乙個檔案經過修改後,會重新編譯整個檔案,當然在這個檔案裡包含的所有標頭檔案中的東西(.eg

macro, preprocesser )都要重新處理一遍,vc的預編譯標頭檔案儲存的正是這部分資訊,以避免每次都要重新處理這些標頭檔案。

手工使用:要使用預編譯頭,我們必須指定乙個標頭檔案,這個標頭檔案包含我們不會經常改變的**和其他的標頭檔案,然後我們用這個標頭檔案來生成乙個預編譯標頭檔案(.pch檔案)

,我們可以用/yc編譯開關來指定stdafx.cpp來生成乙個.pch檔案,通過/fp編譯開關來指定生成的pch檔案的名字。乙個工程裡只能有乙個檔案的可以有yc開關,vc就根據這個選項

把 stdafx.cpp編譯成乙個obj檔案和乙個pch檔案。1):如果使用了/yu,就是說使用了預編譯,我們在每個.cpp檔案的最開頭,我強調一遍是最開頭,包含 你指定產生pch檔案的.h

檔案(預設是stdafx.h)不然就會有問題。如果你沒有包含這個檔案,就告訴你unexpected file end. 如果你不是在最開頭包含的,你自己試以下就知道了,絕對有很驚人的效果

…..2)如果你把pch檔案不小心丟了,編譯的時候就會產生很多的不正常的行為。根據以上的分析,你只要讓編譯器生成乙個pch檔案。也就是說把 stdafx.cpp(即指定/yc的那個

cpp檔案)從新編譯一遍。當然你可以傻傻的 rebuild all。簡單一點就是選擇那個cpp檔案,按一下ctrl + f7就可以了。不然可是很浪費時間的哦。4.6     請注意在sdi應用程

序oninitialupdate函式可能被多次呼叫。

自動使用: 很簡單只要指定/yx就可以了。注意的事情是如果你指定了/yc /yu的話,/yx是會被忽略的。前者的優先級別高一些。

基本事件處理

wm_queryendsession 從字面的意思看就可以看出,當使用者退出windows時,或者呼叫了exitwindows 函式時。windows會傳送wm_queryendsession訊息給所有的正在執行的應用程式

,由onqueryendsession訊息對映函式對訊息進行處理。在它之後應該是wm_endsession 訊息。

標準的windows應用程式會首先登記乙個視窗類,這不同於c++類,同時在處理過程中,還需要對每個類指定視窗過程。每次應用程式呼叫createwindow建立乙個視窗時,都要指定

乙個視窗類作為引數,這樣就把新建立的視窗和視窗過程函式連線起來了,每次windows給視窗傳送訊息的時候,這個函式就會被呼叫,以檢查用引數傳進來的訊息碼。

VC 技術內幕筆記

3。crect有乙個成員函式ptinrect用來測試乙個點是否落在某個矩形內。只適用於裝置座標系。crgn的ptinregion。4。mm twips對映模式常用於印表機。乙個twip單位等於1 20磅。1磅等於1 72英吋。水晶報表中的pagemargins單位就是twip。5。cscrollvi...

vc技術內幕筆記

1,當使用者改變了視窗尺寸,或者當視窗恢復了先前被遮蓋的部分 自動呼叫ondraw 或者當應用程式改變了視窗資料時,視窗都需要被重新繪製 用invalidate或invalidaterect 2.按照慣例,mfc庫中非靜態資料成員名字以m打頭。3.乙個csize物件是兩個cpoint物件的差,而且我...

Mysql技術內幕筆記

mysql由以下幾個部分組成 連線池元件 管理服務和工具元件 sql介面組價 查詢分析器組價 優化器組價 快取 cache 組價 外掛程式式儲存引擎 物理檔案。可以看出,mysql資料庫區別於其他資料庫的最重要的乙個特點就是其外掛程式式的表儲存引擎。儲存引擎是基於表的,而不是資料庫。是底層物理結構的...