mfc列表控件指針在哪裡?WINDOWS 這個多作業系統除了協調應用程序的執行、分配内存、管理資源之外, 它同時也是一個很大的服務中心,調用這個服務中心的各種服務(每一種服務就是一個函數),可以幫應用程式達到開啟視窗、描繪圖形、使用周邊設備等目的,由于這些函數服務的對象是應用程序(Application), 所以便稱之為 Application Programming Interface,簡稱 API 函數WIN32 API也就是Microsoft Windows 32位平台的 應用程序編程接口,下面我們就來說一說關于mfc列表控件指針在哪裡?我們一起去了解并探讨一下這個問題吧!
WINDOWS 這個多作業系統除了協調應用程序的執行、分配内存、管理資源之外, 它同時也是一個很大的服務中心,調用這個服務中心的各種服務(每一種服務就是一個函數),可以幫應用程式達到開啟視窗、描繪圖形、使用周邊設備等目的,由于這些函數服務的對象是應用程序(Application), 所以便稱之為 Application Programming Interface,簡稱 API 函數。WIN32 API也就是Microsoft Windows 32位平台的 應用程序編程接口。
我們對待API函數不必刻意去研究每一個函數的用法,那也是不現實的(能用得到的API函數有幾千個呢)。正如某位大蝦所說:API不要去學,在需要的時候去查API幫助就足夠了。但是,許多API函數令人難以理解,易于誤用,還會導緻出錯,這一切都阻礙了它的推廣。
應用程序接口經常是 軟件開發工具包 (SDK)的一部分。
1 Windows數據類型及與标準C數據類型的關系查看 Windows 數據類型的定義可以看到, 所有的 Windows 數據類型都是由 C 數據類型經過類型重定義得到的。如 DWORD 實質上就是 unsigned long 數據類型,32 位的無符号整型。而在 Windows 程序設計中經常用到的 HANDLE 類型實質上是無類型指針 void。所有的 Windows 數據類型都是通過這種方式在 SDK 的頭文件中進行定義的, 它們都是來源于标準 C 的數據類型。實際上 VC 編譯器是一個完整的 C 編譯器,此外并沒有過多的擴展。Windows 數據類型也不是 VC 的内建類型,而是從标準 C 類型重定義得到。
Windows API 函數、數據結構等都是采用 Windows 數據類型。比如 Windows API 函數的入口參數、返回值等都是 Windows 數據類型。因此學習 Windows API 程序設計必須要了解Windows 數據類型。
事實上,這些 Windows 數據類型都是從标準 C 的數據類型通過typedef運算符經過類型重定義而來。Windows 數據類型的命名都很有規律。一個類型不再分成幾個英文字,而是寫成一個縮寫的、大小的英文單字(指針符号也用P來表示)。比如,
typedef const TCHAR* LPCTSTR; typedef unsigned long DWORD COLORREF也是一種unsigned long類型,如0xFFFFFFFF,RGB(255,255,255) typedef unsigned short * BSTR; typedef unsigned char BYTE; typedef char* LPSTR; typedef unsigned short WORD;
所有的無符号變量都加上U來區分。如:
typedef unsigned int UINT;
所有的指針類型變量都加上P來區分。如:
typedef BYTE near * PBYTE; typedef BYTE far* LPBYTE; typedef int near* PINT; typedef int far * LPINT; typedef WORD near * PWORD; typedef WORD far* LPWORD; typedef DWORD near * PDWORD; typedef DWORD far * LPDWORD; typedef void far* LPVOID; typedef CONST void far * LPCVOID; //near和far是c語言相對古老的的用法,用于聲明變量在内存中的遠近。
所有的常量指針都使用C。如:
typedef CONST void* LPCVOID; typedef CONST *CHAR LPCSTR;
2 Windows中的字符串指針類型很早以前,各國文字都有自己的編碼方式,而且每個國家字符的字節也不一樣(多字節字符)。後來,擁有了統一的編碼方式,統一了編碼Unicode。
vs中創建項目時,默認是Unicode編碼的。可以使用wchar_t來聲明Unicode編碼的字符串,而且字符串聲明時在前面加上L。TCHAR是一個怪胎,他是char和wchar_t的自适應版。
const char * p = “aaa”; //内存中,每個a占有一個字節 const char * pc = “中國”;//内存中,每個漢字占有兩個字節 const wchar_t * pU = L”aa”;//内存中,每個a占有兩個字節 const wchar_t * pcU = L”中國”;//内存中,每個漢字占有一個字節 const TCHAR * s = L”aa”;//這個TCHAR聲明時,必須聲明成Unicode編碼的串 //修改vs的編碼方式為’多字節字符集’後 const TCHAR * s =L”aa”;//這就會報錯,因為這時候TCHAR是char類型 const TCHAR * s =”aa”;//不會報錯
3 Windows中的句柄類型句柄類型是Windows API中一種特殊的數據類型。
各種句柄類型的命令方式一般都是在對象名前加“H”。Windows 系統中有很多對象,所有表示一個對象的數據類型都是句柄,每一種對象都對應着一種句柄類型,比如與位圖 ( BITMAP)對應的句柄類型為“HBITMAP”, 與菜單(MENU)對應的句柄類型為“HMENU”,與窗口(WINDOW)對應的句柄類型為“HWND”。
HWND 窗口句柄
HINSTANCE 進程實例句柄
HCURSOR 光标句柄
HICON 圖标句柄
HMENU 菜單句柄
HFONT 字體句柄
HFILE 文件句柄
在API中,資源對象用數據體來表示。通用句柄HANDLE有時候是邏輯指針,大多數時候是結構體指針,特殊句柄如HMENU等是結構體指針。
4 Windows中的數據結構Windows 中包含很多種數據結構類型,在不同類型的 API 中會使用到不同的數據結構,數據結構的數量衆多,這些數據結構通常會作為一些 API 的參數輸入。Windows API 中的數據結構定義具有一定的特點,一般情況下,Windows 系統中使用全大寫來命名結構體、共用體,并使用“_”來分隔單詞,在結構名加“LP”或“P”表示指向數據結構的指針。
結構體類型,如POINT、SIZE、RECT。
typedef struct tagPOINT { LONG x; LONG y; } POINT, * PPOINT, * LPPOINT;//結構體别名 typedef struct tagSIZE { LONGcx; LONGcy; } SIZE, * PSIZE, * LPSIZE; typedef struct tagRECT { LONGleft; LONGtop; LONGright; LONGbottom; } RECT, * PRECT, * LPRECT;
5 Windows數據類型與Windows APIWindows API 函數的參數、返回值或一些重要的常量使用的數據類型都是 Windows 數據類型。MessageBox 函數的返回值是 int 型的,是标準 C 數據類型,但是所有的參數都使用了Windows 數據類型。如 HWND 是一種 Windows 數據類型,用于表示窗口的句柄;LPCTSTR 也是Windows 數據類型,表示字符串常量;UINT 也是 Windows 數據類型,為無符号整型。
6 MFC中可以使用的數據類型程序員想編寫具有Windows風格的軟件,必須借助API,API也因此被賦予至高無上的地位。但是,如若沒有合适的Windows編程平台,那麼Windows開發是一項很複雜的工作。在可視化編程IDE出來之前,那時的WINDOWS程序開發還是比較複雜的工作,程序員必須熟記一大堆常用的API函數,而且還得對WINDOWS操作系統有深入的了解。然而随着軟件技術的不斷發展,在WINDOWS平台上出現了很多優秀的 可視化編程 環境,程序員可以采用“所見即所得”的編程方式來開發具有精美用戶界面和功能強大的應用程序。
這些優秀可視化編程環境操作簡單、界面友好(諸如VB、VC 、DELPHI等),在這些工具中提供了大量的類庫和各種控件,它們替代了API的神秘功能,事實上這些類庫和控件都是構架在WIN32 API函數基礎之上的,是封裝了的API函數的集合。它們把常用的API函數的組合在一起成為一個控件或類庫,并賦予其方便的使用方法,所以極大的加速了WINDOWS應用程序開發的過程。有了這些控件和類庫,程序員便可以把主要精力放在程序整體功能的設計上,而不必過于關注技術細節。
MFC以C 類的形式封裝了Windows API,并且包含一個應用程序框架,以減少應用程序開發人員的工作量。其中包含大量Windows句柄封裝類和很多Windows的内建控件和組件的封裝類。
實際上如果我們要開發出更靈活、更實用、更具效率的應用程序,必然要涉及到直接使用API函數,雖然類庫和控件使應用程序的開發簡單的多,但它們隻提供WINDOWS的一般功能,對于比較複雜和特殊的功能來說,使用類庫和控件是非常難以實現的,這時就需要采用API函數來實現。
MFC通常包含stdafx.h頭文件來提供MFC類庫支持。
MFC中使用windows API數據類型要包含windows.h頭文件。
在MFC中,增加了處理字符串的CString類,在編輯框框中就可以定義CString類型控件變量。
我們知道,C 的string類可以通過c_str()将其轉換為char *或CString。
類似的,CString也提供了一個成員函數.GetBuffer(0),将其轉換為char *或string類型。
CString 與LPCTSTR,也可以方便地進行轉換:
CString cStr; const char *lpctstr1=(LPCTSTR)cStr; LPCTSTR lpctstr2; CString cStr=lpctstr2;
-End-
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!