在鼠标左键按下后,随着鼠标的移动,改变对话框内CRgn对象的大小?

jerry4711 2006-11-15 11:23:53
我在对话框中用SetWindowRgn()实现了一个透明区域,现在想要在鼠标左键按下后,随着鼠标的移动,改变对话框内CRgn对象的大小?
CRect r; //定义CRect类对象r
GetClientRect(&r); //获取客户区窗口坐标范围
int x=0,y=0; //定义坐标变量,并设置初始值
x=r.right; //获取矩形范围的右边界值
y=r.bottom; //获取矩形范围的下边界值

CRgn rgn;
rgn.CreateRectRgn(0,0,x,y); //将矩形范围设置的长宽要比屏幕的长宽大,使得遮盖整个屏幕
CRgn rgn1;
rgn1.CreateEllipticRgn(512-60,384-60,512+60,384+60);
CRgn rgn3;
rgn3.CreateEllipticRgn(0,0,1,1);
rgn3.CombineRgn(&rgn,&rgn1,RGN_XOR);
SetWindowRgn(rgn3,TRUE);


我想要改变的就是rgn3的大小
...全文
247 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jerry4711 2006-11-15
  • 打赏
  • 举报
回复
我想问的是在特定区域内随着鼠标的的移动实现对话框内CRgn的放缩?请高手不吝赐教!



一分之千 2006-11-15
  • 打赏
  • 举报
回复
忘了说了,在void CMy7View::OnLButtonUp(UINT nFlags, CPoint point)
{.......
}中实现
一分之千 2006-11-15
  • 打赏
  • 举报
回复
画矩形的代码 应该类似吧?
//创建画笔
CPen pen;
pen.CreatePen(m_lineStyle,m_lineWidth,m_crPenColor);
CPen *pOldpen=dcMemory.SelectObject(&pen);
//使图形无填充
CGdiObject* poldBrush=dcMemory.SelectStockObject(NULL_BRUSH);
//画刷
CBrush brush(HS_BDIAGONAL,0L);
CBrush fillbrush(m_crFillColor);
if(m_bShadow)
dcMemory.SelectObject(&brush);
else if(m_bFill)
dcMemory.SelectObject(&fillbrush);

m_bCaptured=FALSE;
m_ptEndPoint=point;
pointList.AddTail(m_ptEndPoint);

SetCursor(m_csArrow);
ReleaseCapture();
ClipCursor(NULL);
pointList.AddTail(m_ptStartPoint);


//线
if(m_bLine)
{
dcMemory.MoveTo(m_ptStartPoint);
dcMemory.LineTo(m_ptEndPoint);

}

//圆
if(m_bCircle)
{
double r;
r=sqrt((m_ptStartPoint.x-m_ptEndPoint.x)*(m_ptStartPoint.x-m_ptEndPoint.x)+
(m_ptStartPoint.y-m_ptEndPoint.y)*(m_ptStartPoint.x-m_ptEndPoint.x));
dcMemory.Ellipse((int)(m_ptStartPoint.x-r),(int)(m_ptStartPoint.y-r),
(int)(m_ptStartPoint.x+r),(int)(m_ptStartPoint.y+r));
}

//矩形
if(m_bRectangle)
{
dcMemory.Rectangle(m_ptStartPoint.x, m_ptStartPoint.y, m_ptEndPoint.x, m_ptEndPoint.y);
}

Invalidate(false);//触发消息 使图形显示出来

dcMemory.SelectObject(pOldpen);
dcMemory.SelectStockObject(WHITE_BRUSH);
olidyu 2006-11-15
  • 打赏
  • 举报
回复
放成员变量,记录鼠标是否按下(在OnLButtonDown OnLButtonUp事件中处理),以及按下时的鼠标位置在哪。
然后在OnMouseMove事件中,用当前鼠标位置和记录鼠标位置做比较,用差值来调整窗口
qiqiqiqi1 2006-11-15
  • 打赏
  • 举报
回复
SendMessage(WM_NCHITTEST, MAKELPARAM(point.x, point.y)); 去捕捉MOUSE
OnNcHitTest里面添加代码,改rgn3
mynamelj 2006-11-15
  • 打赏
  • 举报
回复
这是处理鼠标点击客户区移动。要改大小直接修改CreateEllipticRgn中参数的值即可。
jerry4711 2006-11-15
  • 打赏
  • 举报
回复
楼上的这位高手,能否说的再明白点?谢谢!
mynamelj 2006-11-15
  • 打赏
  • 举报
回复
void CMyDlg::OnMouseMove(
UINT nFlags,
CPoint point
)
{

SendMessage(WM_NCHITTEST, MAKELPARAM(point.x, point.y));

CDialog::OnMouseMove(nFlags, point);
}
jerry4711 2006-11-15
  • 打赏
  • 举报
回复
怎么没人说话了?
自己顶下!

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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