1. 程式人生 > >C# 字串換行、字串畫素高度、寬度 的結構

C# 字串換行、字串畫素高度、寬度 的結構

//字串高度、寬,行數,及字串本身
public struct hhString
{
    public string str; //處理後的字串
    public int hSnumber; //共有幾行(插入多少個斷行符)
    public float width; //處理後的字串寬
    public float height;//處理後的字串高
    public hhString(string _str, float _width, float _height, Font font, Graphics g)
    {
        SizeF sf = g.MeasureString(_str, font);
        hSnumber = 0; //行數
        width = sf.Width;
        height = sf.Height;
        float tempWidth = 0; //迴圈到字串中某個字元的寬度
        string tempStr = _str; //插入用
        int insertPoint = 0; //剛在迴圈中的插入點

        gotoReFor: //上一個插入點以後重新從插入點開始迴圈
        if (insertPoint != 0)
        {
            _str = tempStr; //替換為處理後的字串
            sf = g.MeasureString(_str, font); //斷行後字串寬度發生變化,重新計算size
            tempWidth = 0; //清零,因為tempWidth為上一次計算的行文字的總寬度,這裡清零重新計算當前行
        }
        if (sf.Width > _width)
        { //字串寬度大於單元格寬度
            for (int i = insertPoint; i < _str.Length; i++)
            {
                if (tempWidth > _width)
                {
                    tempStr = _str.Insert(i, "\n");
                    hSnumber++; //行數加一行
                    insertPoint = i; //插入點變成當前插入點,下次從這個點開始迴圈
                    goto gotoReFor; //斷行後,重新開始計算經過處理後的字串,用於文字多於兩行的多文字情況
                }
                tempWidth += g.MeasureString(_str[i].ToString(), font).Width + 1;
            }
        }
        str = tempStr;
        sf = g.MeasureString(str, font);
        width = sf.Width;
        height = sf.Height;
    }
}

相關推薦

C# 字串字串高度寬度結構

//字串高度、寬,行數,及字串本身 public struct hhString { public string str; //處理後的字串 public int hSnumber; //共有幾行(插入多少個斷行符) public float wid

MFC 獲取字串高度寬度

方法一: // 取文字的尺寸 CRect rc; CFont *pOldfont=pdc->SelectObject(&fn); // 設定新字型 pDC-&g

Matlab中如何將長字串

太長不看版 舉例如下: % Port definition fprintf(fID,[... '\n'... 'input clk;' '\n'... 'input rst_n;'

VC中寬字串(WCHAR字串

問題: VC6中使用\來連線較長的字串的時候就會在連線處出現一個亂碼,最終導致異常,例如:  _stprintf(lpszBuffer,  _T("select si_id, si_ip, si_port, si_name from serverinfo where si_

VS 中 長字串

在VS中寫程式碼 ,如果字串很長,我們希望他換行顯示, string Str="dfdsagsdavsefsaxccccfffsadfdsgsdgdsbsadsvewa                    fdsgujsdsdcdcvasfccccccccsawdsda

js實現字串

js中字串多行書寫是個比較麻煩的問題,其實咋們通過匿名函式可以實現這個功能: Function.prototype.getMultiLine = function() { var lines = new String(this); lines = l

vs長字串

 在VS中寫程式碼 ,如果字串很長,我們希望他換行顯示, string Str="dfdsagsdavsefsaxccccfffsadfdsgsdgdsbsadsvewa                    fdsgujsdsdcdcvasfccccccccsawds

js字串

console.log("\ * url:https://ad.hbwjkj.com.cn/?A=api&c=home&a=bdmap&para=0 \n\ * mec

Python字串的3種方式

if __name__ == '__main__': #第一種:三個單引號     print '''我是一個程式設計師        我剛開始學習python''' #第二種:三個雙引號     print """我是一個程式設計師        我剛開始學習py

shell如何將文字檔案字串後轉換為陣列

1 #!/bin/sh   2 #首先判斷有沒有啟動失敗的檔案,有則處理   3 if [ -f "./task_start_failed.log" ]&&[ ` ls -l task_start_failed.log| awk '{print $5}' `

使用回車或分割字串例子

 int i = 13;//回車Ascii碼值 int ii = 10;//換行Ascii碼值 char c = (char)i; char cc = (char)ii; String s = "甄唯一"+c+cc+"only"; String strs [] = s.spl

cocos2d-x 多字串顯示以及CCLabelTTF中的bug修改

重點程式碼 //多行字串顯示(EngLish) CCLabelTTF* Dlcx_Util::dlcx_drawString( const char *  str ,float x,float y,float w,float h, GLubyte r,GLubyte g,

datagrid的文字與連續字串處理,字串三種擷取方式

1 文字自動換行:nowrap:false 2 當時字串,比如email這樣的欄位時,就需要用到字串的拼接,首先,先貼出我解決問題的方法,再介紹字串的三種拼接方式: 我解決問題的方法:

Direct3D基礎——預備知識:多重取樣格式記憶體池交換鏈和頁面置換深度快取頂點運算裝置效能

多重取樣 用畫素矩陣表示影象的時候往往會出現塊狀效應,多重取樣便是一項用於平滑塊狀影象的技術。 圖片來自:DirectX9.03D遊戲開發程式設計基礎 左邊那條是一條鋸齒線,右邊是一條經過取樣的反走樣線,看上去要平滑的多。 D3DMULTISAMPLE_TYPE列舉型別包含

物理CSSdipdprppidpi

物理畫素(physical pixel) 物理畫素又被稱為裝置畫素(dp),他是顯示裝置中一個最微小的物理部件。一個裝置的物理畫素是固定不變的。每個畫素可以根據作業系統設定自己的顏色和亮度。所謂的一倍屏、二倍屏(Retina)、三倍屏,指的是裝置以多少物理畫素來

移動端web頁面知識小結之密度解析度螢幕尺寸

一直以來,本人對移動端解析度、畫素等概念傻傻分不清,特查閱多位牛人部落格後總結如下要點,以便日後檢視。 文件來源 螢幕解析度 是指螢幕上垂直方向和水平方向上的畫素個數,單位是px。常見取值 480X800,320X480等 IPhone手

移動端web頁面知識小結之物理邏輯

一直以來,本人對移動端解析度、畫素等概念傻傻分不清,特查閱多位牛人部落格後總結如下要點,以便日後檢視。 文件來源 CSS畫素 CSS畫素是沒有實際大小的抽象單位,它是一個相對長度,它相對的是電腦或手機顯示器的解析度。 但在不同的

C++中符‘\n’和控制符‘endl’的區別(cout和printf區別)

1.顯示字串時,在字串中包含換行符,而不是在末尾加上endl,可以減少輸入量 2.如果生成一個空行,則兩種方法的輸入量相同,但對大多數人而言輸入endl更為方便 3.顯示引號括起來的字串通常使用換行符

常用的操作演算法:影象加法混合提取影象中的ROI

影象可以是看成是一個多維的陣列。讀取一張圖片,可以看成是讀入了一系列的畫素內容。這些畫素內容,按

C#生成縮圖,指定大小

using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using