簡體   English   中英

在GetDlgItem()之后修剪CString

[英]Trim CString after GetDlgItem()

希望有人可以幫助我解決這個問題!

我有一個對話框,其中包含一些用數據填充的組合框,用戶應填寫這些數據,然后單擊“保存”。 單擊“保存”時,程序將創建一個包含所選數據的輸出文件。

我的問題是在保存文件之前,需要修剪連字符處的所有內容!

組合框中填充了類似於以下內容的字符串:

  • 4010-第一
  • 4020秒

我希望它在修剪后看起來像這樣:

  • 4010
  • 4020

和:

  • 彼得·漢森
  • 約翰·金

我希望它在修剪后看起來像這樣:

  • PH值
  • JK

我使用Visual Studio 6.0和MFC。

這是OnOK代碼:

void CExportChoices::OnOK() 
{

CString sFileName, name, height, weight, age, haircolor, eyecolor, initials, group;


CWnd* pWnd = GetDlgItem(IDC_NAME);
pWnd->GetWindowText(name);

sFileName.Format(".\\Export\\%s_export%d.txt", name, GetTickCount());
ofstream outfile(sFileName,ios::out);


pWnd = GetDlgItem(IDC_HEIGHT);
pWnd->GetWindowText(height);

pWnd = GetDlgItem(IDC_WEIGHT);
pWnd->GetWindowText(weight);

pWnd = GetDlgItem(IDC_AGE);
pWnd->GetWindowText(age);

pWnd = GetDlgItem(IDC_HAIRCOLOR);
pWnd->GetWindowText(haircolor);

pWnd = GetDlgItem(IDC_EYECOLOR);
pWnd->GetWindowText(eyecolor);

pWnd = GetDlgItem(IDC_INITIALS);
pWnd->GetWindowText(initials);

pWnd = GetDlgItem(IDC_GROUP);
pWnd->GetWindowText(group);


outfile << "Height="        <<      height      <<      "\n";
outfile << "\n";
outfile << "Weight="        <<      weight      <<      "\n";
outfile << "\n";
outfile << "Age="           <<      age         <<      "\n";
outfile << "\n"; 
outfile << "Hair color="    <<      haircolor   <<      "\n";
outfile << "\n";
outfile << "Eye color="     <<      eyecolor    <<      "\n";
outfile << "\n";
outfile << "Initials="      <<      initials    <<      "\n";
outfile << "\n";
outfile << "Group="         <<      group       <<      "\n";

outfile.close();

CDialog::EndDialog(22);

}

提前致謝!

------------------------------------更新------------- ------------------------

好吧,經過一番困惑之后,我終於找到了一種對我有用的解決方案。

你們給我的忠告是我想做的:

來自組合框的數據:

“ 4010組”

我的代碼:

pWnd = GetDlgItem(IDC_GROUP);
pWnd->GetWindowText(group);

int i = group.Find("-");

if (i >= 0)
{
group = group.Mid(0, i);

}

MessageBox(group); // results = 4010-group

這沒用。

我以為可能存在一些與UNICODE相關的問題,所以我將ComboBox中的數據從“ 4010-group”更改為“ 4010 group”,然后嘗試了以下操作:

pWnd = GetDlgItem(IDC_GROUP);
pWnd->GetWindowText(group);

int i = group.Find(" ");

if (i >= 0)
{
group = group.Mid(0, i);

}

MessageBox(group); // results = 4010

有用! 但是我不明白為什么連字符不起作用,有人知道嗎?

您可以使用CString::FindCString::Mid ,類似於wstring::findwstring::substr

另請參見CString函數

CString s = L"4010-First";

int i = s.Find('-');
if (i >= 0)
{
    s = s.Mid(0, i);
    TRACE(L"%s\n", s); //output: "4010"
}

或獲得第一和第二部分:

CString s1 = s.Mid(0, i);
CString s2 = s.Mid(i + 1);
TRACE(L"(%s)(%s)\n", s1, s2); //output: (4010)(First)

這是需要較少代碼的解決方案。 使用很少使用且有點誤解的CString方法SpanExclusion ,您可以用更少的行來完成您的任務。

CString str = L"PH-Peter Hansen";
CString newStr = str.SpanExcluding(L"-");

將導致僅返回“ PH”。

回復:“我不明白為什么連字符不起作用,有人知道嗎?”

有許多看起來像連字符的符號,但不是:連字符,破折號,破折號等。您需要確定在源代碼中用作分隔符的符號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM