1. 程式人生 > >CString轉為char* unicode,MFC中的使用

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. 一、設定靜態文字  大小 字型 顏色  
  2. 1.首先,在對話方塊上新增一個Static控制元件,關聯一個控制變數m_static(不是Value,是Control)  
  3. 2.宣告變數  
  4.    private:    
  5.      CFont m_Font;   
  6. 3.然後,在對話方塊初始化中新增下列程式碼即可  
  7. BOOL CTransstaDlg::OnInitDialog()  
  8. {  
  9.     //設定Static字型  
  10.     m_Font.CreatePointFont(300, "Arial", NULL);  
  11.     m_static.SetFont(&m_Font,true);  
  12.     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
		{
		}