CString( ); 例:CString csStr; CString( const CString& stringSrc ); 例:CString csStr("ABCDEF中文123456"); CString csStr2(csStr); CString( TCHAR ch, int nRepeat = 1 ); 例:CString csStr('a',5); //csStr="aaaaa" CString( LPCTSTR lpch, int nLength ); 例:CString csStr("abcdef",3); //csStr="abc" CString( LPCWSTR lpsz ); 例:wchar_t s[]=L"abcdef"; CString csStr(s); //csStr=L"abcdef" CString( const unsigned char* psz ); 例:const unsigned char s[]="abcdef"; const unsigned char* sp=s; CString csStr(sp); //csStr="abcdef" CString( LPCSTR lpsz ); 例:CString csStr("abcdef"); //csStr="abcdef" 返回字符串的長度,不包含結尾的空字符。 例:csStr="ABCDEF中文123456"; printf("%d",csStr.GetLength()); //16 顛倒字符串的順序 例:csStr="ABCDEF中文123456"; csStr.MakeReverse(); cout< 將小寫字母轉換為大寫字母 例:csStr="abcdef中文123456"; csStr.MakeUpper(); cout< 將大寫字母轉換為小寫字母 例:csStr="ABCDEF中文123456"; csStr.MakeLower(); cout< 區分大小寫比較兩個字符串,相等時返回0,大於時返回1,小於時返回-1 例:csStr="abcdef中文123456"; csStr2="ABCDEF中文123456"; cout< 不區分大小寫比較兩個字符串,相等時返回0,大於時返回1,小於時返回-1 例:csStr="abcdef中文123456"; csStr2="ABCDEF中文123456"; cout< 刪除字符,刪除從下標nIndex開始的nCount個字符 例:csStr="ABCDEF"; csStr.Delete(2,3); cout< //當nIndex過大,超出對像所在內存區域時,函數沒有任何操作。 //當nIndex為負數時,從第一個字符開始刪除。 //當nCount過大,導致刪除字符超出對像所在內存區域時,會發生無法預料的結果。 //當nCount為負數時,函數沒有任何操作。 int Insert( int nIndex, LPCTSTR pstr ) 在下標為nIndex的位置,插入字符或字符串。返回插入後對象的長度 例:csStr="abc"; csStr.Insert(2,'x'); cout< csStr.Insert(2,"xyz"); cout< //當nIndex為負數時,插入在對象開頭 //當nIndex超出對象末尾時,插入在對象末尾 移除對象內的指定字符。返回移除的數目 例:csStr="aabbaacc"; csStr.Remove('a'); cout< int Replace( LPCTSTR lpszOld, LPCTSTR lpszNew ); 替換字串 例:csStr="abcdef"; csStr.Replace('a','x'); cout< csStr="abcdef"; csStr.Replace("abc","xyz"); cout< void TrimLeft( TCHAR chTarget ); void TrimLeft( LPCTSTR lpszTargets ); 從左刪除字符,被刪的字符與chTarget或lpszTargets匹配,一直刪到第一個不匹配的字符為止 例:csStr="aaabaacdef"; csStr.TrimLeft('a'); cout< csStr.TrimLeft("ab"); cout< //無參數時刪除空格 void TrimRight( TCHAR chTarget ); void TrimRight( LPCTSTR lpszTargets ); 從右刪除字符,被刪的字符與chTarget或lpszTargets匹配,一直刪到第一個不匹配的字符為止 例:csStr="abcdeaafaaa"; csStr.TrimRight('a'); cout< csStr="abcdeaafaaa"; csStr.TrimRight("fa"); cout< //無參數時刪除空格 清空 例:csStr="abcdef"; csStr.Empty(); printf("%d",csStr.GetLength()); //0 測試對象是否為空,為空時返回零,不為空時返回非零 例:csStr="abc"; cout< cout< int Find( LPCTSTR lpszSub ) const; int Find( TCHAR ch, int nStart ) const; int Find( LPCTSTR pstr, int nStart ) const; 查找字串,nStart為開始查找的位置。未找到匹配時返回-1,否則返回字串的開始位置 例:csStr="abcdef"; cout< cout< cout< cout< cout< //當nStart超出對象末尾時,返回-1。 //當nStart為負數時,返回-1。 查找lpszCharSet中任意一個字符在CString對象中的匹配位置。未找到時返回-1,否則返回字串的開始位置 例:csStr="abcdef"; cout< 返回對象中與lpszCharSet中任意匹配的第一個字符之前的子串 例:csStr="abcdef"; cout< 從對象中查找與lpszCharSe中任意字符不匹配的字符,並返回第一個不匹配字符之前的字串 例:csStr="abcdef"; cout< 從後向前查找第一個匹配,找到時返回下標。沒找到時返回-1 例:csStr="abba"; cout< void Format( UINT nFormatID, ... ); 格式化對象,與C語言的sprintf函數用法相同 例:csStr.Format("%d",13); cout< 返回下標為nIndex的字符,與字符串的[]用法相同 例:csStr="abcdef"; cout< //當nIndex為負數或超出對象末尾時,會發生無法預料的結果。 給下標為nIndex的字符重新賦值 例:csStr="abcdef"; csStr.SetAt(2,'x'); cout< //當nIndex為負數或超出對象末尾時,會發生無法預料的結果。 從左取字串 例:csStr="abcdef"; cout< //當nCount等於0時,返回空。 //當nCount為負數時,返回空。 //當nCount大於對象長度時,返回值與對象相同。 從右取字串 例:csStr="abcdef"; cout< //當nCount等於0時,返回空。 //當nCount為負數時,返回空。 //當nCount大於對象長度時,返回值與對象相同。 CString Mid( int nFirst, int nCount ) const; 從中間開始取字串 例:csStr="abcdef"; cout< cout< //當nFirst為0和為負數時,從第一個字符開始取。 //當nFirst等於對象末尾時,返回空字串。 //當nFirst超出對象末尾時,會發生無法預料的結果。 //當nCount超出對象末尾時,返回從nFirst開始一直到對象末尾的字串 //當nCount為0和為負數時,返回空字串。 申請新的空間,並返回指針 例:csStr="abcde"; LPTSTR pStr=csStr.GetBuffer(10); strcpy(pStr,"12345"); csStr.ReleaseBuffer(); pStr=NULL; cout< //使用完GetBuffer後,必須使用ReleaseBuffer以更新對象內部數據,否則會發生無法預料的結果。 使用GetBuffer後,必須使用ReleaseBuffer以更新對象內部數據 例:csStr="abc"; LPTSTR pStr=csStr.GetBuffer(10); strcpy(pStr,"12345"); cout< csStr.ReleaseBuffer(); cout< //CString對象的任何方法都應在ReleaseBuffer之後調用 申請新的空間,並返回指針 例:csStr="abc"; csStr.GetBufferSetLength(20); cout< count< //使用GetBufferSetLength後可以不必使用ReleaseBuffer。 |
2012年3月26日 星期一
CString的構造函數
2010年9月1日 星期三
在Linux(ubuntu) 中Eclipse 安裝Android ADT & SDK
我們已經裝好了Eclipse 在Linux (ubuntu)
要在Eclipse 寫Android 程式
還需要再安裝ADT (Android Development Tools)
還有Android SDK
首先要先裝ADT 才能裝Android SDK
Step1 安裝Android ADT (Android Development Tools) -Android 的開發工具
1. 點選Help -> Install New Software..
2. 在Available Software 下 按下 右邊的一個"Add" 按鈕
3. 跳出一個Add Repository 視窗,填入下列資訊
<<在線安裝>>
在"Name"的欄位填入: ADT
在"Location"的欄位填入:http://dl-ssl.google.com/android/eclipse/site.xml
按下ok ,接著eclipse 就會搜尋合適的版本
下方會出現development Tools 的選項 ,請全選後按install 再按Next 就會開始安裝
如果在這時後有出現error
<<就要使用離線安裝的方法>>
到Android 官網下載ADT 來安裝
下載後的ADT解壓縮,接著一樣的方法進入到 Add Repository視窗
這時後按旁邊的"Local"按鈕,選我們解完壓縮的ADT
一樣"Name" 填入 ADT, "Location" 已經自動填上了
之後的步驟就跟在線安裝是一樣的
Step 2. 下載安裝Android SDK
1. 先到Android 官網下載SDK,下載完後解壓縮
2. 接著進到Eclipse -> Window -> Preferences
3. 在跳出的Preferences 視窗左邊的欄位選擇Android
4. 接著在右邊的SDK Location 欄位按下"Browse", 選擇解壓縮完的SDK
5. 按下"Apply" 和 "OK" 就會開始安裝SDK
這樣就結束SDK 和ADT的安裝
可以開始寫Android 的程式了~
在Linux 中安裝Eclipse (for Android)
因為案子的需求需要將Eclipse安裝到Linux系統中
就順便筆記一下
其實很簡單就到 Eclipse的官方網站下載Linux 版本的Eclipse
背景環境: WINNDOWS XP 下使用Sun VirtualBox 進入Linux系統
Step1. 下載安裝JDK
在我的例子是選擇
Platform: Linux
下載完後到Linux系統裡執行安裝
會得到一個包含jdk的文件夾,名字會類似jdk1.5 (會依下載版本不同而不一樣,在此處以jdk1.5版為例)
接著打開終端機 用root的身份 依序輸入下列指令
mv jdk1.5 /usr/local/lib ln-sf /usr/local/lib/jdk1.5/bin/java /usr/bin/java ln -sf /usr/local/lib/jdk1.5/bin/javac /usr/bin/javacp.s root 的身份就是指在 jdk1.5存放的路徑執行
Step2. 下載Eclipse
下載版本: Eclipse IDE for Java EE Developers
(注意! 如果不是下載這個版本很可能在安裝ADT的時後會出現error 無法成功)
下載完後就放到Linux裡解壓縮
會產生eclipse 資料夾
直接點資料夾裡的eclipse.exe執行
這時後會跳出一個error message 讓你無法正確的開啟eclipse
內容是說你沒裝JDK,沒錯我們不是裝了嗎?
在Linux裡我們還要再用終端機讓JDK再安裝到eclipse裡
做法如下:
1. 先進到jdk所在的目錄
2.輸入下列指令
-> sudo apt-get install java
下一篇就是在Eclipse安裝Android 的ADT 和 SDK
2010年8月13日 星期五
Android 入門
最近在看Android
找了一些可以線上看的電子書
覺得還蠻詳細的
從環境的設置開始都教的很清楚
想入門android可以看以下的連結
我個人覺得第一個連結教的比較易懂
也比較接近目前使用的android 版本
在學Android前最好是先看Java
有點Java的基礎概念架構
因為Android 是base on java
真有點後悔為什麼大學的時後沒有好好學小java
T_T 應該說怎麼沒認真學程式
2010年6月10日 星期四
(MFC) SetTimer & KillTimer 的用法
或許大家會想問..
SetTimer是什麼東東?
什麼時後會需要用到SetTimer呢?
嘿~ 我來回答
SetTimer 是一個程式定時器.....
所以當我們需要每隔一段時間執行一件事的時後
就可以用到它囉~
我舉個例好了...
像是做時鐘的功能必須每隔多久就要更新一次時間
這時後就可以用SetTimer來設定多久更新的動作了~
來看一下SetTimer的原型
SetTimer是什麼東東?
什麼時後會需要用到SetTimer呢?
嘿~ 我來回答
SetTimer 是一個程式定時器.....
所以當我們需要每隔一段時間執行一件事的時後
就可以用到它囉~
我舉個例好了...
像是做時鐘的功能必須每隔多久就要更新一次時間
這時後就可以用SetTimer來設定多久更新的動作了~
來看一下SetTimer的原型
UINT SetTimer(當使用SetTimer函數的時候,就會生成一個計時器。
HWND hWnd,
UINT nIDEvent,
UINT uElapse,
TIMERPROC lpTimerFunc
);
函數中nIDEvent指的是計時器的標識,也就是名字。
nElapse指的是時間間隔,也就是每隔多長時間觸發一次事件。
第四個參數是一個回調函數,在這個函數裏,放入你想要做的事情的代碼,
你可以將它設定為NULL,也就是使用系統默認的回調函數,系統默認認的是onTime函數。
這個函數怎麼生成的呢?
你需要在需要計時器的類的生成onTime函數:
在ClassWizard裏,選擇需要計時器的類,添加WM_TIME消息映射,就自動生成onTime函數了。
然後在函數裏添加代碼,讓代碼實現功能。每隔一段時間就會自動執行一次。
例: SetTimer(m_hWnd(指定容器), 1(名稱), 1000(毫秒), NULL(NULL就是到onTime))
如果要增設兩個以上的Timer,那當然就是多用SetTimer
只要名稱取不一樣就可以
接著在onTime裡可以用switch...case的方法來分辨要執行哪一個SetTimer
不需要的時後就要用KillTimer(nIDEvent)
下方的連結有更詳細的SetTimer和KillTimer的用法
http://wenku.baidu.com/view/b52f38b91a37f111f1855b46.html
2010年6月9日 星期三
(MFC) 新增元件function 遇到的問題
我用VS的MFC拉介面弄到一半, Button要加新事件的時候, 系統就冒出這段話
"Add/Remove operation is impossible, because the code element 'XXX' is read only"
我試過把button刪除再重新新增一個
也還是無法替Button 加新事件
最後上網google一下 果然還蠻多人發生類似的事
原因是資料夾的唯讀選項被啟用了
後來我試著把資料夾內容-> 唯讀的功能取消
再開啟project ,但情況還是一樣沒改善
事件還是無法新增
最後在網上找到了二個解決的方法
方法一
1. 把project 資料夾裡的.ncb檔刪除掉
2. 再重新編譯project
3. 創Button 新事件
方法二
-是關閉選項, h是隱藏檔案屬性, r是唯讀檔案屬性,
/S是處理目前及所有子資料夾
就成功改變資料夾屬性囉~
我只用到方法一就成功了
所以方法二我就沒試了....
我想應該也是有用的吧 ^^
2010年5月3日 星期一
C/C++禁用危險API
這是之前在網路上看到有好心人整理出來的表格
其實這些禁用的API還是可以用,但其實主要目是是為了減少代碼中引入安全漏洞的可能性
如果能避開不用當然是最好的
下面這個表格是禁用的API,各自可以替代的函數
MSDN: http://msdn.microsoft.com/en-us/library/ff468910%28v=VS.85%29.aspx
其實這些禁用的API還是可以用,但其實主要目是是為了減少代碼中引入安全漏洞的可能性
如果能避開不用當然是最好的
下面這個表格是禁用的API,各自可以替代的函數
MSDN: http://msdn.microsoft.com/en-us/library/ff468910%28v=VS.85%29.aspx
| 禁用的API | 替代的StrSafe函數 | 替代的Safe CRT函數 |
| 有關字符串拷貝的API | ||
| strcpy, wcscpy, _tcscpy, _mbscpy, StrCpy, StrCpyA, StrCpyW, lstrcpy, lstrcpyA, lstrcpyW, strcpyA, strcpyW, _tccpy, _mbccpy | StringCchCopy, StringCbCopy, StringCchCopyEx, StringCbCopyEx | strcpy_s |
| 有關字符串合併的API | ||
| strcat, wcscat, _tcscat, _mbscat, StrCat, StrCatA, StrCatW, lstrcat, lstrcatA, lstrcatW, StrCatBuffW, StrCatBuff, StrCatBuffA, StrCatChainW, strcatA, strcatW, _tccat, _mbccat | StringCchCat, StringCbCat, StringCchCatEx, StringCbCatEx | strcat_s |
| 有關sprintf的API | ||
| wnsprintf, wnsprintfA, wnsprintfW, sprintfW, sprintfA, wsprintf, wsprintfW, wsprintfA, sprintf, swprintf, _stprintf | StringCchPrintf, StringCbPrintf, StringCchPrintfEx, StringCbPrintfEx | _snprintf_s _snwprintf_s |
訂閱:
文章 (Atom)