ダイアログの上で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 );
}
CRectTrackerは色をかえることは出来ません
派生して描画部分を書き換えるしかないでしょう
二つ目の質問は良く分かりませんん
マウスでクリックする回りの四角とは?
> あと、CRectTrackerのサイズを変更するときに
> マウスでクリックする回りの四角を大きくしたいです。
>
「リサイズハンドル」ってやつですね。
CRectTrackerクラスのm_nHandleSizeというメンバのことではないかと。
とりあえず、色々数値を設定してみれば、わかると思います。
すばやい回答ありがとうございます。
> CRectTrackerは色をかえることは出来ません
わかりました
> 派生して描画部分を書き換えるしかないでしょう
「派生して」というのは具体的どうすればいいんでしょうか?
> 二つ目の質問は良く分かりませんん
> マウスでクリックする回りの四角とは?
┌┬────┬┐
├┘ └┤
│ │
│ │
│ │
├┐ ┌┤
└┴────┴┘
↑
ラバーバンドのここのことです
> ダイアログの上でCRectTrackerの色を変えたいのですが
>
あとこっちの方ですが、CRectTrackerの派生クラスを定義して、
Draw()関数をオーバーライドすれば出来るんじゃないでしょうか。
その代わり、点線もリサイズハンドルも自前で描画することになるわけですが。
sugarさんも書いていますが
class CRectTrackerEx : public CRectTracker
{
.....// いろいろ
virtual void DrawTrackerRect( LPCRECT lpRect,
CWnd* pWndClipTo,
CDC* pDC,
CWnd* pWnd );
.....// いろいろ
};
なんてクラスを新規に作成して、
DrawTrackerRectの内部で
好きなように四角を書けばいいかと思います。
MSDNではDrawTrackerRectをオーバーライドするように書いてありますね。
この関数については調べてみてください。
間違ったことを書いたようです
sugarさんのかかれたように
Draw()関数をオーバーライド
すると出来るようです
sugarさん、tipeさんありがとうございます。
> 「リサイズハンドル」ってやつですね。
> CRectTrackerクラスのm_nHandleSizeというメンバのことではないかと。
> とりあえず、色々数値を設定してみれば、わかると思います。
「リサイズハンドル」と言うのですね。
数値を設定して試してみます。
> なんてクラスを新規に作成して、
> DrawTrackerRectの内部で
> 好きなように四角を書けばいいかと思います。
クラスの新規作成にチャレンジして見ます。