移动无边框窗体(发送WM_SYSCOMMAND和SC_MOVE + HTCAPTION消息)
MESSAGE_HANDLER(WM_NCHITTEST, OnNcHitTest)
LRESULT OnNcHitTest(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& /*bHandled*/)
{
::SendMessage(m_hWndMainFrame,WM_SYSCOMMAND, SC_MOVE|0x0002,(LPARAM)&pt);
}
如果是对话框则直接
LRESULT OnNcHitTest(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& /*bHandled*/)
{
POINT pt;
pt.x = GET_X_LPARAM(lParam);
pt.y = GET_Y_LPARAM(lParam);
GetClientRect(&rc);
if(rc.PtInRect(pt)){
return HTCAPTION;
}
return 0;
}
本文介绍了一种通过发送WM_SYSCOMMAND和SC_MOVE+HTCAPTION消息来实现移动无边框窗体的方法。对于对话框,文章提供了一个具体的实现示例,通过获取鼠标位置并判断其是否在客户区内部,来确定是否允许移动。
399

被折叠的 条评论
为什么被折叠?



