想得到总行数:检查0x0D和0x0A的个数,直接一个循环搞定,呵呵~~比较笨了一点。

解决方案 »

  1.   

    这是一个读取Ini文件的程序。打开和显示出来。
    void CAlangEditDoc::OnFileOpen() 
    {
    // TODO: Add your command handler code here
       CFile FileOpen;
       CFileDialog DlgOpen(TRUE,NULL,NULL,OFN_HIDEREADONLY,
       "Ini Files(*.ini)|*.ini|All Files(*.*)|*.*||");
        
       if(m_bString)
       {
      HGLOBAL hGlobal=GlobalHandle(m_pChar);
          GlobalUnlock(hGlobal);
          GlobalFree(hGlobal);
      m_bString=FALSE;
       }
       if(m_bOpen)
       {
       m_List.RemoveAll();
       m_Listini.RemoveAll();
       m_bOpen=false;
       }   if(DlgOpen.DoModal ()==IDOK)
       {
       FileOpen.Open (DlgOpen.m_ofn.lpstrFile,CFile::modeRead,NULL);
       if(!m_bString)
       {        
           HGLOBAL hData=GlobalAlloc(GMEM_MOVEABLE,FileOpen.GetLength ());
       m_pChar=(char*)GlobalLock(hData);
       m_bString=TRUE;
       }
       m_iFileLen=FileOpen.GetLength ();
       FileOpen.SeekToBegin ();
       FileOpen.Read(m_pChar,m_iFileLen);       CString string;
       string.Empty();
       for(int i=0;i<(int)m_iFileLen;i++)       //将每一行字符串存入链表
       {
         string=string+m_pChar[i];        //m_pChar[i]和*(m_pChar+i)等效
       if((int)m_pChar[i]==10)
       {
       string.TrimRight();
       m_List.AddTail(string);
       string.Empty();
       }
       TRACE("i=%d\n",*(m_pChar+i));
       }
       string.TrimRight();
       m_List.AddTail(string);
       m_bOpen=TRUE;
       MyOpenIni();
       InvalidateRect(AfxGetMainWnd()->m_hWnd,NULL,TRUE);
       }

    }void CAlangEditView::OnDraw(CDC* pDC)
    {
    CFeenaEditDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);// int caretpos[50]; if(pDoc->m_bOpen)
    {
    CSize sizeTotal(600,pDoc->m_List.GetCount()*20);
    CSize sizePage(sizeTotal.cx/2,sizeTotal.cy/2);
    CSize sizeLine(sizeTotal.cx/50,sizeTotal.cy/50);
    SetScrollSizes(MM_TEXT,sizeTotal,sizePage,sizeLine); POSITION pos=pDoc->m_List.GetHeadPosition(); for(m_i=0;m_i<pDoc->m_List.GetCount();m_i++)
    {
    CString string,str;
    CString strTmp;
    int iCount,cy; string.Empty(); string=pDoc->m_List.GetNext(pos); cy=pDC->GetTextExtent(string).cy;
    m_cy=cy;
    ////////////////////////////////////////////////////////

    int iRem=string.Find(';');
    if(iRem!=-1)
    {
        strTmp=string.Right(string.GetLength()-iRem);
    string=string.Left(iRem);
    pDC->SetTextColor(RGB(0,150,0));
    pDC->TextOut(pDC->GetTextExtent(string).cx,cy*m_i,strTmp);
    }

    pDC->SetTextColor(RGB(0,0,0));
        pDC->TextOut(0,cy*m_i,string);
               /////////////////////////////////////////////////////////       
       for(iCount=0;iCount<string.GetLength();iCount++)
       {    
               if(string.GetAt(iCount)>='0' && string.GetAt(iCount)<='9')
       {
      strTmp=string.Left(iCount);
          pDC->SetTextColor (RGB(200,50,50));
          pDC->TextOut(pDC->GetTextExtent(strTmp).cx ,cy*m_i,
      string.GetAt(iCount));
       }
       }
       ///////////////////////////////////////////////////////// 
       for(iCount=0;iCount<string.GetLength();iCount++)
       {    
             if(string.GetAt(iCount)==','||string.GetAt(iCount)=='.'||
    string.GetAt(iCount)==':')
     {
         strTmp=string.Left(iCount);
           pDC->SetTextColor(RGB(50,50,50));
           pDC->TextOut(pDC->GetTextExtent(strTmp).cx ,cy*m_i,
       string.GetAt(iCount));
     }
       }
       ///////////////////////////////////////////////////////// 
       for(iCount=0;iCount<string.GetLength();iCount++)
       {    
    if(string.GetAt(iCount)=='='||string.GetAt(iCount)=='<'||
                string.GetAt(iCount)=='>'||string.GetAt(iCount)=='('||
                    string.GetAt(iCount)==')'||string.GetAt(iCount)=='%'||
           string.GetAt(iCount)=='\\'||string.GetAt(iCount)=='/')
       {
       strTmp=string.Left(iCount); 
           pDC->SetTextColor (RGB(200,50,200));
           pDC->TextOut(pDC->GetTextExtent(strTmp).cx,cy*m_i,
          string.GetAt(iCount));
       }
       }
               ///////////////////////////////////////////////////////// 
           for(iCount=0;iCount<string.GetLength();iCount++)
       {    
           if(string.GetAt(iCount)=='['||string.GetAt(iCount)==']')
       {
       if(string.GetAt(iCount)=='[')
       {
       m_iCaretPos[m_iFlag]=m_i;
       m_iFlag++;
       }
      strTmp=string.Left(iCount); 
          pDC->SetTextColor (RGB(0,0,200));
          pDC->TextOut(pDC->GetTextExtent(strTmp).cx,cy*m_i,
      string.GetAt(iCount));
       }
       }
       m_iCount=m_iFlag;
    //    m_iFlag=0;
               ///////////////////////////////////////////////////////// 
    POSITION posini=pDoc->m_Listini.GetHeadPosition();
    for(int i=0;i<pDoc->m_Listini.GetCount();i++)
    {
    str=pDoc->m_Listini.GetNext(posini);
    int iLen=str.GetLength();
    for(iCount=0;iCount<(string.GetLength()+1-iLen);iCount++)
    {
    strTmp=string.Mid(iCount,iLen);
    if(strTmp.Compare(str)==0)
    {
    strTmp=string.Left(iCount);
    pDC->SetTextColor(RGB(110,110,0));
    pDC->TextOut(pDC->GetTextExtent(strTmp).cx,cy*m_i,str);
    }
    }
    }
             
    }//for

              }//if
    //////////////////////////////////////////////////////////////////////
    }//over
      

  2.   

    多谢liner_fan(阿朗),我现在还暂时看不懂这段代码,不过就冲你写了这么多代码,我也要把分给你,多写了。