CRectTrackerの色

[戻る]
かがみ [E-Mail] 2003/09/29(月) 13:57:13
ダイアログの上でCRectTrackerの色を変えたいのですが
下記のようにコーディングしましたがうまくできません。
助けてください。
あと、CRectTrackerのサイズを変更するときに
マウスでクリックする回りの四角を大きくしたいです。
(わかりにくい表現ですいません)

CRectTracker m_ROITracker;
CPen m_Blue;

BOOL Test::OnInitDialog() 
{
    CDialog::OnInitDialog();

    //ROI初期値設定
    m_ROITracker.m_nStyle = CRectTracker::solidLine;
    m_ROITracker.m_nStyle |= CRectTracker::resizeOutside;
    m_ROITracker.m_sizeMin.cx = 20; 
    m_ROITracker.m_sizeMin.cy = 20; 
    m_ROITracker.m_rect = CRect( 0, 0, 100, 100 );

   //青いペンの作成
   m_Blue.CreatePen( PS_SOLID, 1, RGB( 0, 0, 255 ) );
   return TRUE;
}

void Test::OnPaint() 
{
    CPaintDC dc(this); // 描画用のデバイス コンテキスト

    CDC *pDC = this->GetDC();
    CPen *pOldPen = (CPen *)pDC->SelectObject( &m_Blue );

    //ROI描画
    m_ROITracker.Draw( pDC );
    ReleaseDC( pDC );
    pDC->SelectObject( pOldPen );
}

tipe 2003/09/29(月) 14:34:30
CRectTrackerは色をかえることは出来ません
派生して描画部分を書き換えるしかないでしょう
二つ目の質問は良く分かりませんん
マウスでクリックする回りの四角とは?

sugar 2003/09/29(月) 16:35:08
> あと、CRectTrackerのサイズを変更するときに
> マウスでクリックする回りの四角を大きくしたいです。
> 
「リサイズハンドル」ってやつですね。
CRectTrackerクラスのm_nHandleSizeというメンバのことではないかと。
とりあえず、色々数値を設定してみれば、わかると思います。

かがみ 2003/09/29(月) 16:38:16
すばやい回答ありがとうございます。

> CRectTrackerは色をかえることは出来ません
わかりました

> 派生して描画部分を書き換えるしかないでしょう
「派生して」というのは具体的どうすればいいんでしょうか?

> 二つ目の質問は良く分かりませんん
> マウスでクリックする回りの四角とは?

  ┌┬────┬┐
  ├┘       └┤
  │           │
  │           │
  │           │
  ├┐       ┌┤
  └┴────┴┘
   ↑
   ラバーバンドのここのことです

sugar 2003/09/29(月) 16:47:00
> ダイアログの上でCRectTrackerの色を変えたいのですが
>
あとこっちの方ですが、CRectTrackerの派生クラスを定義して、
Draw()関数をオーバーライドすれば出来るんじゃないでしょうか。
その代わり、点線もリサイズハンドルも自前で描画することになるわけですが。

tipe 2003/09/29(月) 17:07:54
sugarさんも書いていますが
class CRectTrackerEx : public CRectTracker
{
.....// いろいろ
    virtual void DrawTrackerRect( LPCRECT lpRect,
                           CWnd* pWndClipTo,
                           CDC* pDC,
                           CWnd* pWnd );
.....// いろいろ
};
なんてクラスを新規に作成して、
DrawTrackerRectの内部で
好きなように四角を書けばいいかと思います。
MSDNではDrawTrackerRectをオーバーライドするように書いてありますね。
この関数については調べてみてください。

tipe 2003/09/29(月) 17:26:40
間違ったことを書いたようです
sugarさんのかかれたように
Draw()関数をオーバーライド
すると出来るようです

かがみ 2003/09/29(月) 18:09:58
[[解決]]
sugarさん、tipeさんありがとうございます。

> 「リサイズハンドル」ってやつですね。
> CRectTrackerクラスのm_nHandleSizeというメンバのことではないかと。
> とりあえず、色々数値を設定してみれば、わかると思います。
「リサイズハンドル」と言うのですね。
数値を設定して試してみます。

> なんてクラスを新規に作成して、
> DrawTrackerRectの内部で
> 好きなように四角を書けばいいかと思います。
クラスの新規作成にチャレンジして見ます。

古いスレッドには追加発言できません。