CStringArray Head;
    CByteArray   Cols;
    Head.Add("Item");
    Cols.Add(40);       //40%
    Head.Add("Sub1");
    Cols.Add(30);       //70%
    Head.Add("Sub2");
    Cols.Add(30);       //100%
    m_ColListCtrl.InitCtrl(&Head, &Cols);//添加标题头/////添加内容
    CString Linetitle;
    int pos=0;
    for (int x=0; x<10;x++)
    {
        Head.RemoveAll();
        Linetitle.Format("Line %d",x);
        Head.Add(Linetitle);
        Linetitle.Format("SubLine %d-1",x);
        Head.Add(Linetitle);
        Linetitle.Format("SubLine %d-2",x);
        Head.Add(Linetitle);
pos=m_ColListCtrl.AddItem(&Head,x);
  
    } LOGFONT logfont;//最好弄成类成员,全局变量,静态成员
CFont *pfont = m_ColListCtrl.GetFont();
pfont->GetLogFont( &logfont );
logfont.lfHeight =logfont.lfHeight * 5;
logfont.lfWidth  = logfont.lfWidth * 5;
CFont font;
font.CreateFontIndirect(&logfont);
m_ColListCtrl.SetFont(&font);
return TRUE;  // return TRUE  unless you set the focus to a control
上面这一段是list control的界面初始化,其中标题的字体可以改变,但是添加的内容(10条)却没有改变,请问各位,是不是内容的字体大小不能改变,还是程序本身有什么问题?

解决方案 »

  1.   

    int CColorListCtrl::InitCtrl(CStringArray *phead, CByteArray *pProcent)
    {
        if ( (!phead)||(!pProcent)) return 1;
    LV_COLUMN lvc;
    int cx=0;
        int count = phead->GetSize(); 
        if (count!=m_columnSize) return 2;
        if (pProcent->GetSize() != count) return 3;
        for (int x=0; x<count; x++) cx+=pProcent->GetAt(x);
        if (cx!=100) return 4; CRect rect_listbox; lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
    GetWindowRect( rect_listbox );
    cx=int((rect_listbox.right-rect_listbox.left)-20); //some Pixel for Scrollbar    //set head-columns in ListBox
    lvc.iSubItem = 0;
    lvc.fmt = LVCFMT_LEFT ;

        for (x=0; x<count; x++)
        {
            lvc.cx = int(cx*pProcent->GetAt(x)/100);
        lvc.pszText = (char*)LPCSTR(phead->GetAt(x));
        CListCtrl::InsertColumn(x,&lvc);
        }
        return 0;
    }
      

  2.   

    int CColorListCtrl::AddItem(CStringArray *line, int pos)
    {
        int ret_index=LISTCTRL_ERROR;
        if (!line) return ret_index; LV_ITEM lvi;
        
    //set List-properties
    lvi.mask = LVIF_TEXT ; 
    lvi.iSubItem = 0;
        lvi.pszText = "";    int count=GetItemCount();
        int columns=line->GetSize();    if (m_columnSize!=columns) return ret_index;    if (DWORD(pos)<=DWORD(count)) count=pos;

        lvi.iItem = count;
        //lvi.lParam= count;
    lvi.mask = LVIF_TEXT ; 
    lvi.iSubItem = 0;   //refer to no Item
        // insert an new line
        ret_index=InsertItem(&lvi);
        // set item text for additional columns
        for (int x=0; x<columns; x++)
        {
            CListCtrl::SetItemText(count,x,(char*)LPCSTR(line->GetAt(x)) );
        }
    lvi.mask = LVIF_STATE;
    lvi.iSubItem = 1;
    lvi.stateMask = 0xFFFFFFFF ; 
    lvi.state = 0; if (CListCtrl::SetItem(&lvi)) 
        {
            CMyLParam *p=new CMyLParam(m_columnSize); //init with: DEF_BACKGROUND, def_text      
            CListCtrl::SetItemData( ret_index, DWORD(p) );
            return ret_index;
        }
        return LISTCTRL_ERROR;
    }
    附上具体的两个函数!      希望大家指点一二
      

  3.   

    CFont font;
    font.CreateFontIndirect(&logfont);
    m_ColListCtrl.SetFont(&font);
    注意这是一个局部变量函数return后这个&font不再有效
    所以字体改不了

    static CFont font;来定义
    或者变成员变量
      

  4.   

    觉得 Phourm() 说的不对,font真正有效的是和HFONT句柄,应该在DeleteObject被释放
      

  5.   

    SetFont对标题有效,对表格中的字体无效说明表格中不是用窗口的字体
      

  6.   

    昨天我用Phourm() 所说的方法试了一下,字体的确是改变了,但是它所对应的那一栏的高度却没有对应的变化,如果把字体设大一点的话字体只显示了一小部分,不过仍要谢谢Phourm()的关注。
       
        to:goodboyws(深夜不眠者)    我想调整窗口中的字体,间接调整表格中每一栏的高度,你说得对:SetFont对标题有效,对表格中的字体无效说明表格中不是用窗口的字体
        请问,表格中的字体及每一栏的高度应该用什么方法改变,谢谢!
      

  7.   

    CFont font;
    font.CreateFontIndirect(&logfont);
    m_ColListCtrl.SetFont(&font);
    font.Detach(); //加上这个
      

  8.   

    LOGFONT logfont;//最好弄成类成员,全局变量,静态成员
    CFont *pfont1 = m_ColListCtrl.GetFont();
    pfont1->GetLogFont( &logfont );
    logfont.lfHeight =logfont.lfHeight * 3;
    logfont.lfWidth  = logfont.lfWidth * 3;
    static CFont font1;
    font1.CreateFontIndirect(&logfont);
    m_ColListCtrl.SetFont(&font1);
    font1.Detach();   //注意释放CDC