0

私はアプリケーション開発の初心者です。RichEditControl2 に次のデータを表形式で表示するアプリを作成しましたが、文字間隔の問題に直面しています。

日付 MilsStone サブ 2012-03-12 要件/チケット分析 要件理解 2.0 2012-03-14 設計開発/ドキュメント設計 3.0 2012-03-15 設計 設計レビュー 3.0 2012-03-15 コーディング&ユニット テスト 開発 4.0

この場合、幅を設定できません (AddDataToDisplayBox で Format() を使用)。助けてください。

void Csdlc_verifierDlg::AddDataToDisplayBox(int index,COLORREF color, bool bold, bool italic, bool underline)


{
    CString strTemp;
    char buf[255]={0};
    record_data record = mRecData.GetAt(index); 
    strTemp.Format("%-15s%-50s%-50s%-5s%-15s",record.date,record.milestone,record.tasktype,record.effort,record.name);  
    AddLine(strTemp,NEWLINE,color,bold,italic,underline);
}

int Csdlc_verifierDlg::AddLine(CString str, int seperator, COLORREF color, bool bold, bool italic, bool underline)
{           
    int txtLen = mRichEditCtrl.GetTextLength();

    // Save number of lines before insertion of new text
    int nOldLines = mRichEditCtrl.GetLineCount();

    // Initialize character format structure
    CHARFORMAT cf = {0};
    cf.cbSize = sizeof(CHARFORMAT);
    cf.dwMask = CFM_COLOR|CFM_BOLD|CFM_ITALIC|CFM_UNDERLINE|CFM_CHARSET|CFM_SPACING; //Mask validates the active field in this case.
    cf.dwEffects = (bold ? CFE_BOLD : 0) | (italic ? CFE_ITALIC : 0) | (underline ? CFE_UNDERLINE : 0);
    cf.crTextColor = color;

    //Add newline character, if required.
    switch(seperator)
    {
    case NEWLINE:
        str.AppendChar('\n');
        break;

    case SPACE:
        str.AppendChar(' ');
        break;
    }
    //Insert data at the end.
    mRichEditCtrl.SetSel(txtLen, -1); // Set the cursor to the end of the text area and deselect everything.
    mRichEditCtrl.ReplaceSel(str); // Inserts when nothing is selected.

    // Apply formating to the just inserted text.
    mRichEditCtrl.SetSel(txtLen-(nOldLines-1), mRichEditCtrl.GetTextLength());
    mRichEditCtrl.SetSelectionCharFormat(cf);

    // Scroll by the number of lines just inserted
    mRichEditCtrl.LineScroll(mRichEditCtrl.GetLineCount() - nOldLines); 
    return 0;
}
4

2 に答える 2

0

同じ学校の出身である場合、または別のフォーラムに同じ質問を投稿した場合は、こちらの回答を参照してください

于 2013-02-18T01:00:20.010 に答える
0

リッチ エディット コントロールで整列列を作成するには、"Courier" などの固定スペース フォントを作成し、mRichEditCtrl.SetFont(...); を使用してそのフォントをコントロールに設定する必要があります。

列間にタブ '\t' を使用して、プロポーショナル スペース フォントを使用して列の配置効果を作成することは可能ですが、これは、テキストの各行が列のテキスト幅とほぼ同じである場合にのみ機能します。1 つの行が 50 文字をすべて使用し、別の行が数文字しかない場合、単一の '\t' では位置合わせに十分ではありません。そのような場合は、列の文字数に基づいて挿入するタブの数を計算する追加の処理が必要です。

于 2013-02-16T18:42:59.387 に答える