冒牌WM_NCLBUTTONDOWN消息死活没用 100分

pois 2015-09-02 12:01:12

ON_WM_LBUTTONDOWN()
ON_WM_RBUTTONDOWN()

void CChildView::OnLButtonDown( UINT nFlags, CPoint point )
{
GetParent()->SendMessage(WM_NCLBUTTONDOWN, HTCAPTION, 0);
}

void CChildView::OnRButtonDown( UINT nFlags, CPoint point )
{
GetParent()->SendMessage(WM_NCLBUTTONDOWN, HTCAPTION, 0);
}

无边框窗口实现左右键拖动
OnLButtonDown这个就能移动窗口
OnRButtonDown 这个死活不能,我要吐血了,一样的代码一样的函数
...全文
331 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2016-01-22
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复多日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
pois 2015-09-11
  • 打赏
  • 举报
回复
引用 17 楼 chenquangobeijing 的回复:
void CChildView::OnRButtonDown( UINT nFlags, CPoint point ) { GetParent()->SendMessage(WM_NCRBUTTONDOWN, HTCAPTION, 0); //注意是:WM_NCRBUTTONDOWN }
没有用
ashleycoder 2015-09-09
  • 打赏
  • 举报
回复
void CChildView::OnRButtonDown( UINT nFlags, CPoint point ) { GetParent()->SendMessage(WM_NCRBUTTONDOWN, HTCAPTION, 0); //注意是:WM_NCRBUTTONDOWN }
pois 2015-09-09
  • 打赏
  • 举报
回复
我这段代码上去都没用
BOOL CChildView::PreTranslateMessage( MSG* pMsg )
{
	if(pMsg->message == WM_RBUTTONDOWN)
	{
		pMsg->message = WM_LBUTTONDOWN;
		pMsg->wParam = MK_LBUTTON;

	}

	if(pMsg->message == WM_MOUSEMOVE)
	{
		if(pMsg->wParam & MK_RBUTTON)
		{
			pMsg->wParam &= ~MK_RBUTTON;
			pMsg->wParam |= MK_LBUTTON;

		}
	}
	return 0;
}
pois 2015-09-07
  • 打赏
  • 举报
回复
我再CMainFame里又加了一个 void CMainFrame::OnNcLButtonDown( UINT ui, CPoint cp) { CFrameWnd::OnNcLButtonDown(ui, cp); } 设置断点,无论是左键还是右键都进去了,ui都是2(caption)cp都是(0,0) 左键就有用,右键就没用
pois 2015-09-07
  • 打赏
  • 举报
回复
引用 11 楼 schlafenhamster 的回复:
因为 没法 传递 nFlags 标记(应该是 nFlags=MK_LBUTTON;) Parent 无法 完成 拖动
nflag 我特意改了有没用况且 SendMessage(WM_NCLBUTTONDOWN, HTCAPTION, 0); 这一句也没传nflags
schlafenhamster 2015-09-07
  • 打赏
  • 举报
回复
WM_NCLBUTTONDOWN: Default Action The DefWindowProc function tests the given point to find out the location of the cursor and performs the appropriate action. If appropriate, DefWindowProc sends the WM_SYSCOMMAND message to the window.
schlafenhamster 2015-09-07
  • 打赏
  • 举报
回复
Note This member function is called by the framework to allow your application to handle a Windows message. The parameters passed to your function reflect the parameters received by the framework when the message was received. If you call the base-class implementation of this function, that implementation will use the parameters originally passed with the message and not the parameters you supply to the function. 、、 因为 没法 传递 nFlags 标记(应该是 nFlags=MK_LBUTTON;)
schlafenhamster 2015-09-05
  • 打赏
  • 举报
回复
因为 没法 传递 nFlags 标记(应该是 nFlags=MK_LBUTTON;) Parent 无法 完成 拖动
Eleven 2015-09-04
  • 打赏
  • 举报
回复
你WM_RBUTTONDOWN消息有响应吗?
pois 2015-09-04
  • 打赏
  • 举报
回复
引用 8 楼 VisualEleven 的回复:
你WM_RBUTTONDOWN消息有响应吗?
有响应的,进去了
pois 2015-09-04
  • 打赏
  • 举报
回复
引用 3 楼 schlafenhamster 的回复:
拖动 是 一串动作 void CChildView::OnLButtonDown( UINT nFlags, CPoint point ) { GetParent()->SendMessage(WM_NCLBUTTONDOWN, HTCAPTION, 0); } 由Parent 完成 拖动。而 void CChildView::OnRButtonDown( UINT nFlags, CPoint point ) { GetParent()->SendMessage(WM_NCLBUTTONDOWN, HTCAPTION, 0); } 因为 没法 传递 nFlags 标记(应该是 nFlags=MK_LBUTTON;) Parent 无法 完成 拖动
这个我改过了,没有用,而且发NCLBUTTONDOWN消息的时候,nFlags没有一起发出去
笨笨仔 2015-09-03
  • 打赏
  • 举报
回复
在OnRButtonDown中放一个断点,看能否收到操作消息!
schlafenhamster 2015-09-03
  • 打赏
  • 举报
回复

void CMyButton::OnLButtonDown(UINT nFlags, CPoint point) 
{
	CRect rcParent;
	CWnd *pParent=GetParent();
	pParent->GetClientRect(&rcParent);
	//afxDump << rcParent << "\n";
	if(m_Tracking)
	{
		if(MK_LBUTTON==nFlags)
		{
			if(Track(this,point))
			{
				MapWindowPoints(pParent,&m_rect);
				//afxDump << m_rect << "\n";
				if(	(m_rect.left  >= 0)	&& 
					(m_rect.top   >= 0) &&
					(m_rect.right <= rcParent.right) &&
					(m_rect.bottom <= rcParent.bottom))
				{// limit moving in the parent
					MoveWindow(&m_rect);// the button
				}
				CRect rc;
				GetWindowRect(&rc);
				rc.OffsetRect(-rc.left,-rc.top);
				m_rect=rc;// re-init
				//afxDump << rc << "\n";
			}
		}
	}
	else
	{
		CButton::OnLButtonDown(nFlags, point);
	}
}
木黑神 2015-09-03
  • 打赏
  • 举报
回复
记得在WM_LBUTTONDOWN中获取左键屏幕和客户区的坐标。 然后用 左键屏幕坐标-(左键客户区坐标-客户区左上角的坐标)。得到窗口左上角的坐标。 再在 WM_MOUSEMOVE中移动即可。
二班的码农 2015-09-02
  • 打赏
  • 举报
回复
WM_LBUTTONDOWN和WM_RBUTTONDOWN是鼠标消息吧,怎么用来实现左右键拖动
伊航 2015-09-02
  • 打赏
  • 举报
回复
OnRButtonDown 这个死活不能,我要吐血了,一样的代码一样的函数. ()->SendMessage(WM_NCLBUTTONDOWN, HTCAPTION, 0); ...... ()->SendMessage(WM_NCLBUTTONDOWN, HTCAPTION, 0); }
schlafenhamster 2015-09-02
  • 打赏
  • 举报
回复
拖动 是 一串动作 void CChildView::OnLButtonDown( UINT nFlags, CPoint point ) { GetParent()->SendMessage(WM_NCLBUTTONDOWN, HTCAPTION, 0); } 由Parent 完成 拖动。而 void CChildView::OnRButtonDown( UINT nFlags, CPoint point ) { GetParent()->SendMessage(WM_NCLBUTTONDOWN, HTCAPTION, 0); } 因为 没法 传递 nFlags 标记(应该是 nFlags=MK_LBUTTON;) Parent 无法 完成 拖动
sumos 2015-09-02
  • 打赏
  • 举报
回复
不要使用这种方式,本来就有一个现成的消息来给你处理 WM_NCHITTEST 返回 HTCAPTION,意味着拖动, 返回 HTLEFT,意味着窗口左边框可以拉伸 ...

15,979

社区成员

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

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