C 學習記錄(2)

2021-09-24 08:31:55 字數 3038 閱讀 6181

csize類

類csize是對windows結構size的封裝,凡是能用size結構的地方都可以用csize代替。

結構size表示乙個矩形的長度和寬度,其定義為:

typedef

struct tagsize size;

其中 cx、cy分別是寬度和高度。

這些都是巨集定義,不是函式。

begin_message_map()end_message_map()之間新增你的訊息響應函式,為每個訊息處理函式加入乙個入口

在乙個檔案中設定乙個新的讀取位置。

dword winapi setfilepointer

( __in handle hfile,

__in long ldistancetomove,

__inout_opt plong lpdistancetomovehigh,

__in dword dwmovemethod

);

第 1 個引數為要操作的檔案控制代碼;

第 2 個引數是乙個 32 位有符號long型( 32 位系統平台),它代表要移動的距離;

第 3 個引數是指向移動距離值的高序部分,如果這個值設定為null,那麼函式只能對長度限制在 (2^31 - 1) 之內的檔案進行操作 ,因為這個是有符號的long型。如果該值非null,那麼lpdistancetomovehighldistancetomove合起來就能進行 64 位有符號的移動,而此時這個引數還用於接收檔案指標的高序位返回值,而低序位部分由函式的返回值返回。

如果函式返回值不為invalid_set_file_pointer (-1),那麼說明函式是執行成功的,這時就無需再呼叫getlasterror()函式進行檢查。

然 而需要注意的是,invalid_set_file_pointer對於低序位部分是個有效值。也就是說,當設定了lpdistancetomovehigh時,低序位可以定址到0xffffffff這裡,如果函式執行成功那麼返回值是 -1,這時因為函式的返回既代表了檔案位置又代表了錯誤**,所以還需要用getlasterror()來確認一下是不是確實發生了錯誤,如果沒有錯誤那麼會返回no_error,若發生了錯誤,那麼返回值就不是位置,而是乙個invalid_set_file_pointer。因此一般情況下,這時會將檔案的長度單位限制在 (2^32 - 2) ,這樣就避開了要呼叫getlasterror()的必要。

在操作巨型檔案時才需要設定第 3 個引數,但是使用setfilepointer()函式來操作巨型檔案會顯得有些笨拙,對於這種情況可以選擇它的增強型setfilepointerex()則更加容易。

第 4 個引數是移動模式,一共有 3 種:

file_begin: 從檔案開始的位置進行定位,此時 ldistancetomove 被解釋為無符號型。

file_current: 從檔案的當前位置向前或向後移動指標, ldistancetomove 被解釋為有符號型,正數代表向前,負數表示向後。

file_end: 從檔案的末位向前或向後定位指標。

檢視物件是用來顯示文件物件的內容,函式getdocument()用於獲取當前文件物件的指標m_pdocument.而函式ondraw()是乙個虛函式,負責文件物件的資料在使用者檢視區的顯示輸出。在嚮導生成的成員函式ondraw()中呼叫了函式getdocument().通過獲取的文件類指標可以在檢視中顯示文件內容。

setscrollsizes(mm_text, sizetotal);前面的對映有以下,預設用mm_text,後面為大小csise型別

mm_text 1 pixel downward

mm_himetric 0.01 mm upward

mm_twips 1

/1440 in upward

mm_hienglish 0.001 in upward

mm_lometric 0.1 mm upward

mm_loenglish 0.01 in upward

當我們想得到乙個視窗物件(cwnd的派生物件)指標的控制代碼(hwnd)時,最安全的方法是使用getsafehwnd()函式

near指標和far指標?

在dos下(實模式)位址是分段的,每一段的長度為64k位元組,剛好是16位(二進位制的十六位)。

near指標的長度是16位的,所以可指向的位址範圍是64k位元組,通常說near指標的定址範圍是64k。

far指標的長度是32位,含有乙個16位的基位址和16位的偏移量,將基位址乘以16後再與偏移量相加,(所以實際上far指標是20位的長度。)即可得到far指標的1m位元組的偏移量。所以far指標的定址範圍是1m位元組,超過了乙個段64k的容量。例如乙個far指標的段位址為0x7000,偏移量為0x1244,則該指標指向位址0x71224.如果乙個far指標的段位址是0x7122,偏移量為0x0004,則該指標也指向位址0x71224。

如果沒有指定乙個指標是near或far,那麼預設是near。所以far指標要顯式指定。far指標工作起來要慢一些,因為每次訪問乙個far指標時,都要將資料段或程式段的資料交換出來。另外,far指標的運算也比較反常,例如上面講到的far指標指向同乙個位址,但是比較的結果卻不相同。

什麼時候使用far指標?

當使用小**或小資料儲存模式時,不能編譯乙個有很多**或資料的程式。因為在64k的乙個段中,不能放下所有的**與資料。為了解決這個問題,需要指定以far函式或far指標來使用這部分的空間(64k以外的空間)。許多庫函式就是顯式地指定為far函式的形式。far指標通常和farmalloc()這樣的記憶體分配函式一起使用

C 學習記錄2

this 實際上是成員函式的乙個形參,在呼叫成員函式時將物件的位址作為實參傳遞給 this。不過 this 這個形參是隱式的,它並不出現在 中,而是在編譯階段由編譯器默默地將它新增到引數列表中。static 成員變數必須在類宣告的外部初始化,具體形式為 type class name value t...

I2C學習記錄

i2c inter integrated circuit 匯流排是由philips公司開發的兩線式序列匯流排,用於連線微控制器及其外圍裝置。是微電子通訊控制領域廣泛採用的一種匯流排標準。通過序列資料 sda 線和序列時鐘 scl 線在連線到匯流排的器件間傳遞資訊。通過序列資料 sda 線和序列時鐘 ...

C語言學習記錄(2)

以上一次學習記錄 中的hello world!為例 include 標頭檔案也叫編譯預處理指令 intmain void 定義主函式 函式結束首先,在每行後的說明文字是注釋內容,後的文字不參與程式的執行,並且,是單行注釋,也就是說其後面的內容是不參與執行的,可以佔據一整行,但是不能跨行。類似作用的符...