CString轉為char* unicode,MFC中的使用
MFC中新增圖片,現將圖片加入到資源
////加入升級成功的圖片
//CBitmap bitmap;
//bitmap.LoadBitmapW(IDI_ICON1);
//CStatic *p = (CStatic*)GetDlgItem(showPic);
//p->ModifyStyle(0xf, SS_BITMAP | SS_CENTERIMAGE);
////將圖片設定到Picture控制元件上
//p->SetBitmap(bitmap);
..給一個文字框賦值
GetDlgItem(IDC_EDIT_value)->SetWindowText(_T("Wcnt"));
..對話方塊
CString FilePathName;
CFileDialog dlg(TRUE);
if (dlg.DoModal() == IDOK)
{
FilePathName = dlg.GetPathName(); //這樣可以開啟並獲得你選擇檔案的完整路徑
}
GetDlgItem(IDC_EDIT3)->SetWindowText(FilePathName);
.
BOOL isOpen = TRUE; //是否開啟(否則為儲存) CString defaultDir = L"E:\\FileTest"; //預設開啟的檔案路徑 CString fileName = L""; //預設開啟的檔名 CString filter = L"檔案 ( *.hex)|*.hex||"; //檔案過慮的型別 CFileDialog openFileDlg(isOpen, defaultDir, fileName, OFN_HIDEREADONLY | OFN_READONLY, filter, NULL); openFileDlg.GetOFN().lpstrInitialDir = L"E:\\FileTest\\test.doc"; INT_PTR result = openFileDlg.DoModal(); CString filePath; if (result == IDOK) { filePath = openFileDlg.GetPathName(); } CWnd::SetDlgItemTextW(IDC_EDIT3, filePath);
..typedef char * LPSTR ,型別重新命名,CString轉為char* Unicode
BOOL isOpen = TRUE; //是否開啟(否則為儲存) CString defaultDir = L"E:\\FileTest"; //預設開啟的檔案路徑 CString fileName = L""; //預設開啟的檔名 CString filter = L"檔案 ( *.hex)|*.hex||"; //檔案過慮的型別 CFileDialog openFileDlg(isOpen, defaultDir, fileName, OFN_HIDEREADONLY | OFN_READONLY, filter, NULL); openFileDlg.GetOFN().lpstrInitialDir = L"E:\\FileTest\\test.doc"; INT_PTR result = openFileDlg.DoModal(); CString filePath; if (result == IDOK) { filePath = openFileDlg.GetPathName(); } CWnd::SetDlgItemTextW(IDC_EDIT3, filePath); int ALength = WideCharToMultiByte(CP_ACP, 0, filePath, -1, NULL, 0, NULL, NULL); LPSTR pszA = (LPSTR)_alloca(ALength + 1); WideCharToMultiByte(CP_ACP, 0, filePath, -1, pszA, ALength, NULL, NULL); pszA[ALength] = 0; CString str(pszA); //將Cstring賦值給char* 或者char[] //apGetHexFilePath = (LPSTR)(LPCTSTR)filePath; //指向了首地址 //上面這種強制型別轉換隻會返回第一個字元 apGetHexFilePath = pszA;
。CString的用法
在使用MFC的過程中,不可避免的要使用CString型別對字串進行處理,特別常用的是CString與char*等型別的轉換,現將平時常用的方法整理如下。
1.CString型別的初始化
CString str;
CString str1(L"abc");
CString str2 = _T("defg");
2.CString型別字串的基本操作
獲取字串的長度:GetLength();
是否為空,即不含字元:IsEmpty();
清空字串:Empty();
大小寫轉換:MakeUpper()、MakeLower()
轉換字串中字元的順序:MakeReverse()
字串的連線:+、+=
字串的比較:==、!=、Compare(區分大小寫)、CompareNoCase(不區分大小寫)
3.字串的查詢
Find():從指定位置開始查詢指定的字元或者字串,返回其位置,找不到返回 -1。
ReverseFind():從字串末尾開始查詢指定的字元,返回其位置,找不到返回 -1,雖然是從後向前查詢,但是位置為從開始算起。
FindOneOf():查詢引數中給定字串中的任意字元,返回第一次出現的位置,找不到返回-1。
4.字串的替換和刪除
Replace():替換 CString 物件中的指定的字元或者字串,返回替換的個數,無匹配字元返回0。
Remove():刪除CString 物件中的指定字元,返回刪除字元的個數,有多個時都會刪除。
Delete():刪除 CString 物件中的指定位置的字元,返回處理後的字串長度。
5.字串的提取
Left(字元數量 ):從左邊提取若干字元。
Mid(起始位置,字元數 ):從指定位置開始提取若干字元,字元數若省略則提取到字串結尾處。
Right(字元數量 ):從右邊提取若干字元。
以上函式分別從字串的左中右實現對字串的提取操作。
示例:
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
6.型別轉換
int、char*等型別向CString型別轉換時使用CString的Format()函式
char*型別的可以直接賦值給CString型別
CString str;
str = "abc";
char *p = "defg";
str = p;
CString轉換成char*
CString g_str;
USES_CONVERSION;
char *
char *str = T2A(g_str);
或
char *str =g_str.GetBuffer(g_str.GetLength());
CString型別轉換成int 型別
CString str1(_T("123"));
int num = _ttoi(str1);
1、將CString型別轉為int型
//在這裡判斷下版本資訊,是否決定要繼續升級,將版本號轉為了16進位制,3002(十進位制)--》bba(16進位制)
uint32_t firversion = _ttoi(firVersionComp);
uint32_t devversion = _ttoi(deviceVersionComp);
2、CString賦初值
CString firVersionComp=_T("0.0.0.0");
CString deviceVersionComp=_T("0.0.0.0");
3、
1. 在對話方塊的類中新增兩個變數.
方法:在classview選項卡中,選擇CTestDlg,右鍵,add member variable.
CBrush m_brush;
CFont m_font;
在OnInitDialog()函式中新增:
// TODO: ……
m_font.CreatePointFont(150,"華文行楷");//代表15號字型,華文行楷
m_brush.CreateSolidBrush(RGB(0,255,0));//畫刷為綠色
2 新增WM_CTLCOLOR 訊息響應,新增的方法為:
add windows message handler->WM_CTLCOLOR->add and edit
3 在HBRUSH CTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 函式中的todo後新增程式碼,即:
,
HBRUSH CYourDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
if (pWnd->GetDlgCtrlID() == IDC_STATICText)
{
pDC->SetBkColor(RGB(0,255,0));//背景色為綠色
pDC->SetTextColor(RGB(255, 0, 0));//文字為紅色
pDC->SelectObject(&m_font);//文字為15號字型,華文行楷
return m_brush;
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
4、
- 一、設定靜態文字 大小 字型 顏色
- 1.首先,在對話方塊上新增一個Static控制元件,關聯一個控制變數m_static(不是Value,是Control)
- 2.宣告變數
- private:
- CFont m_Font;
- 3.然後,在對話方塊初始化中新增下列程式碼即可
- BOOL CTransstaDlg::OnInitDialog()
- {
- //設定Static字型
- m_Font.CreatePointFont(300, "Arial", NULL);
- m_static.SetFont(&m_Font,true);
- m_static.SetWindowText("100");
5、MB_ICONEXCLAMATION:一個驚歎號出現在訊息框
MB_ICONWARNING:一個驚歎號出現在訊息框
MB_ICONINFORMATION:一個圓圈中小寫字母i組成的圖標出現在訊息框
MB_ICONASTERISK:一個圓圈中小寫字母i組成的圖標出現在訊息框
MB_ICONQUESTION:一個問題標記圖標出現在訊息框
MB_ICONSTOP:一個停止訊息圖標出現在訊息框
MB_ICONERROR:一個停止訊息圖標出現在訊息框
MB_ICONHAND:一個停止訊息圖標出現在訊息框
CString msg;
msg.Format(L"The current version is %s, \n Do you want to upgrade to %s?", DeviceVersion,firVersion);
AfxMessageBox(msg, MB_OKCANCEL | MB_ICONQUESTION);
//int nResult = AfxMessageBox(L"Abc", 1, 0);
if(AfxMessageBox(L"Abc", 1, 0) == IDOK)
{
}
// Do something if you choose is OK.
else
// Do something if you choose CANCEL
{
}