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
,那麼lpdistancetomovehigh
和ldistancetomove
合起來就能進行 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 定義主函式 函式結束首先,在每行後的說明文字是注釋內容,後的文字不參與程式的執行,並且,是單行注釋,也就是說其後面的內容是不參與執行的,可以佔據一整行,但是不能跨行。類似作用的符...