怎样画空心矩形?

nearwater 2004-05-05 10:37:10

画实心矩形我用下面的方法:
1.在工具栏添加一个画实心矩形图标的图标,ID为ID_DRAW_FILLRECT
2.在CxxxVIEW类中添加消息:
ID_DRAW_FILLRECT COMMAND
WN_LUBTTONDOWN
WN_MOUSEMOVE
WM_LBUTTONUP
3.添加数据成员
bool m_bIsDraw //绘图标志
int m_nDrawType //绘图类型
CPoint m_cpStart //起点
CPoint m_cpOld //终点
4.在函数中添加代码:
(1)
CTimeView::CTimeView()
{
// TODO: add construction code here
m_bIsDraw = false; //初始化绘图标志
}

(2)
void CTimeView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if (m_bIsDraw) //判断是否正在绘图
return;
m_cpStart = point; //设置起邕点
m_cpOld = point;
m_bIsDraw = true; //判断绘图标志
CView::OnLButtonDown(nFlags, point);
}

(3)
void CTimeView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if (!m_bIsDraw) //判断是否在绘图
return;
CClientDC dc(this); //取得客户区设备上下文
dc.SetROP2(R2_NOT); //设置绘图色为屏幕反转色
CRect rectOld(m_cpStart, m_cpOld); //记录原矩形
CRect rectNew(m_cpStart, point); //记录新矩形
switch (m_nDrawType) //选择绘图类型
{
case 0:
dc.Rectangle(rectOld); //擦除原有矩形
dc.Rectangle(rectNew); //画新的矩形
break;
}
m_cpOld = point; //修改鼠标位置
CView::OnMouseMove(nFlags, point);
}

(4)
void CTimeView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if (m_bIsDraw) //判断是否在绘图中
m_bIsDraw = false;
CView::OnLButtonUp(nFlags, point);
}

(5)
void CTimeView::OnDrawFillrect() //获取绘图类型
{
// TODO: Add your command handler code here
m_nDrawType = 0;
}

上面是画实心矩形的方法,那画空心矩形又是怎么样的呢?
...全文
768 2 打赏 收藏 举报
写回复
2 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
菜牛 2004-05-05
CDC::SelectStockObject(NULL_BRUSH);
  • 打赏
  • 举报
回复
itmaster 2004-05-05
(3)
void CTimeView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if (!m_bIsDraw) //判断是否在绘图
return;
CClientDC dc(this); //取得客户区设备上下文
dc.SetROP2(R2_NOT); //设置绘图色为屏幕反转色
//选取画刷进dc,画刷颜色为背景色
CRect rectOld(m_cpStart, m_cpOld); //记录原矩形
CRect rectNew(m_cpStart, point); //记录新矩形
switch (m_nDrawType) //选择绘图类型
{
case 0:
dc.Rectangle(rectOld); //擦除原有矩形
dc.Rectangle(rectNew); //画新的矩形
break;
}
m_cpOld = point; //修改鼠标位置
CView::OnMouseMove(nFlags, point);
}
  • 打赏
  • 举报
回复
相关推荐
发帖
VC/MFC
加入

1.6w+

社区成员

VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
申请成为版主
帖子事件
创建了帖子
2004-05-05 10:37
社区公告

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