輪ゴムGetTrueRectとm_rect区別



輪ゴムがマウスを追跡すると、輪ゴムの矩形範囲が自動的にm_に保存されます.rectでm_を呼び出すrectは今の輪ゴムの位置を知ることができますが、どうしてGetTrueRect関数がありますか?
 
まず、次の文を参照してください.
 
 
			CRect rect2;
			m_RectTracker2.GetTrueRect(&rect2);
			m_RectTracker2.m_rect.SetRect(rect2.TopLeft().x,rect2.TopLeft().y,rect2.BottomRight().x,rect2.BottomRight().y);
	                   DrawTheTracker(m_RectTracker2);

 
これはボタンに応答して押すプログラムです.
ステップ1:TrueRectを取得
ステップ2:得られたTrueRectで輪ゴムの大きさをリセット
ステップ3:輪ゴム領域の再描画
 
ボタンを押し続けると、どんな結果になりますか?
得られた輪ゴム領域で輪ゴム領域をリセットすると、輪ゴム領域は変わっていないはずなので、ボタンを押すと輪ゴムは変化しません.
しかし、事実はこうかもしれません.あなたがボタンを押し続けると、輪ゴムの領域がどんどん大きくなります....これはなぜですか.
 
次のキー文を見て、上のキー文を少し変更しました.
 
 
 
			CRect rect2;
			rect2=m_RectTracker2.m_rect; //  
			m_RectTracker2.m_rect.SetRect(rect2.TopLeft().x,rect2.TopLeft().y,rect2.BottomRight().x,rect2.BottomRight().y);
	        DrawTheTracker(m_RectTracker2);
			

これ以上ボタンを押し続けた場合、どのような結果になりますか?
この結果、輪ゴム領域は変わりません
 
WHY?  WHY THE ARE DIFFERENT? 
2つのプログラムは、論理的には同じように見えますが、結果はなぜ違うのでしょうか.
 
もう一つのテストプログラムを作ります
 
	CRect rect1,rect2;

	rect1=m_RectTracker2.m_rect;
	m_RectTracker2.GetTrueRect(&rect2);


ブレークポイントを設定し、トレース監視を行います.次のことがわかります.
 
rect1    top=112  bottom=192  left=205  right=287
rect2    top=111 bottom=193   left=204   right=288
 
気づいたのか、NNの、ここで問題があったのか
m_rect保存は矩形の大きさです
GetTrueRectは、長方形と境界外のハンドルサイズを保存します.
やはり上の手順で、輪ゴムのスタイルを修正してから
 
	m_RectTracker2.m_nStyle=CRectTracker::resizeOutside|CRectTracker::dottedLine;
	m_RectTracker2.m_nHandleSize=10;

 
結果は次のとおりです.
rect1   top=55 bottom=129 left=221 right=306
rect2   top=45 bottom=139 left=211 right=316
 
MSDNの説明:
 
 
void GetTrueRect(
   LPRECT lpTrueRect 
) const;

Call this function to retrieve the coordinates of the rectangle.
The dimensions of the rectangle include the height and width of any resize handles located on the outer border. Upon returning, lpTrueRect is always a normalized rectangle in device coordinates.
 
CRect m_rect;

The current position of the rectangle in client coordinates (pixels).
 
したがって、スタイルがない場合、またはスタイルをInsideに設定していない場合、両方のサイズは同じです.そうしないと、両方のサイズは異なります.
 
注意しなければならないのは、ハンドルを必要としない場合もあります.境界枠を必要としない場合もあります.そのようにリフレッシュするのは面倒かもしれません.どうすればいいですか.簡単です.輪ゴムのスタイルを設定しないでください.デフォルトは枠のハンドルがありません.