記在前面
在做完一個登錄頁面之後,之後在每次調試的時候,都需要輸入各種登錄信息就很麻煩,經點撥,Windows下面有.ini文件,可以存儲登錄信息,下次打開登錄的時候,直接顯示,不用再輸入了。這個文件也用於初始化一個程序。百度百科 .ini文件。
ini文件相關的函數。
保存登錄信息
我設計的思路是,一旦選擇了登錄,就判斷有沒有記錄登錄信息的.ini文件,如果沒有,就新建一個文件,如果有,就把文件裏面的信息放到我的輸入對話框。相關的操作很簡單的,隨便搜搜就有了。
這裏記錄幾個操作相關的函數。
USES_CONVERSION;
LPCWSTR login_number=A2CW((LPCSTR)m_login_number); //需要先將CString類型的數據轉換爲LPCWSTR類型。然後再傳參。
::WritePrivateProfileStringW(L"Login Info", L"login_number", login_number, L"D:\\MFCApplication3\\MFCApplication3\\MFCApplication3\\login.ini");
//這裏是因爲使用了xxW()函數,所以需要轉換成LPCWSTR.
//如果是整數的話,需要先用Format()函數轉換爲字符串。
strTemp.Format("%d", m_login_pwd);
LPCWSTR login_pwd = A2CW((LPCSTR)strTemp);
//然後再調用函數寫入ini文件裏面去。
//具體函數的形參和返回值,可以看上面的那個鏈接裏面的文檔。
我終於找到了官方的文檔。微軟的文檔。
DWORD GetPrivateProfileString(
LPCTSTR lpAppName, //這個函數裏面的參數需要加_T宏。直接是CString也可以。
//CString==const char[]
LPCTSTR lpKeyName,
LPCTSTR lpDefault,
LPTSTR lpReturnedString,
DWORD nSize,
LPCTSTR lpFileName
);
DWORD GetPrivateProfileStringA(
LPCSTR lpAppName, //這個函數裏面的參數直接是CString就行了。
LPCSTR lpKeyName,
LPCSTR lpDefault,
LPSTR lpReturnedString,
DWORD nSize,
LPCSTR lpFileName
);
DWORD GetPrivateProfileStringW(
LPCWSTR lpAppName, //我使用的是這個函數,改成LPCWSTR類型。寬的。是const wchar_t.
LPCWSTR lpKeyName,
LPCWSTR lpDefault,
LPWSTR lpReturnedString,
DWORD nSize,
LPCWSTR lpFileName
);
關於字符:
//LPSTR 相當於TCHAR *,
//LPCTSTR 相當於const TCHAR *.
//如果當前編譯方式爲ANSI(默認)方式,TCHAR等價於CHAR,如果爲Unicode方式,TCHAR等價於WCHAR
TCHAR
因爲C++支持兩種字符串,即常規的ANSI編碼(使用"“包裹)和Unicode編碼(使用L”“包裹),這樣對應的就有了兩套字符串處理函數,比如:strlen()和wcslen(),分別用於處理兩種字符串。微軟將這兩套字符集及其操作進行了統一,通過條件編譯(通過_UNICODE和UNICODE宏)控制實際使用的字符集,這樣就有了_T(”")這樣的字符串,對應的就有了_tcslen()這樣的函數。爲了存儲這樣的通用字符,就有了TCHAR.當我們定義了UNICODE宏,就相當於告訴了編譯器:我準備採用UNICODE版本。這個時候,TCHAR就會搖身一變,變成了wchar_t。而未定義UNICODE宏時,TCHAR搖身一變,變成了unsigned char。這樣就可以很好的切換寬窄字符集。