鼠标点击CStatic控件后OnLButtonUp不触发
OnLButtonUp not firing after mouse click for CStatic control
我有一个MFC应用程序,我试图让用户通过鼠标拖动在图片控件上绘制一个矩形。我创建了自己的PictureCtrl类的子类CStatic。然而,OnLButtonUp()不触发当我做任何鼠标点击。
void PictureCtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
SetCapture();
anchor = point;
CRect rect(point,point);
CDC* pDC = GetDC();
pDC->DrawDragRect(&rect, CSize(1,1), NULL, CSize(1,1), NULL, NULL);
m_lastRect = rect;
ReleaseDC(pDC);
CStatic::OnLButtonDown(nFlags, point);
}
void PictureCtrl::OnMouseMove(UINT nFlags, CPoint point)
{
if(GetCapture() == this)
{
CRect rect(anchor, point);
rect.NormalizeRect();
CDC *pDC = GetDC();
pDC->DrawDragRect(&rect, CSize(1,1), &m_lastRect, CSize(1,1), NULL, NULL);
m_lastRect = rect;
ReleaseDC(pDC);
ReleaseCapture();
}
CStatic::OnMouseMove(nFlags, point);
}
void PictureCtrl::OnLButtonUp(UINT nFlags, CPoint point)
{
if(GetCapture() == this)
{
CDC *pDC = GetDC();
CRect rect(0,0,0,0);
pDC->DrawDragRect(rect, CSize(1,1), &m_lastRect, CSize(1,1), NULL, NULL);
ReleaseDC(pDC);
ReleaseCapture();
}
CStatic::OnLButtonUp(nFlags, point);
}
如果有人能告诉我为什么OnLButtonUp没有触发,我会很感激。是因为当我拖动鼠标时,OnMouseMove正在吞噬所有的调用吗?
另外,谁能给我一个建议,如何修改我的代码,以便如果一个矩形已经绘制,如果用户绘制一个新的旧的矩形将被删除?
你不应该在OnMouseMove
中使用ReleaseCapture()
,否则如果鼠标在窗外,你会错过OnLButtonUp
。对于你的矩形,使用常规的绘图原语,而不是在矩形完成后拖动原语。
要删除旧的矩形,然后使用特殊的笔绘制一个新的矩形,该笔没有自己的颜色,但会反转现有的图像像素。然后在旧的矩形上绘制将擦除它。参见WM_MOUSEMOVE中的示例:
http://msdn.microsoft.com/en-us/library/windows/desktop/dd145184 (v = vs.85) . aspx
相关文章:
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
- 在编译时,C++项目抛出错误 C2228,这是预期的,因为控件在运行时未达到该点
- 如何更改窗体上所有控件的标题?[C++生成器]
- 双击更改 mfc 中列表控件中的行的颜色
- 派生的 wxPanel 控件如何访问其中包含 wxDialog 中的数据?
- 如何从代码本身向 wxwidgets 中的文本控件插入字符?
- 如何在MFC中的静态文本控件上插入图标?
- 我的主窗口在创建时或单击更新区域时是否会收到编辑控件?
- 如何在Qt C++中向自定义控件添加属性?
- C/C++ 检测双击 TVItem 的常用控件
- 从C++标头中导入常量而不是硬编码它们:扩展 .net 控件?
- 控件不会在选择函数旁边移动
- MFC:我们能否扩展CEditView中存在的CEdit控件类行为
- 通过嵌入式 IWebBrowser2 控件中的链接打开 youtube 搜索失败
- 查找素数:错误:控件到达非void函数的末尾
- C++ 获取"控件可能会到达约翰逊-特罗特代码上的非空函数的末尾
- C++WIN32-将RTF数据加载到Rich Edit控件
- 由非托管(C++)COM服务器实例化的托管(C#)控件在Windows更新后损坏
- 鼠标点击CStatic控件后OnLButtonUp不触发