• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            kenlistian

            厚積薄發(fā). 勤為槳,思為帆

               :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理 ::
              73 隨筆 :: 4 文章 :: 22 評論 :: 0 Trackbacks

                MFC中CEdit多行情況下,調(diào)用GetLine()時,發(fā)現(xiàn)老是后面跟有亂碼。即使你把str初始化也是如此。

            對于采用GetLine()調(diào)用,其函數(shù)說明有2種。

            1.int GetLine(
               int nIndex,
               LPTSTR lpszBuffer 
            ) const;
            2.int GetLine(
               int nIndex,
               LPTSTR lpszBuffer,
               int nMaxLength 
            ) const;

              代碼如下:

               char str[10] = {'\0'};
               int nLineNum;//想要獲取的行號
               nLineNum=0;
               m_ctlEditTest.GetLine(nLineNum,str);

            Remarks : The copied line does not contain a null-termination character.

            看了下msdn,一句話說得很明白,getline做了copy后是不給你加null結(jié)束符的。因此需要自己在定義的char字符串末尾添加。而一次實際上會copy回多少個字節(jié)。則在該函數(shù)的說明中,在msdn中清晰表達(dá)為:

            Return Value

              The number of bytes actually copied. The return value is 0 if the line number specified by nIndex is greater than the number of lines in the edit control.

            所以,上面的代碼段得用一個值取得實際長度,把多余的截取掉,但我在用getline1時老是返回0,不知道為何?不過改成getline2,指定copy9個字節(jié)時,同時對第10個字節(jié)設(shè)置為null則正常返回,沒有亂碼的出現(xiàn)。如下

              int iLen =  m_ctlEditTest.GetLine(nLineNum,str, 9);

              str[10] = '\0'; 

            即可。

            。。。。。。。

            在cedit中還有個linelength函數(shù),

            int LineLength(
               int nLine = -1 
            ) const;

            該函數(shù)是應(yīng)該返回指定行的長度,但是如果不仔細(xì)看msdn的說明,很容易誤解nLine是指cedit行中的某一行行數(shù)而代入其中,并得到錯誤的結(jié)論。

            而在msdn中,nLine的說明是:

            nLine

            Specifies the character index of a character in the line whose length is to be retrieved. If this parameter is –1, the length of the current line (the line that contains the caret) is returned, not including the length of any selected text within the line. When LineLength is called for a single-line edit control, this parameter is ignored.

            就是說nLine是字符串的字符索引,在多行情況下所以它必須通過LineIndex函數(shù)來獲取。在msdn中如下描述,

               Use the LineIndex member function to retrieve a character index for a given line number within a multiple-line edit control.

            而LineIndex函數(shù)說明如下:

            all this function to retrieve the character index of a line within a multiple-line edit control.

            int LineIndex(
               int nLine = -1 
            ) const;

            nLine

            Contains the index value for the desired line in the text of the edit control, or contains –1. If nLine is –1, it specifies the current line, that is, the line that contains the caret.

            該nLine才是真正的CEdit中的某一行列。也就是我們通過getlinecount()獲取到cedit的行數(shù)后,在到每一行中去找一個character index,再才能確定一行的長度。

            有時,覺得mfc是不是有點對個簡單的問題把彎子繞得太遠(yuǎn)了點吧。

            。。。。

            下面摘抄另一種解決方案,采用CString方式來copy一行的長度,我在自己機(jī)子測試過,通過GetLine函數(shù)1沒有通過,返回的是個空串,而采用GetLine2指定返回一個最大長度時,卻能copy回所要的數(shù)據(jù),不過當(dāng)采用最大長度時,由于拷貝回來的是一個不帶null終結(jié)符的串,則存在亂碼。由于工作時間緊張,問題只能采用指定大小的char串處理,但是采用CString串如果不指定大小的方法做一個mark。下列代碼供測試參考。

            CString strTemp;
            int nLineNum;
            nLineNum=0;
            m_ctlEditTest.GetLine(nLineNum,strTemp.GetBufferSetLength(m_ctlEditTest.LineLength(m_ctlEditTest.LineIndex(nLineNum))));
            strTemp.ReleaseBuffer();

            。。。。。。

            總而言之,感覺vc中mfc太過于細(xì)節(jié),莫免麻煩。但是感覺經(jīng)歷過一次后,就不再是磕腳的石頭,而是心態(tài)的放心。也許,這是心理作用而已。

            posted on 2008-02-15 21:17 kenlistian 閱讀(5484) 評論(0)  編輯 收藏 引用

            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            青青草原综合久久| 久久丫忘忧草产品| 国内精品久久久久| 品成人欧美大片久久国产欧美| 伊人色综合久久天天| 欧洲性大片xxxxx久久久| 无码八A片人妻少妇久久| 2021精品国产综合久久| 久久精品?ⅴ无码中文字幕| 亚洲国产精品成人AV无码久久综合影院| 国产亚洲美女精品久久久2020| 久久久久久久尹人综合网亚洲| 亚洲国产成人精品久久久国产成人一区二区三区综 | 久久香蕉一级毛片| 合区精品久久久中文字幕一区| 久久精品国产亚洲AV香蕉| 国产—久久香蕉国产线看观看| 久久久久se色偷偷亚洲精品av| 99国产欧美久久久精品蜜芽| 亚洲欧美久久久久9999| 久久国产精品久久久| 久久人妻少妇嫩草AV蜜桃| 久久久久亚洲AV无码专区网站| 亚洲中文字幕无码久久2020| 日韩电影久久久被窝网| 精品无码人妻久久久久久| 成人免费网站久久久| 狠狠色婷婷久久一区二区| 久久综合精品国产一区二区三区| 2021久久国自产拍精品| 一本一道久久综合狠狠老| 久久精品国产99久久久古代 | 国产69精品久久久久久人妻精品| 狠狠狠色丁香婷婷综合久久俺| 色欲久久久天天天综合网| 久久精品国产欧美日韩99热| 久久精品视频91| 久久无码一区二区三区少妇| 久久精品无码一区二区三区免费| 99久久精品免费看国产免费| 久久本道久久综合伊人|