MFC 中L 和 _T() 巨集
_T("")是一個巨集,定義在tchar.h下 .
#define _T(x) __T(x)
#define __T(x) x
#define __T(x) L##x
TCHAR* p =_T("Hello");
他的作用是讓你的程式支援Unicode編碼 , 因為Windows使用 兩種字符集 ANSI 和 UNICODE , 前者就是通常使用的單位元組方式 , 但這種方式處理像中文這項雙位元組字元不方便,
容易出現半個漢字的情況. 而後者是雙位元組的方式,方便處理雙位元組字元.
如果你編譯一個程式為ANSI 方式, _T 實際不起任何作用. 而如果編譯一個程式為UNICODE 方式,則編譯器會把 _T("Hello") 字串以UNICODE方式儲存;
_T和L 的區別在於,L不管你是以什麼方式編譯的,一律以UNICODE方式儲存;
LPSTR:32bit指標指向一個字元串,每個字元佔1位元組 LPCSTR:32-bit指標指向一個常字元串,每個字元佔1位元組 LPCTSTR:32-bit指標指向一個常字元串,每字元可能佔1位元組或2位元組,取決於Unicode是否定義 LPTSTR:32-bit指標每字元可能佔1位元組或2位元組,取決於Unicode是否定義 L是表示字串資源為Unicode的。 比如 wchar_tStr[] = L"Hello World!"; 這個就是雙位元組儲存字元了。 _T是一個適配的巨集~ 當相關推薦
MFC 中L 和 _T() 巨集
_T("")是一個巨集,定義在tchar.h下 . #define _T(x) __T(x) #define __T(x) x #define __T(x) L##x TCHAR* p =_T("Hello"); 他的作用是讓你的程式支援Uni
C++中L和_T()之區別
字串前面加L表示該字串是Unicode字串。 _T是一個巨集,如果專案使用了Unicode字符集(定義了UNICODE巨集),則自動在字串前面加上L,否則字串不變。因此,Visual C++裡邊定義字串的時候,用_T來保證相容性。VC支援ascii和unicode兩種字元型別,用_T可以
C++,Windows/MFC_中L和_T()之區別
字串前面加L表示該字串是Unicode字串。 _T是一個巨集,如果專案使用了Unicode字符集(定義了UNICODE巨集),則自
MFC中L, _T(),TEXT,_TEXT區別以及含義
一、在字串前加一個L作用: 如 L"我的字串" 表示將ANSI字串轉換成unicode的字串,就是每個字元佔用兩個位元組。 strlen("asd") = 3; strlen(L"asd") = 6; 二、 _T巨集可以把一個引號引起來的字串,根據你的環境設定,使得編譯器會根據編譯目
MFC中建立和使用執行緒的方法
有關建立執行緒的問題有三種方法: 1.C語言函式,呼叫_beginthread(); 2.API函式,呼叫CreateThread(); 3.MFC函式,呼叫AfxBeginThread(); 推薦使用MFC函式AfxBeginThread(); 利用
MFC中TCHAR和CHAR型別的互轉
//將TCHAR轉為char //*tchar是TCHAR型別指標,*_char是char型別指標 TcharToChar (const TCHAR * tchar,&n
MFC中OnPaint()和OnDraw()
在檢視畫的圖象或者文字,當視窗改變後為什麼不見了?OnDraw()和OnPaint()兩個都是解決上面的問題,有什麼不同?(引用自百度) OnDraw()和OnPaint()好象兄弟倆,因為它們的工作類似。 至於不見了的問題簡單,因為當你的視窗改變後,會產生無效區域,這
MFC中setimer和ontimer定時器函式到時間不能觸發執行是因為WM_TIMER訊息的優先順序低
MFC中setimer和ontimer定時器函式到時間不能觸發執行, 因為WM_TIMER訊息的優先順序低,所以會優先處理高級別其他訊息,如 WM_PAINT訊息重複觸發介面的重繪, WM_TIMER無處理的機會。訊息
MFC中SendMessage和PostMessage兩種傳送訊息用法
前一段時間做專案,用到訊息響應機制,為了記憶,特發與此!待事件充裕之時再進行整理。 1.可通過SendMessage或PostMessage傳送訊息; SendMessage是傳送訊息之後待訊息響應執行完才返回;而PostMessage將訊息傳送出去之後就立刻返回。 2
linux中likely()和unlikely()巨集
The gcc C compiler has a built-in directive that optimizes conditional branches as either very likely taken or very unlikely taken. The
MFC中CHtmlView和JS的相互呼叫
沒廢話,直接上步驟: 1、建立一個繼承自CHtmlView的類; 2、建構函式中新增 CNewHtmlView::CNewHtmlView() { // 允許自動化 EnableAutomation(); } 3、過載 virtual HRESULT OnGetExte
MFC中的_T巨集
Windows使用兩種字符集ANSI和UNICODE, 前者就是通常使用的單位元組方式,但這種方式處理象中文這樣的雙位元組字元不方便,容易出現半個漢字的情況。 而後者是雙位元組方式,方便處理雙位元組字元。 Windows NT的所有與字元有關的函式都提供兩種方式的版
GCC 中 -L、-rpath和-rpath-link的區別
目錄 恢復 固定 成功 ref exist fyi man手冊 錯誤 GCC 中 -L、-rpath和-rpath-link的區別 來源 http://blog.csdn.net/q1302182594/article/details/42102961 關於這3個參數的說明
MFC中傳送自定義訊息機制,PostMessage和SendMessage方式
MFC中有種訊息佇列,使用PostMessage()或者SendMessage()給窗體傳送自定義訊息,當窗體接收到訊息時呼叫該訊息對應繫結的方法。 PostMessage:把訊息投放到執行緒的訊息佇列,不等訊息被處理就立即返回;Send
在linux中,$*和[email protected]有什麼區別?
看了很多的文章,依然似懂非懂。現在,終於理解了它們兩者之間的區別。 $*會把當前指令碼的所有引數作為一個引數傳遞給子指令碼。(在英文中,*字元有“所有”的意思) [email protected]會把當前指令碼的所有引數分別作為一個引數傳遞給子指令碼。(在英文中,@字元有“獨立”的
#define巨集定義中的#和##用法和區別
參考Difference between # and ## 簡單來說,在巨集定義中,#是將變數轉換成字串的作用,而##是連線兩個引數作用 ###exaplem #include <iostream> #define stringize_indire
MFC中選單響應事件ON_UPDATE_COMMAND_UI和ON_COMMAND訊息區別,OnMenuSelect事件介紹
第一個是響應開啟選單的命令的 第二個是你開啟這個選單時,處理這個選單的狀態,比如選中、變灰等等。 比如WINDOWS自帶的記事本程式,它的"格式"選單下有個"自動換行",那麼在編寫記事本這個程式時,對文字進行自動換行或不自動換行的操作就要放在ON_COMMAND訊息響應函式裡,而"自
記:巨集定義中的##和#的作用
核心中有很多的巨集定義,在巨集定義define中經常看到兩個字串##和#,這裡把它的用法做一下說明: 一、 ##是一個連線符號,用於把引數連在一起 例如: &n
MFC 中PreTranslateMessage(MSG* pMsg)截獲按鈕和編輯框的訊息進行預處理
在類嚮導自動為對話方塊新增PreTranslateMessage(MSG* pMsg)函式; BOOL CjilutestDlg::PreTranslateMessage(MSG* pMsg) { // TODO: 在此新增專用程式碼和/或呼叫基類 if
MFC中的模態對話方塊和非模態對話方塊
MFC筆記之模態對話方塊和非模態對話方塊 迫於科研的進度壓力,我還是選擇了MFC最為工具去開發裝置除錯軟體,最初想用Qt來創新一下,然而串列埠的通訊一直沒有成功,而且周圍沒有人用Qt使得我在遇到問題無法