2009-12-08 10 views
0

Cela devrait être simple, mais je ne peux pas tout à fait le faire fonctionner. Je veux un contrôle (je suppose que CListBox ou CListCtrl) qui affiche les chaînes de texte d'une manière tabulée agréable. Au fur et à mesure que des éléments sont ajoutés, ils doivent être ajoutés le long d'une ligne jusqu'à ce que cette ligne soit pleine, puis démarrer une nouvelle ligne. Comme si vous tapiez dans votre traitement de texte - lorsque la ligne est pleine, les éléments commencent à être ajoutés à la ligne suivante, et le contrôle peut défiler verticalement. Ce que j'obtiens en essayant avec un CListCtrl en mode liste est une seule ligne qui ne cesse de grandir, avec une barre de défilement horizontale. Je ne peux pas voir un moyen de changer cela, il doit y en avoir un?MFC: Affichage d'un affichage tabulé des éléments de texte

Répondre

2

Vous avez probablement besoin d'un contrôle de liste avec LVS_REPORT. Si vous vous attendez à ce que l'utilisateur ajoute des éléments de manière interactive à l'aide d'un clavier, vous avez probablement besoin d'une grille de données, pas d'une liste. Ajout de l'édition à la liste des sous-éléments de contrôle n'est pas facile, et il serait plus facile de commencer à partir CWnd. Recherchez "MFC Data Grid" pour trouver des bibliothèques de classes Open Source qui ont implémenté la fonctionnalité.

Si vous pouvez vous permettre d'ajouter/clr à votre programme, vous pouvez essayer les classes de la grille de données dans Windows Forms en utilisant la prise en charge de l'hébergement Windows Form de MFC. Vous trouverez beaucoup plus de ressources de programmation sur les classes de la grille de données dans Windows Forms que toute autre bibliothèque de classes de la grille de données MFC tierce.

0

Si vous utilisez CRichEditCtrl vous pouvez le mettre à la coupe des mots, jetez un oeil à cet extrait extrait de:

http://www.tech-archive.net/Archive/Development/microsoft.public.win32.programmer.ui/2004-03/0111.html

(I've derived my own QRichEditCtrl from the MFC CRichEditCtrl, 
and here's the relevant code:) 

void QRichEditCtrl::SetWordWrap(bool bWrap) 
{ 
    RECT r; 
    GetWindowRect(&r); 
    CDC * pDC = GetDC(); 
    long lLineWidth = 9999999; // This is the non-wrap width 
    if (bWrap) 
    { 
     lLineWidth = ::MulDiv(pDC->GetDeviceCaps(PHYSICALWIDTH), 
       1440, pDC->GetDeviceCaps(LOGPIXELSX)); 
    } 

    SetTargetDevice(*GetDC(), lLineWidth); 
}