最近在看Android
找了一些可以線上看的電子書
覺得還蠻詳細的
從環境的設置開始都教的很清楚
想入門android可以看以下的連結
我個人覺得第一個連結教的比較易懂
也比較接近目前使用的android 版本
在學Android前最好是先看Java
有點Java的基礎概念架構
因為Android 是base on java
真有點後悔為什麼大學的時後沒有好好學小java
T_T 應該說怎麼沒認真學程式
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
我用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 新事件
方法二
就成功改變資料夾屬性囉~
我只用到方法一就成功了
所以方法二我就沒試了....
我想應該也是有用的吧 ^^
| 禁用的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 |
UINT CChildView::WorkerThreadProc(LPVOID Param) //Sample function for using in AfxBeginThreadCChildView.h
{
CChildView* pView = (CChildView*) Param;
return 0;
}
在要呼叫thread的地方寫上
AfxBeginThread(WorkerThreadProc,(LPVOID)this);
static UINT WorkerThreadProc(LPVOID Param);
CString Left(int nCount)Parameters
- nCount
- Specifies the number of characters to extract from this CString object.
Return Value
A CString object containing a copy of the specified range of characters. Note that the returned CString object may be empty.
Example
The following example demonstrates the use of CString::Left.
// example for CString::Left CString s(_T("abcdef")); ASSERT(s.Left(2) == _T("ab"));
left和right的用法是相同的
只是算個數的方向不同
left - 是從左數到右
right - 是從右數到左
CString cs = _T("abcdef");
字串.left(個數) =>ex. cs.left(2) = _T("ab");
字串.right(個數) =>ex. cs.right(2) = _T("ef");