c++ - CListCtrl बहुत सारे स्थान के बावजूद एलीलिप्सिस दिखाता है(केवल Win2008 और Win7)




winapi user-interface (3)

मुझे यह समस्या थी, और मुझे लगता है कि मैंने अंत में जवाब पाया है। मेरे मामले में समस्या यह थी कि संवाद में इस शैली में निर्दिष्ट फ़ॉन्ट था:

IDD_DIALOG_TurnOnOffRecords DIALOG 0, 0, 376, 263
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Turn on off records"
FONT 8, "@Arial Unicode MS"
.
.
.

अगर मैंने DS_SETFONT लाइन और DS_SETFONT फ्लैग को निकाल दिया है, तो DS_SETFONT बिना छांट के पाठ को दिखा रहा है।

मेरी धारणा यह है कि यह पाठ की चौड़ाई को मापने के लिए अलग-अलग फ़ॉन्ट का उपयोग कर रहा है और वास्तव में चित्रण करता है, यह ट्रांस्केक्शन का कारण बना रहा है

मैं ListView मोड में माउस के साथ कुछ आइटम प्रदर्शित करने के लिए CListCtrl का उपयोग कर रहा हूँ। ज्यादातर समय सूची में केवल एक ही स्थान है, जो बहुत सारे स्थान पर दाईं ओर है, लेकिन मेरी Win2008 प्रणाली (या Win7) पर यह एलीपिसिस का उपयोग करके पाठ को छोटा करता है (जैसे "टैंक" को "ता ..." के लिए छोटा किया गया है) । यह सभी डेटा (यहां तक ​​कि कुछ लंबी स्ट्रिंग्स काम) के साथ नहीं होता है, लेकिन बार-बार "टैंक" उदाहरण के साथ। इसके अलावा एक WinXP प्रणाली पर यह ठीक काम करता है - हमेशा।

सूची दृश्य आरसी फाइल के माध्यम से बनाया गया है

CONTROL  "List2",IDC_LIST,"SysListView32",LVS_LIST | WS_BORDER | WS_TABSTOP,320,27,195,38

तो यह तत्काल है

myListCtrl.SubclassDlgItem( IDC_LIST, this );
myListCtrl.ModifyStyle(LVS_OWNERDRAWFIXED, LVS_SHAREIMAGELISTS | LVS_SINGLESEL | LVS_SHOWSELALWAYS);

ListView_SetBkColor(myListCtrl.m_hWnd,PMAINFRM->GetColor(IDCOLOR_LI_BKG));
ListView_SetTextBkColor(myListCtrl.m_hWnd,PMAINFRM->GetColor(IDCOLOR_LI_BKG));

myListCtrl.SetImageList(PMAINFRM->GetImageList(IDICO_16),LVSIL_NORMAL);
myListCtrl.SetImageList(PMAINFRM->GetImageList(IDICO_16),LVSIL_SMALL);

मैं निम्नलिखित प्रारूप के साथ केवल 1 कॉलम सम्मिलित कर रहा हूं:

LV_COLUMN lvc;
lvc.mask = LVCF_FMT | LVCF_SUBITEM;
lvc.fmt = LVCFMT_LEFT;
lvc.iSubItem = 0;
myListCtrl.InsertColumn(0,&lvc);

और डेटा डाला जाता है

int index = 0;
int nItem = m_lstClass.InsertItem(index,(LPTSTR) strLabel, iIconID));
myListCtrl.SetItemData( nItem, (DWORD)index);
myListCtrl.SetItemState( nItem, LVIS_FOCUSED | LVIS_SELECTED, LVIS_FOCUSED | LVIS_SELECTED);

मैंने कोशिश की

myListCtrl.SetColumnWidth(column, LVSCW_AUTOSIZE_USEHEADER); 

साथ ही साथ

myListCtrl.SetColumnWidth(column, LVSCW_AUTOSIZE); 

और एक

myListCtrl.SetExtendedStyle(LVS_EX_AUTOSIZECOLUMNS);

या तो चाल नहीं किया

कोई विचार?

Micha


यह आपकी सहायता कर सकता है अपने सभी कॉलम और पंक्तियों को सम्मिलित करने के बाद इस फ़ंक्शन को कॉल करें

void SizeAllColumns(CListCtrl& list)
{
  CHeaderCtrl* pHeader = list.GetHeaderCtrl();
  ASSERT(pHeader);
  if (pHeader)
  {
    // Turn off redraw until the columns have all been resized
    list.SetRedraw(FALSE);

    for (int iCurrCol = 0;
        iCurrCol < pHeader->GetItemCount();
        iCurrCol++)
    {
      list.SetColumnWidth(iCurrCol, LVSCW_AUTOSIZE);

      int nCurrWidth = list.GetColumnWidth(iCurrCol);

      list.SetColumnWidth(iCurrCol, LVSCW_AUTOSIZE_USEHEADER);

      int nColHdrWidth = list.GetColumnWidth(iCurrCol);

      list.SetColumnWidth(iCurrCol, max(nCurrWidth, nColHdrWidth));
    }

    // Now that sizing is finished, turn redraw back on and
    // invalidate so that the control is repainted
    list.SetRedraw(TRUE);
    list.Invalidate();
  }
}

मेरे मामले में सूची को आकार देने के बाद प्रत्येक पंक्ति के अंत में एलीिपिस दिखाई देता है। सूची को भरने से पहले "सेटराड्रा (झूठी)" को कॉल करें और चेकलिस्ट (टॉम आर्चर के समाधान) को पूरा करने के लिए "सेटराड्रा (सच्चा)" को हल करना समाधान है।