第一篇:VC編程資料總結
CString類的完美總結
2012-05-04 15:50:50 我來說兩句
收藏
我要投稿
①、CString 類對象的初始化: CString str;
CString str1(_T(“abc”));CString str2 = _T(“defg”);
TCHAR szBuf[] = _T(“kkk”);CString str3(szBuf);CString str4 = szBuf;
TCHAR *p = _T(“1k2”);//TCHAR * 轉換為 CString CString str5(p);CString str6 = p;
CString str7(str1);CString str8 = str7;
②、字符串基本操作: ● 長度:GetLength();CString str(_T(“abc”));
int len = str.GetLength();//len == 3
● 是否為空,即不含字符:IsEmpty();● 清空字符串:Empty();CString str(_T(“abc”));
BOOL mEmpty = str.IsEmpty();//mEmpty == FALSE str.Empty();
mEmpty = str.IsEmpty();//mEmpty == TRUE
● 轉換大小寫:MakeUpper、MakeLower ● 轉換順序:MakeReverse CString str(_T(“Abc”));str.MakeUpper();//str == ABC str.MakeLower();//str == abc str.MakeReverse();//str == cba
● 字符串的連接:+、+= CString str(_T(“abc”));
str = _T(“de”)+ str + _T(“kp”);//str == deabckp str += _T(“123”);//str == deabckp123 TCHAR szBuf[] = _T(“789”);
str += szBuf;//str == deabckp123789
● 字符串的比較:==、!=、(<、>、<=、>= 不常用)、Compare(區分大小寫)、CompareNoCase(不區分大小寫)
CString str1(_T(“abc”));CString str2 = _T(“aBc”);if(str1 == str2){
MessageBox(_T(“str1 等于 str2”));}else{
MessageBox(_T(“str1 不等于 str2”));}
③、字符串的查找:
Find、ReverseFind、FindOneOf 三個函數可以實現字符串的查找操作
Find 從指定位置開始查找指定的字符或者字符串,返回其位置,找不到返回-1;
舉例:
CString str(_T(“abcdefg”));
int idx = str.Find(_T(“cde”), 0);//idx 的值為2;
ReverseFind 從字符串末尾開始查找指定的字符,返回其位置,找不到返回-1,雖然是從后向前查找,但是位置為從開始算起;
CString str(_T(“abcdefg”));
int idx = str.ReverseFind('e');//idx 的值為4;
FindOneOf 查找參數中給定字符串中的任意字符,返回第一次出現的位置,找不到返回-1;
CString str(_T(“abcabcd”));
int idx = str.FindOneOf(_T(“cbd”));//idx 的值為1;
④、字符串的替換與刪除:
Replace 替換 CString 對象中的指定的字符或者字符串,返回替換的個數,無匹配字符返回 0;
CString str(_T(“abcdabc”));int num = str.Replace('b', 'k');//str == akcdakc, num == 2
CString str(_T(“abcdabc”));
int num = str.Replace(_T(“bc”), _T(“kw”));//str == akwdakw, num == 2
Remove 刪除 CString 對象中的指定字符,返回刪除字符的個數,有多個時都會刪除;
CString str(_T(“abcdabcb”));
int num = str.Remove('b');//str == acdac, num == 3
Delete 刪除 CString 對象中的指定位置的字符,返回處理后的字符串長度;
CString str(_T(“abcd”));
int num = str.Delete(1, 3);//str == a, num == 1
⑤、字符串的提取:
Left、Mid、Right 三個函數分別實現從 CString 對象的 左、中、右 進行字符串的提取操作;
CString str(_T(“abcd”));
CString strResult = str.Left(2);//strResult == ab strResult = str.Mid(1);//strResult == bcd strResult = str.Mid(0, 2);//strResult == ab strResult = str.Right(2);//strResult == cd
⑥、單個字符的修改: GetAt、SetAt 可以獲取與修改 CString 對象中的單個 TCHAR 類型字符;
操作符也可以獲取 CString 對象中的單個字符,但為只讀的,不能進行修改;
CString str(_T(“abcd”));
str.SetAt(0, 'k');//str == kbck TCHAR ch = str.GetAt(2);//ch == c
⑦、其他類型與 CString 對象類型的轉換:
● 格式化字符串:Format 方法,實現從 int、long 等數值類型、TCHAR、TCHAR * 等類型向 CString 類型的轉換;
int num = 6;CString str;
str.Format(_T(“%d”), num);
● CString 類型向 int 等數值類型、TCHAR * 類型的轉換: TCHAR *pszBuf = str.GetBuffer();str.ReleaseBuffer();
TCHAR *p =(LPTSTR)(LPCTSTR)str;
CString str1(_T(“123”));int num = _ttoi(str1);
⑧、CString 對象的 Ansi 與 Unicode 轉換: 大家可以直接使用上節課給大家講解的方法,此外這里給大家介紹一種從 Ansi 轉換到 Unicode 的隱含方法:
//當前工程環境為Unicode CString str;str = “abc”;char *p = “defg”;str = p;
⑨、CString 對象字符串所占用的字節數: CString str = _T(“abc”);
錯誤的求法:sizeof(CString)、sizeof(str)
正確的求法:str.GetLength()*sizeof(TCHAR)
⑩、當作為 TCHAR * 類型傳參時,確保申請了足夠用的空間,比如使用 GetModuleFileName 函數
轉載]CString、TCHAR*、char*轉換
[轉載]CString、TCHAR*、char*轉換 char*、TCHAR*轉換CString CString str(****)下面詳細寫一下其它轉換
////////////////////////////// /* *********************************************************************** * 函數: TransCStringToTCHAR * 描述:將CString 轉換為 TCHAR* * 日期:
*********************************************************************** */ TCHAR* CPublic::CString2TCHAR(CString &str){ int iLen = str.GetLength();TCHAR* szRs = new TCHAR[iLen];lstrcpy(szRs, str.GetBuffer(iLen));str.ReleaseBuffer();return szRs;} /* *********************************************************************** * 函數: TCHAR2Char * 描述:將TCHAR* 轉換為 char* * 日期:
*********************************************************************** */ char* TCHAR2char(TCHAR* tchStr){ int iLen = 2*wcslen(tchStr);//CString,TCHAR漢字算一個字符,因此不用普通計算長度
char* chRtn = new char[iLen+1] wcstombs(chRtn,tchStr,iLen+1);//轉換成功返回為非負值 return chRtn;} /* *********************************************************************** * 函數: char2tchar * 描述:將 char* 轉換為 TCHAR* * 日期:
*********************************************************************** */ TCHAR *char2tchar(char *str){ int iLen = strlen(str);TCHAR *chRtn = new TCHAR[iLen+1];mbstowcs(chRtn, str, iLen+1);return chRtn;} /* *********************************************************************** * 函數: CString2char * 描述:將CString轉換為 char* * 日期:
*********************************************************************** */ char* CPublic::CString2char(CString &str){ int len = str.GetLength();char* chRtn =(char*)malloc((len*2+1)*sizeof(char));//CString的長度中漢字算一個長度
memset(chRtn, 0, 2*len+1);USES_CONVERSION;strcpy((LPSTR)chRtn,OLE2A(str.LockBuffer()));return chRtn;} //參考
/////////////////////// //Pocket PC上的UNICODE和ANSI字符串
//By Vassili Philippov, September 26, 2001.//楊方思歧 譯
//////////////////////// /* *********************************************************************** * 函 數 名:GetAnsiString * 描 述:將CString(unicode)轉換為char*(ANSI)* 參 數:CString &s 要轉換的CString * 返 回 值:返回轉換結果 * 創建日期:
* 最后修改:
*********************************************************************** */ char* GetAnsiString(const CString &s){ int nSize = 2*s.GetLength();char *pAnsiString = new char[nSize+1];wcstombs(pAnsiString, s, nSize+1);return pAnsiString;}
////////////////////////////////////////////////////////////////////////////////////////////// WideCharToMultiByte和MultiByteToWideChar函數的用法
支持Unicode編碼,需要多字節與寬字節之間的相互轉換
WideCharToMultiByte的代碼頁用來標記與新轉換的字符串相關的代碼頁。
MultiByteToWideChar的代碼頁用來標記與一個多字節字符串相關的代碼頁。
常用的代碼頁由CP_ACP和CP_UTF8兩個。
使用CP_ACP代碼頁就實現了ANSI與Unicode之間的轉換。
使用CP_UTF8代碼頁就實現了UTF-8與Unicode之間的轉換。
wstring AnsiToUnicode((const string& str){ int len = 0;
len = str.length();
int unicodeLen = ::MultiByteToWideChar(CP_ACP, 0, str.c_str(),-1,NULL,0);
wchar_t * pUnicode;
pUnicode = new wchar_t[unicodeLen+1];
memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t));
::MultiByteToWideChar(CP_ACP,0, str.c_str(),-1,(LPWSTR)pUnicode, unicodeLen);
wstring rt;rt =(wchar_t*)pUnicode;delete pUnicode;return rt;}
string UnicodeToAnsi(const wstring& str){
char* pElementText;int iTextLen;
// wide char to multi char
iTextLen = WideCharToMultiByte(CP_ACP, 0, str.c_str(),-1, NULL, 0, NULL, NULL);
pElementText = new char[iTextLen + 1];
memset((void*)pElementText, 0, sizeof(char)*(iTextLen + 1));
::WideCharToMultiByte(CP_ACP, 0, str.c_str(),-1, pElementText,iTextLen,NULL,NULL);
string strText;
strText = pElementText;
delete[] pElementText;
return strText;}
wstring UTF8ToUnicode((const string& str){ int len = 0;
len = str.length();
int unicodeLen = ::MultiByteToWideChar(CP_UTF8, 0, str.c_str(),-1,NULL,0);
wchar_t * pUnicode;
pUnicode = new wchar_t[unicodeLen+1];
memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t));
::MultiByteToWideChar(CP_UTF8,0, str.c_str(),-1,(LPWSTR)pUnicode, unicodeLen);
wstring rt;rt =(wchar_t*)pUnicode;delete pUnicode;return rt;}
string UnicodeToUTF8(const wstring& str){
char* pElementText;int iTextLen;
// wide char to multi char
iTextLen = WideCharToMultiByte(CP_UTF8, 0, str.c_str(),-1, NULL, 0, NULL, NULL);
pElementText = new char[iTextLen + 1];
memset((void*)pElementText, 0, sizeof(char)*(iTextLen + 1));
::WideCharToMultiByte(CP_UTF8, 0, str.c_str(),-1, pElementText,iTextLen,NULL,NULL);
string strText;
strText = pElementText;
delete[] pElementText;
return strText;}
第二篇:個人總結的VC編程技巧(范文模版)
1.等于號=表示賦值操作;= =表示邏輯操作。在使用if或(a= =b)時候需要注意。2.浮點型數據判斷相等使用fabs(a-b)<0.00001f 3.數組使用SetSize(nSize)之前需要清空RemoveAll()4.修改資源編譯后exe不執行處理方法:選中資源,將其Property屬性對話框中,修改其File Name屬性,改名,保存后會生成其他文件名
5.對于繪制文字TextOut(),在SetMapMode(MM_LOMETRIC)后,需要重新選擇字體,否則打印預覽時候會出現字體亂碼現象。
6.賦值型條件語句需要加括號,否則先執行運算符,再執行條件語句,如int a=b+c>0 ? 1 :-1,時,將先執行(b+c)。
MFC的消息處理函數
1.AfxWndProc()該函數負責接收消息,找到消息所屬的CWnd對象,然后調用AfxCallWndProc
2.AfxCallWndProc()該函數負責保存消息(保存的內容主要是消息標識符和消息參數)供應用程序以后使用,然后調用WindowProc()函數
3.WindowProc()該函數負責發送消息到OnWndMsg()函數,如果未被處理,則調用DefWindowProc()函數
4.OnWndMsg()該函數的功能首先按字節對消息進行排序,對于WM_COMMAND消息,調用OnCommand()消息響應函數,對于WM_NOTIFY消息調用OnNotify()消息響應函數。任何被遺漏的消息將是一個窗口消息。OnWndMsg()函數搜索類的消息映像,以找到一個能處理任何窗口消息的處理函數。如果OnWndMsg()函數不能找到這樣的處理函數的話,則把消息返回到WindowProc()函數,由它將消息發送給DefWindowProc()函數
5.OnCommand()該函數查看這是不是一個控件通知(lParam參數不為NULL,如果lParam參數為空的話,說明該消息不是控件通知),如果它是,OnCommand()函數會試圖將消息映射到制造通知的控件;如果他不是一個控件通知(或者如果控件拒絕映射的消息)OnCommand()就會調用OnCmdMsg()函數
6.OnCmdMsg()根據接收消息的類,OnCmdMsg()函數將在一個稱為命令傳遞(Command Routing)的過程中潛在的傳遞命令消息和控件通知。例如:如果擁有該窗口的類是一個框架類,則命令和通知消息也被傳遞到視圖和文檔類,并為該類尋找一個消息處理函數
MFC應用程序創建窗口的過程
1.PreCreateWindow()該函數是一個重載函數,在窗口被創建前,可以在該重載函數中改變創建參數(可以設置窗口風格等等)
2.PreSubclassWindow()這也是一個重載函數,允許首先子分類一個窗口
3.OnGetMinMaxInfo()該函數為消息響應函數,響應的是WM_GETMINMAXINFO消息,允許設置窗口的最大或者最小尺寸
4.OnNcCreate()該函數也是一個消息響應函數,響應WM_NCCREATE消息,發送消息以告訴窗口的客戶區即將被創建
5.OnNcCalcSize()該函數也是消息響應函數,響應WM_NCCALCSIZE消息,作用是允許改變窗口客戶區大小
6.OnCreate()該函數也是一個消息響應函數,響應WM_CREATE消息,發送消息告訴一個窗口已經被創建
7.OnSize()該函數也是一個消息響應函數,響應WM_SIZE消息,發送該消息以告訴該窗口大小已經發生變化
8.OnMove()消息響應函數,響應WM_MOVE消息,發送此消息說明窗口在移動
9.OnChildNotify()該函數為重載函數,作為部分消息映射被調用,告訴父窗口即將被告知一個窗口剛剛被創建
MFC應用程序關閉窗口的順序(非模態窗口)
1.OnClose()消息響應函數,響應窗口的WM_CLOSE消息,當關閉按鈕被單擊的時候發送此消息
2.OnDestroy()消息響應函數,響應窗口的WM_DESTROY消息,當一個窗口將被銷毀時,發送此消息
3.OnNcDestroy()消息響應函數,響應窗口的WM_NCDESTROY消息,當一個窗口被銷毀后發送此消息
4.PostNcDestroy()重載函數,作為處理OnNcDestroy()函數的最后動作,被CWnd調用
MFC應用程序中打開模式對話框的函數調用順序
1.DoModal()重載函數,重載DoModal()成員函數 2.PreSubclassWindow()重載函數,允許首先子分類一個窗口
3.OnCreate()消息響應函數,響應WM_CREATE消息,發送此消息以告訴一個窗口已經被創建
4.OnSize()消息響應函數,響應WM_SIZE消息,發送此消息以告訴窗口大小發生變化
5.OnMove()消息響應函數,響應WM_MOVE消息,發送此消息,以告訴窗口正在移動
6.OnSetFont()消息響應函數,響應WM_SETFONT消息,發送此消息,以允許改變對話框中控件的字體
7.OnInitDialog()消息響應函數,響應WM_INITDIALOG消息,發送此消息以允許初始化對話框中的控件,或者是創建新控件
8.OnShowWindow()消息響應函數,響應WM_SHOWWINDOW消息,該函數被ShowWindow()函數調用
9.OnCtlColor()消息響應函數,響應WM_CTLCOLOR消息,被父窗口發送已改變對話框或對話框上面控件的顏色
10.OnChildNotify()重載函數,作為WM_CTLCOLOR消息的結果發送
MFC應用程序中關閉模式對話框的順序
1.OnClose()消息響應函數,響應WM_CLOSE消息,當“關閉”按鈕被單擊的時候,該函數被調用
2.OnKillFocus()消息響應函數,響應WM_KILLFOCUS消息,當一個窗口即將失去鍵盤輸入焦點以前被發送
3.OnDestroy()消息響應函數,響應WM_DESTROY消息,當一個窗口即將被銷毀時,被發送
4.OnNcDestroy()消息響應函數,響應WM_NCDESTROY消息,當一個窗口被銷毀以后被發送
5.PostNcDestroy()重載函數,作為處理OnNcDestroy()函數的最后動作被CWnd調用
打開無模式對話框的順序
1.PreSubclassWindow()重載函數,允許用戶首先子分類一個窗口 2.OnCreate()消息響應函數,響應WM_CREATE消息,發送此消息以告訴一個窗口已經被創建
3.OnSize()消息響應函數,響應WM_SIZE消息,發送此消息以告訴窗口大小發生變化
4.OnMove()消息響應函數,響應WM_MOVE消息,發送此消息以告訴窗口正在移動
5.OnSetFont()消息響應函數,響應WM_SETFONT消息,發送此消息以允許改變對話框中控件的字體
以上這些的執行都是按給定的順序執行!
只有清楚的了解應用程序的執行順序,才能在編寫代碼的時候知道,在什么時候應該執行什么,以及在什么地方該處理什么!
這只是本人總結的一點小小的經驗,希望能對MFC的初學者有所幫助!MFC應用程序中處理消息的順序
1.AfxWndProc()該函數負責接收消息,找到消息所屬的CWnd對象,然后調用AfxCallWndProc
2.AfxCallWndProc()該函數負責保存消息(保存的內容主要是消息標識符和消息參數)供應用程序以后使用,然后調用WindowProc()函數
3.WindowProc()該函數負責發送消息到OnWndMsg()函數,如果未被處理,則調用DefWindowProc()函數
4.OnWndMsg()該函數的功能首先按字節對消息進行排序,對于WM_COMMAND消息,調用OnCommand()消息響應函數,對于WM_NOTIFY消息調用OnNotify()消息響應函數。任何被遺漏的消息將是一個窗口消息。OnWndMsg()函數搜索類的消息映像,以找到一個能處理任何窗口消息的處理函數。如果OnWndMsg()函數不能找到這樣的處理函數的話,則把消息返回到WindowProc()函數,由它將消息發送給DefWindowProc()函數
5.OnCommand()該函數查看這是不是一個控件通知(lParam參數不為NULL,如果lParam參數為空的話,說明該消息不是控件通知),如果它是,OnCommand()函數會試圖將消息映射到制造通知的控件;如果他不是一個控件通知(或者如果控件拒絕映射的消息)OnCommand()就會調用OnCmdMsg()函數
6.OnCmdMsg()根據接收消息的類,OnCmdMsg()函數將在一個稱為命令傳遞(Command Routing)的過程中潛在的傳遞命令消息和控件通知。例如:如果擁有該窗口的類是一個框架類,則命令和通知消息也被傳遞到視圖和文檔類,并為該類尋找一個消息處理函數
MFC應用程序創建窗口的過程
1.PreCreateWindow()該函數是一個重載函數,在窗口被創建前,可以在該重載函數中改變創建參數(可以設置窗口風格等等)
2.PreSubclassWindow()這也是一個重載函數,允許首先子分類一個窗口
3.OnGetMinMaxInfo()該函數為消息響應函數,響應的是WM_GETMINMAXINFO消息,允許設置窗口的最大或者最小尺寸
4.OnNcCreate()該函數也是一個消息響應函數,響應WM_NCCREATE消息,發送消息以告訴窗口的客戶區即將被創建
5.OnNcCalcSize()該函數也是消息響應函數,響應WM_NCCALCSIZE消息,作用是允許改變窗口客戶區大小
6.OnCreate()該函數也是一個消息響應函數,響應WM_CREATE消息,發送消息告訴一個窗口已經被創建
7.OnSize()該函數也是一個消息響應函數,響應WM_SIZE消息,發送該消息以告訴該窗口大小已經發生變化
8.OnMove()消息響應函數,響應WM_MOVE消息,發送此消息說明窗口在移動
9.OnChildNotify()該函數為重載函數,作為部分消息映射被調用,告訴父窗口即將被告知一個窗口剛剛被創建
MFC應用程序關閉窗口的順序(非模態窗口)
1.OnClose()消息響應函數,響應窗口的WM_CLOSE消息,當關閉按鈕被單擊的時候發送此消息
2.OnDestroy()消息響應函數,響應窗口的WM_DESTROY消息,當一個窗口將被銷毀時,發送此消息
3.OnNcDestroy()消息響應函數,響應窗口的WM_NCDESTROY消息,當一個窗口被銷毀后發送此消息
4.PostNcDestroy()重載函數,作為處理OnNcDestroy()函數的最后動作,被CWnd調用
MFC應用程序中打開模式對話框的函數調用順序
1.DoModal()重載函數,重載DoModal()成員函數 2.PreSubclassWindow()重載函數,允許首先子分類一個窗口
3.OnCreate()消息響應函數,響應WM_CREATE消息,發送此消息以告訴一個窗口已經被創建
4.OnSize()消息響應函數,響應WM_SIZE消息,發送此消息以告訴窗口大小發生變化
5.OnMove()消息響應函數,響應WM_MOVE消息,發送此消息,以告訴窗口正在移動
6.OnSetFont()消息響應函數,響應WM_SETFONT消息,發送此消息,以允許改變對話框中控件的字體
7.OnInitDialog()消息響應函數,響應WM_INITDIALOG消息,發送此消息以允許初始化對話框中的控件,或者是創建新控件
8.OnShowWindow()消息響應函數,響應WM_SHOWWINDOW消息,該函數被ShowWindow()函數調用
9.OnCtlColor()消息響應函數,響應WM_CTLCOLOR消息,被父窗口發送已改變對話框或對話框上面控件的顏色
10.OnChildNotify()重載函數,作為WM_CTLCOLOR消息的結果發送
MFC應用程序中關閉模式對話框的順序
1.OnClose()消息響應函數,響應WM_CLOSE消息,當“關閉”按鈕被單擊的時候,該函數被調用
2.OnKillFocus()消息響應函數,響應WM_KILLFOCUS消息,當一個窗口即將失去鍵盤輸入焦點以前被發送 3.OnDestroy()消息響應函數,響應WM_DESTROY消息,當一個窗口即將被銷毀時,被發送
4.OnNcDestroy()消息響應函數,響應WM_NCDESTROY消息,當一個窗口被銷毀以后被發送
5.PostNcDestroy()重載函數,作為處理OnNcDestroy()函數的最后動作被CWnd調用
打開無模式對話框的順序
1.PreSubclassWindow()重載函數,允許用戶首先子分類一個窗口
2.OnCreate()消息響應函數,響應WM_CREATE消息,發送此消息以告訴一個窗口已經被創建
3.OnSize()消息響應函數,響應WM_SIZE消息,發送此消息以告訴窗口大小發生變化
4.OnMove()消息響應函數,響應WM_MOVE消息,發送此消息以告訴窗口正在移動
5.OnSetFont()消息響應函數,響應WM_SETFONT消息,發送此消息以允許改變對話框中控件的字體
MFC的一些主要成員函數
CWinThread::m_pMainWnd:保存指向應用程序的主窗口指針。CWinThread::GetMainWnd:查詢指向線程主窗口的指針。CWinThread::InitInstance:重載以實現線程實例的初始化。AfxGetApp:獲得指向CWinApp對象的指針。
AfxGetInstanceHandle:獲得當前應用程序實例的句柄。AfxGetResourceHandle:獲得應用程序資源的句柄。
AfxGetAppName:獲得一個字符串指針,其中包含了應用程序的名字。另外,如果你擁有一個指向CWinApp對象的指針,可以通過m_pszExename來獲得應用程序的名字。
CDocument::IsModified:標識文檔從最近一次保存以來是否被修改過。CDocument::UpdateAllViews:通知所有視圖文檔已被修改的消息。CWnd::m_hWnd:指明與這個CWnd對象相關聯的HWND句柄。CWnd::Create:創建并初始化與CWnd對象相關聯的子窗口。
CWnd::PreCreateWindow:在與CWnd對象相關聯的窗口被創建之前調用。CWnd::IsWindowEnabled:確定一個窗口是否允許鼠標和鍵盤輸入。CWnd::EnableWindow:允許或禁止鼠標和鍵盤輸入。CWnd::SetWindowPos:改變子窗口、彈出窗口和頂層窗口的大小、位置以及順序。CWnd::GetDlgItem:獲得指定的對話框中具有指定ID的控件。CWnd::UpdateData:初始化對話框或獲得對話框中的數據。CWnd::GetWindowRect:獲得CWnd的屏幕坐標。CWnd::GetDC:獲得客戶區的設備環境。
CWnd::RedrawWindow:更新客戶區中的指定矩形或區域。CWnd::UpdateWindow:更新客戶區。
CWnd::Invalidate:使整個客戶區無效。CWnd::ShowWindow:顯示或隱藏窗口。
CWnd::ClientToScreen:將給定點或顯示器上矩形的客戶區坐標轉換為屏幕坐標。
CWnd::ScreenToClient:將給定點或顯示器上矩形的屏幕坐標轉換為客戶坐標。CWnd::SetWindowText:將窗口的文本或標題文字(如果有)設為指定的文本。CWnd::SetFont:設置當前字體。
CWnd::GetDlgItemInt:將給定對話框中控件的文本轉換為整數。
CWnd::SetTimer:安裝一個系統定時器,當它被激活時,發送一個WM_TIMER消息。
CWnd::KillTimer:銷毀一個系統定時器。CWnd::FlashWindow:使窗口閃爍一次。CWnd::MessageBox:創建并顯示一個窗口,其中包含了應用程序提供的消息和標題
第三篇:實驗一 VC開發環境的使用和常用算法的編程概要
實驗一 VC開發環境的使用和常用算法的編程
一、實驗目的
熟悉VC++6.0的集成開發環境,學會用它編寫、調試、運行程序。
二、實驗要求
對VC++6.0集成開發環境進行操作,用它編寫、調試和運行常用的程序,初步掌握使用方法;在課后編程題目中任選一題,編好程序,上機進行調試和運行,同時養成好的程序書寫風格。
三、實驗報告要求
1.寫出編程題目;
2.寫出題目分析(提取出算法和設計思路); 3.寫出源代碼;
4.寫出多次運行的記錄或出錯調試信息(上機時寫); 5.寫出實驗后的心得體會(上機后寫)。
四、上交源代碼要求
1.從網絡提交;
2.文件名包含:編程題目名稱、班級、姓名; 3.第二周前提交。
第四篇:刀具和編程總結
① 白鋼刀(即高速鋼刀具)因其通體銀白色而得名,主要用于直壁加工。白鋼刀價格便宜,但切削壽命短、吃刀量小、進給速度低、加工效率低,在數控加工中較少使用。
② 飛刀(即鑲嵌式刀具)主要為機夾式可轉位刀具,這種刀具剛性好、切削速度高,在數控加工中應用非常廣泛,用于模胚的開粗、平面和曲面粗精加工效果均很好。
③ 合金刀(通常指的是整體式硬質合金刀具)精度高、切削速度高,但價格昂貴,一般用于精加工。
數控刀具與普通機床上所用的刀具相比,有以下不同的要求。
(1)剛性好(尤其是粗加工刀具)、精度高、抗振及熱變形小。
(2)互換性好,便于快速換刀。
(3)壽命高,切削性能穩定、可靠。
(4)刀具的尺寸便于調整,以減少換刀調整時間。
(5)刀具應能可靠地斷屑或卷屑,以利于切屑的排除。(6)系列化、標準化,以利于編程和刀具管理。
① 刀具直徑越大,轉速越慢;同一類型的刀具,刀桿越長,吃刀量就要減小,否則容易彈刀而產生過切。
② 白鋼刀轉速不可過快,進給速度不可過大。
③ 白鋼刀容易磨損,開粗時少用白鋼刀。
① 以上的飛刀參數只能作為參考,因為不同的飛刀材料其參數值也不相同,不同的刀具廠生產的飛刀其長度也略有不同。另外,刀具的參數值也因數控銑床或加工中心的性能和加工材料的不同而不同,所以刀具的參數一定要根據工廠的實際情況來設定。
② 飛刀的剛性好,吃刀量大,最適合模胚的開粗。另外,飛刀精加工陡峭面的質量也非常好。③ 飛刀主要是鑲刀粒的,沒有側刃,① 合金刀剛性好,不易產生彈刀,用于精加工模具的效果最好。
② 合金刀和白鋼刀一樣有側刃,精銑銅公直壁時往往使用其側刃。
① 刀具的名稱一般根據刀具的直徑和圓角半徑來定義,例如,直徑為30,圓角半徑為5的飛刀,其名稱定義為D30R5;直徑為12的平底刀,其名稱定義為D12;半徑為5的球刀,其名稱定義為R5。
② 輸入刀具名稱時,只需要輸入小寫字母即可,系統會自動將字母轉為大寫狀態。③ 設置刀具參數時,只需要設置刀具的直徑和底圓角半徑即可,其他參數按默認即可。加工時,編程人員還需要編寫加工工藝說明卡,注明刀具的類型和實際長度。
機床坐標一般在工件頂面的中心位置,所以創建機床坐標時,最好先設置好當前坐標,然后在〖CSYS〗對話框中設置“參考”為WCS。
加工模具時,其開粗余量多設為0.5,但如果是加工銅公余量就不一樣了,因為銅公(銅公是火花機放電加工用的電極)最后的結果是要留負余量的。
模具加工要求越高時,其對應的公差值就應該越小。
進行實體模擬驗證前,必須設置加工工件和毛坯,否則無法進行實體模擬。
第五篇:編程題總結
C作業匯總
1.short a,b=32767;/*short類型在內存中占2B*/ a=b+1;問:a的值是多少?并分析原因。
2.有一4位數整數,假設用abcd表示,請把這個4位數的每個數位用表達式表示出來。3.從鍵盤輸入圓的半徑r,計算并輸出圓的面積s(要求:半徑r定義為float型;圓周率?定義為符號常量;面積s保留2位小數)#define PI 3.14159 #include
4.輸入m>=3的正整數,判斷m是否素數。畫出算法流程圖及NS圖
5.有一函數:
x?1 ?x ?y??2x?1 1?x?10
?3x-11 x?10 ?寫一段程序,輸入x,輸出y值。
要求x,y聲明為float類型,y保留2位小數。#include
if(x<1)
y=x;else
if(x<10)
y=2*x-1;
else
y=3*x-11;
}
printf(“y=%.2fn”,y);
x3x5x7x9?????,6.課后習題4.17(P159)利用泰勒級數sinx?x?計算sinx的3!5!7!9!值。要求最后一項的絕對值小于10,并統計出此時累加了多少項。#include
/*記錄每個項數*/ int n=1,count=0;/*count記錄累加了多少項*/
printf(“請輸入x值(弧度):n”);scanf(“%f”,&x);
term=x/n;while(fabs(term)>1e-5)
/* while循環*/ {
sinx+=term;
count++;
n+=2;
term=-term*x*x/((n-1)*n);}
/* do
/*do while循環*/ {
sinx+=term;
count++;
n+=2;
term=-term*x*x/((n-1)*n);}while(fabs(term)>1e-5);
*/
printf(“sin(%.2f)=%.4fn”,x,sinx);printf(“一共累加了:%d項。n”,count);}
7.用牛頓迭代法求下面方程在1.5附近的根:
2x?4x?3x?6?0 32?5
牛頓迭代公式:
x1?x0?f(x0)f?(x0)
#include
/*y1記錄f(x0),y2記錄f(x0)的導數*/
do {
x0=x1;
y1=2*x0*x0*x0-4*x0*x0+3*x0-6;
y2=6*x0*x0-8*x0+3;
x1=x0-y1/y2;}while(fabs(x1-x0)>1e-5);
printf(“the root is:%.2fn”,x1);}
8.寫一函數,輸入一個16進制整數,輸出相應的10進制數。例:從鍵盤輸入2a,輸出結果是42。
要求:若輸入數據不合法,則輸出提示信息。如輸入了35g,輸出“您輸入的16進制數不合法!”。
#include
printf(“請輸入一個16進制數字:n”);
while((c=getchar())!='n'){
if(c>='0' && c<='9')
sum=sum*16+c-'0';
else
if(c>='a' && c<='f')
sum=sum*16+c-87;
else
if(c>='A' && c<='F')
sum=sum*16+c-55;
else
{
printf(“您輸入的16進制不合法.n”);
exit(0);
} }
printf(“相應的10進制數是:%dn”,sum);} 方法2:用字符串處理的方式 #include
printf(“請輸入一個16進制數字:n”);gets(str);
for(i=0;str[i];i++){
if(str[i]>='0' && str[i]<='9')
sum=sum*16+str[i]-'0';
else
if(str[i]>='a' && str[i]<='f')
sum=sum*16+str[i]-87;
else
if(str[i]>='A' && str[i]<='F')
sum=sum*16+str[i]-55;
else
{
printf(“您輸入的16進制不合法.n”);
exit(0);
} }
printf(“相應的10進制數是:%dn”,sum);} 方法3:用字符數組及指針處理的方式 #include
{ char str[20],*p=str;int sum=0;
printf(“請輸入一個16進制數字:n”);gets(p);
while(*p){
if(*p>='0' && *p<='9')
sum=sum*16+*p-'0';
else
if(*p>='a' && *p<='f')
sum=sum*16+*p-87;
else
if(*p>='A' && *p<='F')
sum=sum*16+*p-55;
else
{
printf(“您輸入的16進制不合法.n”);
exit(0);
}
p++;}
printf(“相應的10進制數是:%dn”,sum);} 9.編寫一個小函數,其功能是計算兩個整數的平均值,該函數要在主函數中調用。
#include
avg=average(x,y);
printf(“%d,%d的平均值是:%.2fn”,x,y,avg);}
float average(int x,int y)
{ return(x+y)/2.0;}
10.有N(N用宏定義為符號常量)個元素的一維整型數組,該數組中各元素值從鍵盤隨機輸入。然后,將這個整型數組中的值逆序存放。例如,原來5個元素的順序為8、1、4、6、5,逆序之后各元素的值是5、6、4、1、8 #define N 5 #include
printf(“輸入%d個整數,用空格或回車分隔:n”,N);for(i=0;i scanf(“%d”,&a[i]); printf(“數組原來的值是:n”);for(i=0;i printf(“%dt”,a[i]); for(i=0;i t=a[i]; a[i]=a[N-1-i]; a[N-1-i]=t;} printf(“n逆序之后數組的值是:n”);for(i=0;i printf(“%dt”,a[i]); printf(“n”);} 11.有N(N用宏定義為符號常量)個元素的一維整型數組,該數組中各元素值從鍵盤隨機輸入。然后,對該數組元素進行由小到大排序(要求,該功能用函數實現),輸出數組中各元素值。最后,從鍵盤隨機輸入一個整數,并把該整數插入上述數組中(該功能用函數實現),使得插入該整數后的數組仍然有序,輸出數組中各元素的值。#define N 5 #include int i,x;void sort(int array[],int n);void insert(int array[],int n,int x); printf(“輸入%d個整數,用空格或回車分隔:n”,N);for(i=0;i scanf(“%d”,&a[i]); sort(a,N); /*調用sort對數組進行排序*/ printf(“n升序排序之后數組的值是:n”);for(i=0;i printf(“%d ”,a[i]); printf(“n輸入一個x值插入到數組中:n”);scanf(“%d”,&x); insert(a,N,x); printf(“n插入%d之后數組的值是:n”,x);for(i=0;i printf(“%d ”,a[i]); printf(“n”);} void sort(int array[],int n)/*用選擇法對數組array升序排序*/ { int i,j,t,min; for(i=0;i min=i; for(j=i+1;j if(array[j] min=j; if(min!=i) { t=array[i]; array[i]=array[min]; array[min]=t; } } } void insert(int array[],int n,int x){ int i,pos; for(i=0;i pos=i; for(i=n-1;i>=pos;i--) array[i+1]=array[i]; array[pos]=x;} 12.有一整型數組,N(N用宏定義為符號常量)個元素,該數組中各元素值從鍵盤隨機輸入。從鍵盤隨機輸入一個整數x,刪除該數組中值與x相同的所有元素(該功能用函數實現),輸出數組中各元素的值。#define N 5 #include printf(“輸入%d個整數,用空格或回車分隔:n”,N);for(i=0;i scanf(“%d”,&a[i]); printf(“數組原來的值是:n”);for(i=0;i printf(“%dt”,a[i]); printf(“n請輸入要刪除的值x:n”);scanf(“%d”,&x); n=delet(a,N,x); /*n值是刪除與x相同的元素后,數組剩余元素的個數。*/ printf(“刪除%d之后數組的值是:n”,x);for(i=0;i printf(“%d ”,a[i]); printf(“n”); } int delet(int a[],int n,int x){ int i,j; for(i=0,j=0;i if(a[i]!=x) a[j++]=a[i]; return j;} 13.從鍵盤隨機輸入一字符串,將所有ASCII值為偶數的字符輸出。例如:輸入abc123,輸出結果是b2(因為b的ASCII值是98,2的ASCII值是50,其他字符的ASCII值都是奇數) #include printf(“輸入字符串:n”);gets(str); printf(“ASCII碼是偶數的字符有:”);for(i=0;str[i];i++) if(str[i]%2==0)putchar(str[i]); printf(“n”);} 14.從鍵盤輸入兩個字符串s1,s2,把s2連接到s1的末尾。不能用strcat函數 #include printf(“輸入兩個字符串,輸入回車鍵結束:n”);gets(str1);gets(str2); mystrcat(str1,str2); printf(“連接在一起的字符串是:n”);puts(str1); } void mystrcat(char *p1,char *p2){ while(*p1)p1++;while(*p2) *p1++=*p2++;*p1='
主站蜘蛛池模板:
真实国产乱人伦在线视频播放|
无码男男做受g片在线观看视频|
国产亚洲视频在线观看网址|
久久久亚洲欧洲日产国码农村|
久久99精品国产99久久6男男|
日韩精品无码熟人妻视频|
99久久国产自偷自偷免费一区|
日韩av无码一区二区三区不卡毛片|
国产精品高潮呻吟av久久|
久久伊人精品一区二区三区|
夜夜爽久久精品国产三级|
天堂亚洲2017在线观看|
亚洲 自拍 另类小说综合图区|
韩日美无码精品无码|
欧美日韩在手机线旡码可下载|
亚洲成av人在线观看网址|
草草浮力地址线路①屁屁影院|
欧美亚洲高清国产|
久久青草精品38国产|
亚洲中文字幕aⅴ无码天堂|
亚洲精品久久久久国产剧8|
国产精品久久久天天影视香蕉|
男女性高爱潮免费观看|
免费午夜爽爽爽www视频十八禁|
高潮毛片又色又爽免费|
av在线中文字幕不卡电影网|
久久国产精品亚洲艾草网|
50岁人妻丰满熟妇αv无码区|
久久久久久国产精品无码超碰|
131美女mm爱做爽爽爽视频|
欧美日韩精品一区二区视频|
东京热无码av男人的天堂|
东京热久久综合久久88|
精品国产精品国产偷麻豆|
国产精品人妻一码二码尿失禁|
日韩一区二区在线观看视频|
亚洲精品一区二区三区无码a片|
无遮挡h肉动漫在线观看|
欧美丰满熟妇vaideos|
亚洲欧美不卡高清在线观看|
中文字幕乱偷无码av先锋|