爲了直觀的修改TT客戶端頁面,我花了不少時間在網上尋找UIDesigner設計工具。最後實在是找不到了,就找了同事幫忙,他climb over the wall(這個詞都成敏感詞彙了?博客裏竟然不許用)以後終於幫我下載到了。算法
如下是Duilib的一些網址,不少都須要climb over the wall後才能訪問。多線程
官網: www.duilib.com app
論壇: bbs.duilib.com svn
qq羣: 153787916(1羣),79145400(2羣),1507570(3羣) 函數
google code項目託管地址: http://code.google.com/p/duilib/ 工具
svn: http://duilib.googlecode.com/svn/trunk/ 佈局
新浪微博: http://weibo.com/duilib 學習
騰訊微博: http://t.qq.com/duilibui
客戶端的具體頁面佈局xml文件在VS工具中的目錄如圖1所示:google
圖1
這些xml源代碼文件放在文件夾E:\tools\mogu.io\TeamTalk-master\win-client\bin\teamtalk\gui\下面。
修改舉例:詳細信息頁面的用戶名顯示不全,我用UIDesigner工具打開了UserDetailInfoDialog.xml這個頁面,並將width改成了80。如圖2
圖2
接下來具體分析一下win-client的源碼包:VS打開後,如圖3,紅色標註的我在第一篇博客裏面講到過的涉及採用到其餘第三方庫。這裏就先不去深刻學習了,後面涉及到那塊就學哪塊吧。
圖3
接下來重點講一下其餘部分:
Sln_define:解決方案的全局性配置(GlobalConfig.h)和全局變量(GlobalDefine.h)的定義。
Utility顧名思義:公用模塊,如圖4:
圖4
CppSQLite3是對SQLite的API進行了二次封裝的類。
參考資料:http://blog.csdn.net/stan1989/article/details/8589293
http://www.codeproject.com/Articles/6343/CppSQLite-C-Wrapper-for-SQLite/
IniOperation:對ini文件進行讀寫操做的API的封裝。
Md5:對md5加密算法的封裝。
Multilingual:多語言支持包,當前只有一個從win-client\bin\teamtalk\chinese.ini文件裏面取中文翻譯的函數。
TTThread:多線程的封裝(建立、銷燬、掛起等)。
utilCommonAPI:常規的自定義公用函數
原做者 快刀kuaidao@mogujie.com 同志,一個函數的註釋也沒有,還好均可以顧名思義,我註釋了以下,不對的地方請網友指正:
//二進制轉十六進制再轉字符串
CString binToHexToCString(const unsigned char * data, size_t len)
//獲取md5字符串
CString getMd5CString(const char* pSrc, size_t length)
//獲取當前進程已加載模塊的文件的完整路徑
CString getAppPath()
//獲取當前進程已加載模塊的文件的父路徑
CString getParentAppPath()
//建立路徑中的所有文件夾
BOOL createAllDirectories(CString & csDir)
//基於BKDR的哈希算法
UInt32 hash_BKDR(const char* str)
//消息泵(抽取消息、翻譯消息、分發消息)
void messagePump()
//將空間單位轉換爲人類可讀的單位
std::string getHumanReadableSizeString(double size)
//文件是否存在
BOOL isFileExist(IN const LPCTSTR csFileName)
//註冊dll控件
BOOL registerDll(const CString& sFilePath)
//線程等待函數(這裏500ms做爲判斷時間)
BOOL waitSingleObject(HANDLE handle, Int32 timeout)
utilstrCodingAPI:自定義的字符串編碼公用函數
//32位整型轉字符串
CString int32ToCString(Int32 n)
//字符串轉32位整型(要求輸入的參數字符串是符合int範圍[-2147483648, 2147483647])
Int32 cstringToInt32(LPCTSTR buff)
//無符號32位整型轉字符串
std::string uint32ToString(UInt32 n)
//字符串轉32位整型(不作參數檢查)
Int32 stringToInt32(const std::string& src)
//utf8轉字符串
CString utf8ToCString(const char* src)
//字符串轉utf8
std::string cStringToUtf8(const CString& src)
//寬字符轉窄字符
const std::string ws2s(const std::wstring& src)
//窄字符轉寬字符
const std::wstring s2ws(const std::string& src)
//是否包含中文
BOOL isIncludeChinese(const std::string& str)
//獲取第一個字母
std::string GetFirstLetter(const char* strChs)
//漢字轉首字母拼音
CString HZ2FirstPY(IN std::string szHZ)
//漢字轉拼音
char* ConvertChineseUnicodeToPyt(wchar_t* chrstr)
//整句翻譯成拼音
CString HZ2AllPY(IN CString szHZ)
//拆分字符串
Int32 splitString(__in std::wstring src, __in std::vector<std::wstring> _vecSpliter,
__out std::vector<std::wstring> &_splitList)