源代碼從編寫到執(zhí)行整個過程,預處理 編譯 匯編 鏈接 生成 執(zhí)行

一.?獲得主框架的指針? AfxGetMainWnd()
AfxGetMainWnd()->PostMessage(WM_CLOSE, 0, 0);

二.
靜態(tài)與動態(tài)拆分窗口的區(qū)別:??
? 1、靜態(tài)拆分窗口的不同子窗口允許是不同窗口類的窗口,??
??????? 而且你只能改變窗口切分的尺寸,不能動態(tài)地改變窗口??
??????? 切分的個數。??
???
? 2、動態(tài)拆分窗口只能用于同一個窗口類的切分,??
??????? 但是可以動態(tài)地改變窗口切分的尺寸和動態(tài)地改變窗口??
??????? 切分的個數。?

三.
? 在Unicode轉換中,_T()與L到底怎么用,有什么區(qū)別
_T會根據你工程的設置自動轉換UNICODE和非UNICODE.??
? 加L就是轉為UNICODE

_T是將字符串轉換為TCHAR,TCHAR是一個宏定義,當定義了UNICODE時TCHAR等同于WCHAR,否則等同于CHAR。為了和以后的平臺兼容,建議使用TCHAR,而不要使用普通的CHAR。例子:TCHAR?? *s?? =?? _T("FSDF")??
???
? L將字符串轉換為WCHAR,用于需要UNICODE的環(huán)境。例子:WCHAR?? *s?? =?? L"FSDF"


