关于mfc常用系统函数的使用及说明
1.AfxMessageBox
int AfxMessageBox( LPCTSTR lpszText, UINT nType = MB_OK, UINT nIDHelp = 0 );
int AFXAPI AfxMessageBox( UINT nIDPrompt, UINT nType = MB_OK, UINT nIDHelp = (UINT) –1 );
說明:
MB_ABORTRETRYIGNORE 消息框中顯示Abort、Retry、Ignore按鈕
MB_OK 顯示OK按鈕
MB_OKCANCEL 顯示OK、Cancel按鈕
MB_RETRYCANCEL 顯示Retry、Cancel按鈕
MB_YESNO 顯示Yes、No按鈕
MB_YESNOCANCEL 顯示Yes、No、Cancel按鈕
圖標風格
MB_ICONINFORMATION 顯示一個i圖標,表示提示
MB_ICONEXCLAMATION 顯示一個驚嘆號,表示警告
MB_ICONSTOP 顯示手形圖標,表示警告或嚴重錯誤
MB_ICONQUESTION 顯示問號圖標,表示疑問
使用時,可以只調用AfxMessageBox(LPCTSTR lpszText);這樣默認風格為AfxMessageBox(LPCTSTR lpszText,MB_OK|MB_ICONEXCLAMATION );
2.DDX_Text
void AFXAPI DDX_Text( CDataExchange* pDX, int nIDC, BYTE& value );
說明:
pDX 指向CDataExchange對象的指針。框架提供了這個對象,用于建立數據交換的環境,包括其方向。
nIDC 對話框、表格視圖或控件視圖中編輯控件的ID。
value 對對話框、表格視圖或控件視圖對象的成員變量的引用,其類型取決于你使用了DDX_Text的哪一個重載版本。
DDX_Text函數管理著對話框、表格視或控件視對象中的編輯控件與對話框、表格視或控件視對象的CString型數據成員之間的int,UINT,long,DWORD,CString,float或double型數據交換。
關于DDX的更多信息參見Visual C++聯機教程中的“加入對話框”和Visual C++程序員聯機指南中的“對話框數據交換與校驗”。
3.CArchive
對象提供了一個類型安全緩沖機制,用于將可序列化對象寫入 CFile 對象或從中讀取可序列化對象。通常,CFile 對象表示磁盤文件;但是,它也可以是表示“剪貼板”的內存文件(CSharedFile?對象)。
4.UpdateData
BOOL UpdateData( BOOL bSaveAndValidate = TRUE );
參數說明:
bSaveAndValidate:標明那對話框是初始化(FALSE)還是數據恢復(TRUE)。
UpdateData() 是MFC的窗口函數,用來刷新數據的。
總的來說:操作系統會調用這個函數來初始化對話框中的數據,或者檢索或者驗證對話框中的數據。
簡單說就是:如果UpdateData(TRUE) == 將控件的值賦值給成員變量;UpdateData(FALSE) == 將成員變量的值賦值給控件。
UpdateData()參數只有一個,默認為TRUE。
UpdateData(TRUE)
——刷新控件的值到對應的變量。(外部輸入值交給內部變量)
即:控件的值—>變量。
UpdateData(FALSE)
—— 拷貝變量值到控件顯示。(變量的最終運算結果值交給外部輸出顯示)
即:變量值—>控件顯示。
5.AfxSocketInit
BOOL AfxSocketInit( WSADATA* lpwsaData = NULL );
返回值:
如果函數成功執行,則返回非零值,否則為0。
參數:
lpwsaData 指向WSADATA結構的指針。如果lpwsaData不等于NULL,那么調用::WSAStartup將填充WSADATA結構。這個函數同時也保證在應用程序結束之前調用::WSACleanup。
說明:
在你重載的CWinApp::InitInstance函數中調用這個函數以初始化WindowsSockets。
在調用 AfxSocketInit() 之前,需要包含 afxsock.h 頭文件。
6.Create
Create ()函數使用syntax 參數指定的數據窗口對象源代碼創建數據窗口對象,新創建的數據窗口對象將取代與數據窗口控件相關聯的當前數據窗口對象,創建套接字
7.listen
int listen( int sockfd, int backlog);
sockfd:用于標識一個已捆綁未連接套接口的描述字。
backlog:等待連接隊列的最大長度。
為了接受連接,先用socket()創建一個套接口的描述字,然后用listen()創建套接口并為申請進入的連接建立一個后備日志,然后便可用accept()接受連接了。listen()僅適用于支持連接的套接口,如SOCK_STREAM類型的。套接口s處于一種“變動”模式,申請進入的連接請求被確認,并排隊等待被接受。這個函數特別適用于同時有多個連接請求的服務器;如果當一個連接請求到來時,隊列已滿,那么客戶將收到一個WSAECONNREFUSED錯誤。
當沒有可用的描述字時,listen()函數仍試圖正常地工作。它仍接受請求直至隊列變空。當有可用描述字時,后續的一次listen()或accept()調用會將隊列按照當前或最近的“后備日志”重新填充,如有可能的話,將恢復監聽申請進入的連接請求。
如無錯誤發生,listen()返回0。否則的話,返回-1,應用程序可通過WSAGetLastError()獲取相應錯誤代碼。
7.CSocketFile(發送和接收序列化數據)
CSocketFile是一種程序語言,所屬Socket編程。進行Socket編程,不能不提到CSocketFile類,其實它并不是用來在Socket雙方發送文件的,而是將需要的數據序列化,比如一些結構體數據,傳給對方,這樣,程序的CDocument()的序列化函數就完全可以和CSocketFile聯系起來。例如你有一個CMyDocument實現了Serialize(),你可以這樣來將你的文檔數據傳給Socket的另一方:
CSocketFile file( pSocket );
CArchive ar( &file, CArchive::store );
pDocument->Serialize( ar );
ar.Close();
同樣,接收一方可以只改變上面的代碼為CArchive ar( &file, CArchive::load );即可。
序列化 (Serialization)是將對象的狀態信息轉換為可以存儲或傳輸的形式的過程。在序列化期間,對象將其當前狀態寫入到臨時或持久性存儲區。以后,可以通過從存儲區中讀取或反序列化對象的狀態,重新創建該對象。
序列化使其他代碼可以查看或修改,那些不序列化便無法訪問的對象實例數據。確切地說,代碼執行序列化需要特殊的權限:即指定了 SerializationFormatter 標志的 SecurityPermission。在默認策略下,通過 Internet 下載的代碼或 Internet 代碼不會授予該權限;只有本地計算機上的代碼才被授予該權限。
通常,對象實例的所有字段都會被序列化,這意味著數據會被表示為實例的序列化數據。這樣,能夠解釋該格式的代碼有可能能夠確定這些數據的值,而不依賴于該成員的可訪問性。類似地,反序列化從序列化的表示形式中提取數據,并直接設置對象狀態,這也與可訪問性規則無關。
對于任何可能包含重要的安全性數據的對象,如果可能,應該使該對象不可序列化。如果它必須為可序列化的,請嘗試生成特定字段來保存不可序列化的重要數據。如果無法實現這一點,則應注意該數據會被公開給任何擁有序列化權限的代碼,并確保不讓任何惡意代碼獲得該權限。
8.CArchive?
CArchive 對象提供了一個類型安全緩沖機制,用于將可序列化對象寫入 CFile 對象或從中讀取可序列化對象。通常,CFile 對象表示磁盤文件;但是,它也可以是表示“剪貼板”的內存文件(CSharedFile?對象)。
給定的 CArchive 對象要么存儲數據(即寫入數據或將數據序列化),要么加載數據(即讀取數據或將數據反序列化),但決不能同時進行。CArchive 對象的壽命只限于將對象寫入文件或從文件讀取對象的一次傳遞。因此,需要兩個連續創建的 CArchive 對象將數據序列化到文件,然后從文件反序列化數據。
//操作符重載:
//插入操作
CArchive& operator<<(BYTE by);
CArchive& operator<<(WORD w);
CArchive& operator<<(LONG l);
CArchive& operator<<(DWORD dw);
CArchive& operator<<(float f);
CArchive& operator<<(double d);
CArchive& operator<<(int i);
CArchive& operator<<(short w);
CArchive& operator<<(char ch);
CArchive& operator<<(unsigned u);
//提取操作
CArchive& operator>>(BYTE& by);
CArchive& operator>>(WORD& w);
CArchive& operator>>(DWORD& dw);
CArchive& operator>>(LONG& l);
CArchive& operator>>(float& f);
CArchive& operator>>(double& d);
CArchive& operator>>(int& i);
CArchive& operator>>(short& w);
CArchive& operator>>(char& ch);
CArchive& operator>>(unsigned& u);
CArchive沒有基類。
CArchive允許以一個永久二進制(通常為磁盤存儲)的形式保存一個對象的復雜網絡。可以在對象被刪除時,還能永久保存。可以從永久存儲中裝載對象,在內存中重新構造它們,使得數據永久保留的過程就叫做“串行化”。
可以把一個archive對象看做一種二進制流。像輸入/輸出流一樣,archive與一個文件相關聯并且允許緩沖區從硬盤讀出或讀入數據。輸入/輸出流一樣處理一系列的ASCII字符串,archive以高效無冗余的格式處理二進制數據。
必須在創建一個CArchive對象之前,創建一個CFile對象。必須確定archive的加載/存儲與file的打開模式相容。每個file只能對應于一個active archive。
當你創建一個CArchive對象時,你就將它分配給一個CFile類(或者派生自CFile的類)的對象,此對象代表一個打開的文件。你同時確定可此archive將被用于加載還是存儲。CArchive不僅可以處理簡單的類型,也可以處理從CObject派生的類所產生的對象,此對象被設計用于Serialization。
CArchive還支持使用MFC Windows套接字類CSocket和CSocketFile編程。
?
CArchive類的成員:
數據成員:
???m_pDocument指向被串行化的CDocument對象
構造函數:
???CArchive:創建一個CArchive對象
???Abort:在不異常的情況下,關閉archive
???Close:沖掉未寫入數據并且釋放與CFile的連接
?
基礎輸入/輸出:
Flush:從archive文件緩沖區中沖掉未寫入數據
運算符>>:從archive中加載對象或者簡單類型數據
運算符<<:向archive中存儲對象或者簡單類型數據
Read:讀入原始類型
Write:寫入原始類型
WriteString:寫一行文本
ReadString:讀一行文本
?
狀態:
GetFile:獲得此archive的CFile對象指針
GetObjectSchema:由Serialize函數調用,來確定被串行化的對象的版本
IsBufferEmpty:確定在一個Windows Socket接收過程中緩沖區是否被清空
IsLoading:確定archive文件是否被裝載
IsStoring:確定archive文件是否被存儲
SetObjectSchema:設置在archive文件中存儲的對象概要
?
對象輸入/輸出 :
MapObject:在沒有對文件串行化的映射中放置對象,但是此映射對參考的子對象有效
ReadClass:讀入一個原先存儲在WriteClass中的類的參考
ReadObject:調用對象用于裝載的Serialize函數
SerializeClass:根據CArchive方向,讀入或寫入與CArchive對象有關聯的類
SetLoadParams:設置加載數組增長的大小,須在對象加載之前調用,或者在MapObject和ReadObject之前調用
SetStoreParams:設置哈希表的大小和映射的塊的大小,映射塊在串行化的過程中識別對象
WriteClass:把CRuntimeClass的參考寫入CArchive
WriteObect:調用一個對象的Serialize函數,此函數用于裝載
9.GetDlgItem
CWnd::GetDlgItem
CWnd* GetDlgItem ( intnID) const;
void CWnd::GetDlgItem( int nID, HWND *phWnd) const;
說明:
參數 nID:接收消息的控件的標識;
參數phWnd:子類窗口的指針;
返回值:標識所標記的控件(或子類窗口)的指針;
10.EnableWindow
BOOL EnableWindow(HWND hWnd,BOOL bEnable);
bEnable:定義窗口是被允許,還是被禁止。若該參數為TRUE,則窗口被允許。若該參數為FALSE,則窗口被禁止。在 EnableWindow 成員函數調用之前,指示狀態。 如果窗口此前已禁用,則返回值是非零。 返回值是0,則窗口先前啟用或錯誤。若想獲得更多的錯誤信息,可調用GetLastError函數。
Windows?API函數。該函數允許/禁止指定的窗口或控件接受鼠標和鍵盤的輸入,當輸入被禁止時,窗口不響應鼠標和按鍵的輸入,輸入允許時,窗口接受所有的輸入。該函數允許/禁止指定的窗口或控件接受鼠標和鍵盤的輸入,當輸入被禁止時,窗口不響應鼠標和按鍵的輸入,輸入允許時,窗口接受所有的輸入。若窗口的允許狀態將發生變化,WM_ENABLE消息將在Enblewindow函數返回前發送出去,若窗口已被禁止,它所有的子窗口也被禁止,盡管并未向子窗口發送WM_ENABLE消息。
窗口被激活前必須處于允許狀態。比如,一個應用程序將顯示一個無模式對話框并且已使該對話框的主窗口處于禁止狀態,則在撤消該對話框之前須使其主窗口處于允許狀態。否則,其他窗口將接受并被激活。若子窗口被禁止,則系統決定由哪個窗口接受鼠標消息時將忽略該窗口
缺省情況下,窗口被創建時被置為允許。若創建一個初始化為禁止狀態的窗口,應用程序需要在CeateWindow或CeateWindowEX函數中定義WS_DISABLED樣式。窗口創建后,應用程序可用EnbleWindow來允許禁止窗口。
應用程序可利用此函數允許/禁止對話框中的某個控件,被禁止的控件既不能接受鍵盤輸入,也不能被用戶訪問,但不能禁用一個擁有輸入焦點的控制項。
11.GetSystemMenu
HMENU GetSystemMenu(HWND hWnd,BOOL bRevert);
hWnd:擁有窗口菜單拷貝的窗口的句柄。
bRevert:標志位,指定將執行的操作。
如果此參數為FALSE,GetSystemMenu返回當前使用窗口菜單的拷貝的句柄。該拷貝初始時與窗口菜單相同,但可以被修改。
如果此參數為TRUE,GetSystemMenu重置窗口菜單到缺省狀態。如果存在先前的窗口菜單,將被銷毀。
返回值:如果參數bRevert為FALSE,返回值是窗口菜單的拷貝的句柄:如果參數bRevert為TRUE,返回值是NULL。
GetSystemMenu,函數名。該函數允許應用程序為復制或修改而訪問窗口菜單(系統菜單或控制菜單)。
系統菜單是指我們點擊窗體左上角的小圖標時所彈出的菜單,其中好象有“恢復”.“移動”.“最大化”.“最小化”.“關閉”這么幾個按鈕.
這個菜單用普通的方法是不能編輯與改變的,但是我們可以通過api函數getsystemmenu來得到它的句柄,然后通過菜單相關的api函數就能改變它了。
12.SetDlgItemText
BOOLSetDlgltemText(HWND hDlg,int nlDDlgltem,LPCTSTR IpString);
hDlg:指定含有控件的對話框。
nlDDlgltem:標識帶有將被設置的標題和文本的控件。
IpString:指向一個以NULL結尾的字符串指針,該字符串指針包含了將被復制到控件的文本。
返回值:如果函數調用成功,則返回值為非零值。如果函數調用失敗,則返回值為零。若想獲得更多的錯誤信息,請調用GetLastError函數
SetDlgItemText是一種函數,功能是設置對話框中控件的文本和標題。函數原型是BOOLSetDlgltemText(HWND hDlg,int nlDDlgltem,LPCTSTR IpString)。
13.?SendTo
SendTo是一個計算機函數,指向一指定目的地發送數據,sendto()適用于發送未建立連接的UDP數據包 (參數為SOCK_DGRAM)。
int FAR sendto (
IN SOCKET s,
IN const char FAR * buf,
IN int len,
IN int flags,
IN const struct sockaddr FAR *to,
IN int tolen);
返回值為整型,如果成功,則返回發送的字節數,失敗則返回SOCKET_ERROR。
系統解釋:
s?套接字
buff 待發送數據的緩沖區
size?緩沖區長度
Flags 調用方式標志位, 一般為0, 改變Flags,將會改變Sendto發送的形式
addr (可選)指針,指向目的套接字的地址
len addr所指地址的長度
14.Atoi
int atoi(const char *nptr);
atoi (表示 ascii to integer)是把字符串轉換成整型數的一個函數,應用在計算機程序和辦公軟件中。int atoi(const char *nptr) 函數會掃描參數 nptr字符串,會跳過前面的空白字符(例如空格,tab縮進)等。如果 nptr不能轉換成 int 或者 nptr為空字符串,那么將返回 0?[1]??。特別注意,該函數要求被轉換的字符串是按十進制數理解的。atoi輸入的字符串對應數字存在大小限制(與int類型大小有關),若其過大可能報錯-1。
?int?main(void)
{
????int?n;
????char?str?=?“12345.67”;
????n?=?atoi(str);
????printf(“n=%d\n”,n);
????return?0;
}
輸出:
n = 12345
15./ 點分十進制數串 <----> 長度為32位的網絡字節序二進制值 */
in_addr_t?? inet_addr(const?char?*strptr);
int?????????inet_aton(const?char?*cp,?struct?in_addr inp)
char?????? inet_ntoa(struct?in_addr in);
15.Send
int send( SOCKET s, const char FAR *buf, int len, int flags );
不論是客戶還是服務器應用程序都用send函數來向TCP連接的另一端發送數據。客戶程序一般用send函數向服務器發送請求,而服務器則通常用send函數來向客戶程序發送應答。
(1)第一個參數指定發送端套接字描述符;
(2)第二個參數指明一個存放應用程序要發送數據的緩沖區;
(3)第三個參數指明實際要發送的數據的字節數;
(4)第四個參數一般置0
send()是一個計算機函數,功能是向一個已經連接的socket發送數據,如果無錯誤,返回值為所發送數據的總數,否則返回SOCKET_ERROR。
總結
以上是生活随笔為你收集整理的关于mfc常用系统函数的使用及说明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python最简单的爬取邮箱地址_pyt
- 下一篇: 《一文搞懂NMS发展历程》Soft-NM