CRectTracker橡皮盤類初級問題!送分

Alvin665 2004-12-10 09:03:42
請問各位,如何改變CRectTracker對象的邊框的色彩,比如原來都是BLACK的,我想換成YELLOW,如何作?
原來會有上,下,左,右,左上,右上,左下,右下八個點供MOUSE拖動修改大小,我只想要上下左右四個,如何作?謝謝各位!!
...全文
124 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
I_Love_CPP 2005-01-21
  • 打赏
  • 举报
回复
其实看看CRectTracker的源码就不难发现你为何对CRectTracker
对象的边界的颜色这么苦恼了。
void CRectTracker::Draw(CDC* pDC) const
{
// set initial DC state
....
// get normalized rectangle
CRect rect = m_rect;
rect.NormalizeRect();

CPen* pOldPen = NULL;
CBrush* pOldBrush = NULL;
CGdiObject* pTemp;
int nOldROP;

// draw lines
if ((m_nStyle & (dottedLine|solidLine)) != 0)
{

//******** 注意这部分 ***********************//
if (m_nStyle & dottedLine)
pOldPen = pDC->SelectObject(CPen::FromHandle(_afxBlackDottedPen));
else
pOldPen = (CPen*)pDC->SelectStockObject(BLACK_PEN);
//****************************************************//

pOldBrush = (CBrush*)pDC->SelectStockObject(NULL_BRUSH);
nOldROP = pDC->SetROP2(R2_COPYPEN);
rect.InflateRect(+1, +1); // borders are one pixel outside
pDC->Rectangle(rect.left, rect.top, rect.right, rect.bottom);
pDC->SetROP2(nOldROP);
}
....
}

因此,你要改变边界颜色,方法也很简单了,你只要稍微修改写这个函数即可。

解决了。 :)
Alvin665 2004-12-20
  • 打赏
  • 举报
回复
??????期待强人ING....
Alvin665 2004-12-16
  • 打赏
  • 举报
回复
有什么好办法吗?难道一定要自己重载METHOD?
lilian123 2004-12-16
  • 打赏
  • 举报
回复
drawcli只不过是自己处理消息的
CrectTrack 边框可以改颜色吗?
蒋晟 2004-12-14
  • 打赏
  • 举报
回复
See DrawCLI sample(MFC) in MSDN
Alvin665 2004-12-14
  • 打赏
  • 举报
回复
奇怪,难道没人用这个??继续等待
老夏Max 2004-12-10
  • 打赏
  • 举报
回复
如何改變CRectTracker對象的邊框的色彩,比如原來都是BLACK的,我想換成YELLOW,如何作?
===========================================
改变Draw的时候使用的DC的中的画笔的颜色即可!
老夏Max 2004-12-10
  • 打赏
  • 举报
回复
重载void CResizingDlg::OnNcLButtonDown(UINT nHitTest, CPoint point)
{
// TODO: Add your message handler code here and/or call default
//这里的nHitTest代表拖动的几个方向,//
CDialog::OnNcLButtonDown(nHitTest, point);
}
nHitTest判断它的不需要的四个方向直接返回,不调用默认的CDialog::OnNcLButtonDown(nHitTest, point);
MDI和SDI的情况和此类似!
fhqiplj 2004-12-10
  • 打赏
  • 举报
回复
1)重载Draw函数看看能不能修改色彩
2)好像也要重载构造函数才行吧
Alvin665 2004-12-10
  • 打赏
  • 举报
回复
以下这段代码,我已经换了画笔的色彩,为什么CRectTracker橡皮筋的框子还是BLACK的,没有变色??请指教
CTestTrackerDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CBrush brush(RGB(0,255,0));
CBrush *oldBrush=pDC->SelectObject(&brush);
CPen pen;
pen.CreatePen(PS_DOT,20,RGB(255,0,0));
CRect rect;
pDoc->m_tracker.GetTrueRect(&rect);
pDC->Ellipse(&rect); //rect中画了个圆
pDC->DrawText(str,rect,DT_TABSTOP);
pDC->SelectObject(oldBrush);
pDC->SelectObject(&pen);
if(pDoc->bDraw) //选中rect与否
{
pDoc->m_tracker.Draw(pDC);
}
pDC->SelectObject(oldBrush);

另外,好像DEFAULT下框子会有八个点,表示八个方向,虽然我用nHitTest可以控制只用其中四个方向,但它还是显示出了八个点哇.有什么办法能消除多余的点啊?

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