Unicode?? :寬字節(jié)字符集??
? 1. 如何取得一個既包含單字節(jié)字符又包含雙字節(jié)字符的字符串的字符個數???
? 可以調用Microsoft?? Visual?? C++的運行期庫包含函數_mbslen來操作多字節(jié)(既包括單字節(jié)也包括雙字節(jié))字符串。??
? 調用strlen函數,無法真正了解字符串中究竟有多少字符,它只能告訴你到達結尾的0之前有多少個字節(jié)。??
? 2. 如何對DBCS(雙字節(jié)字符集)字符串進行操作???
? 函數 描述??
? PTSTR?? CharNext?? (?? LPCTSTR?? ); 返回字符串中下一個字符的地址??
? PTSTR?? CharPrev?? (?? LPCTSTR,?? LPCTSTR?? ); 返回字符串中上一個字符的地址??
? BOOL?? IsDBCSLeadByte(?? BYTE?? ); 如果該字節(jié)是DBCS字符的第一個字節(jié),則返回非0值??
? 3. 為什么要使用Unicode???
? (1) 可以很容易地在不同語言之間進行數據交換。??
? (2) 使你能夠分配支持所有語言的單個二進制.exe文件或DLL文件。??
? (3) 提高應用程序的運行效率。??
? Windows?? 2000是使用Unicode從頭進行開發(fā)的,如果調用任何一個Windows函數并給它傳遞一個ANSI字符串,那么系統(tǒng)首先要將字符串轉換成Unicode,然后將Unicode字符串傳遞給操作系統(tǒng)。如果希望函數返回ANSI字符串,系統(tǒng)就會首先將Unicode字符串轉換成ANSI字符串,然后將結果返回給你的應用程序。進行這些字符串的轉換需要占用系統(tǒng)的時間和內存。通過從頭開始用Unicode來開發(fā)應用程序,就能夠使你的應用程序更加有效地運行。??
? Windows?? CE?? 本身就是使用Unicode的一種操作系統(tǒng),完全不支持ANSI?? Windows函數??
? Windows?? 98?? 只支持ANSI,只能為ANSI開發(fā)應用程序。??
? Microsoft公司將COM從16位Windows轉換成Win32時,公司決定需要字符串的所有COM接口方法都只能接受Unicode字符串。??
? 4. 如何編寫Unicode源代碼???
? Microsoft公司為Unicode設計了WindowsAPI,這樣,可以盡量減少代碼的影響。實際上,可以編寫單個源代碼文件,以便使用或者不使用Unicode來對它進行編譯。只需要定義兩個宏(UNICODE和_UNICODE),就可以修改然后重新編譯該源文件。??
? _UNICODE宏用于C運行期頭文件,而UNICODE宏則用于Windows頭文件。當編譯源代碼模塊時,通常必須同時定義這兩個宏。??
? 5. Windows定義的Unicode數據類型有哪些???
? 數據類型 說明??
? WCHAR Unicode字符??
? PWSTR 指向Unicode字符串的指針??
? PCWSTR 指向一個恒定的Unicode字符串的指針??
? 對應的ANSI數據類型為CHAR,LPSTR和LPCSTR。??
? ANSI/Unicode通用數據類型為TCHAR,PTSTR,LPCTSTR。??
? 6. 如何對Unicode進行操作???
? 字符集 特性 實例??
? ANSI 操作函數以str開頭 strcpy??
? Unicode 操作函數以wcs開頭 wcscpy??
? MBCS 操作函數以_mbs開頭 _mbscpy??
? ANSI/Unicode 操作函數以_tcs開頭 _tcscpy(C運行期庫)??
? ANSI/Unicode 操作函數以lstr開頭 lstrcpy(Windows函數)??
? 所有新的和未過時的函數在Windows2000中都同時擁有ANSI和Unicode兩個版本。ANSI版本函數結尾以A表示;Unicode版本函數結尾以W表示。Windows會如下定義:??
? #ifdef???? UNICODE??
? #define???? CreateWindowEx???? CreateWindowExW??
? #else??
? #define???? CreateWindowEx???? CreateWindowExA??
? #endif?????? //?? !UNICODE??
? 7. 如何表示Unicode字符串常量???
? 字符集 實例??
? ANSI “string”??
? Unicode L“string”??
? ANSI/Unicode T(“string”)或_TEXT(“string”)if(?? szError[0]?? ==?? _TEXT(‘J’)?? ){?? }??
? 8. 為什么應當盡量使用操作系統(tǒng)函數???
? 這將有助于稍稍提高應用程序的運行性能,因為操作系統(tǒng)字符串函數常常被大型應用程序比如操作系統(tǒng)的外殼進程Explorer.exe所使用。由于這些函數使用得很多,因此,在應用程序運行時,它們可能已經被裝入RAM。??
? 如:StrCat,StrChr,StrCmp和StrCpy等。??
? 9. 如何編寫符合ANSI和Unicode的應用程序???
? (1) 將文本串視為字符數組,而不是chars數組或字節(jié)數組。??
? (2) 將通用數據類型(如TCHAR和PTSTR)用于文本字符和字符串。??
? (3) 將顯式數據類型(如BYTE和PBYTE)用于字節(jié)、字節(jié)指針和數據緩存。??
? (4) 將TEXT宏用于原義字符和字符串。??
? (5) 執(zhí)行全局性替換(例如用PTSTR替換PSTR)。??
? (6) 修改字符串運算問題。例如函數通常希望在字符中傳遞一個緩存的大小,而不是字節(jié)。這意味著不應該傳遞sizeof(szBuffer),而應該傳遞(sizeof(szBuffer)/sizeof(TCHAR)。另外,如果需要為字符串分配一個內存塊,并且擁有該字符串中的字符數目,那么請記住要按字節(jié)來分配內存。這就是說,應該調用malloc(nCharacters?? *sizeof(TCHAR)),而不是調用malloc(nCharacters)。??
? 10. 如何對字符串進行有選擇的比較???
? 通過調用CompareString來實現。??
? 標志 含義??
? NORM_IGNORECASE 忽略字母的大小寫??
? NORM_IGNOREKANATYPE 不區(qū)分平假名與片假名字符??
? NORM_IGNORENONSPACE 忽略無間隔字符??
? NORM_IGNORESYMBOLS 忽略符號??
? NORM_IGNOREWIDTH 不區(qū)分單字節(jié)字符與作為雙字節(jié)字符的同一個字符??
? SORT_STRINGSORT 將標點符號作為普通符號來處理??
? 11. 如何判斷一個文本文件是ANSI還是Unicode???
? 判斷如果文本文件的開頭兩個字節(jié)是0xFF和0xFE,那么就是Unicode,否則是ANSI。??
? 12. 如何判斷一段字符串是ANSI還是Unicode???
? 用IsTextUnicode進行判斷。IsTextUnicode使用一系列統(tǒng)計方法和定性方法,以便猜測緩存的內容。由于這不是一種確切的科學方法,因此?? IsTextUnicode有可能返回不正確的結果。??
? 13. 如何在Unicode與ANSI之間轉換字符串???
? Windows函數MultiByteToWideChar用于將多字節(jié)字符串轉換成寬字符串;函數WideCharToMultiByte將寬字符串轉換成等價的多字節(jié)字符串。??