none
スペースを含む文字列で正しく背景を塗りつぶすには RRS feed

  • 質問

  • 	ID2D1SolidColorBrush* foreBrush = NULL;
    	ID2D1SolidColorBrush* backBrush = NULL;
    
     if (clientDrawingEffect != NULL)
     {
        //省略
    		//背景色を得る
      colorDrawingEffect->GetBackColor(&color);
    
    		//背景色に対応するブラシを作る
    		if(SUCCEEDED(hr))
    		{
       hr = pRT_->CreateSolidColorBrush(
        color,
        &backBrush);
    		}
    
      SafeRelease(&colorDrawingEffect);
     }
     else
     {
        //省略
     }
    
     if (SUCCEEDED(hr))
     {
    		//外接する四角形を塗りつぶす
    		if(backBrush != NULL)
    			pRT_->FillRectangle(rect,backBrush);
        //省略
     }

    How to Add Client Drawing Effects to a Text Layout (Windows)

    こちらのサンプルに上のようなコードを追加しました

    スペースを含まない文字列では正しく背景色を塗りつぶすことが出来るのですが、選択した範囲にスペースがあるとその部分だけあいてしまいます

    (スペースを含むグリフの幅を取得しようとすると、スペース以外の部分しか取得できないようです)

    スペースを含むグリフの幅を正しく取得する方法があれば、教えてほしいです

    2010年11月16日 8:05

すべての返信

  • こんにちは。

    サンプルを元にいろいろとやってみたのですが、jhb03215 さんがどこにパッチを当てたかわからず現象を再現できないためあまり有効な助言は出来ません。

    1. 該当コードは CustomTextRenderer::DrawGlyphRun の処理に追加されたのでしょうか?
    2. FillRectangle する rect はどのように取得されているのでしょうか?

    上記のことを教えていただければもう少し具体的な助言が出来るような気がします。


    電柱一家
    2010年11月25日 5:19