今天来讲一下SetCapture和ReleaseCapture函数。
这是我写button的三种状态时遇到的问题。我在创建button的时候,单独写了一个回调函数,用来专门对button的操作。
回调函数为m_OldProc = (WNDPROC)SetWindowLong(m_button, GWL_WNDPROC, (LONG)ButtonProc);
当我写button的WM_MOUSEHOVER、WM_MOUSEMOVE、WM_MOUSELEAVE、WM_LBUTTONDOWN(分别时鼠标的悬停、鼠标的移动、鼠标的离开,鼠标左键按下)时,button正常一个颜色(假设为黄色),鼠标悬停一个颜色(假设为绿色)、鼠标按下一个颜色(假设为红色),三种状态,当我成功运行时发现,鼠标按下不松开,当鼠标脱离button这个窗口时,button的颜色会变为正常的颜色,实际上我想要的结果并不是这样,正常的现象应该是:假设按下去的颜色为红色 ,按下去不松开,鼠标离开button的窗口,button保持红色。
我在WM_LBUTTONDOWN时加入SetCapture
();
在WM_LBUTTONUP时加入ReleaseCapture()
就能成功运行出来我想要的结果。
SetCapture: 该函数在属于当前线程的指定窗口里设置鼠标捕获。一旦窗口捕获了鼠标,所有鼠标输入都针对该窗口,无论光标是否在窗口的边界内。同一时刻只能有一个窗口捕获鼠标。如果鼠标光标在另一个线程创建的窗口上,只有当鼠标键按下时系统才将鼠标输入指向指定的窗口。
函数原型:HWND SetCapture(HWND hwnd);
ReleaseCapture:该函数功能是该函数从当前线程中的窗口释放鼠标捕获,并恢复通常的鼠标输入处理。
win32学习之路(六)
最新推荐文章于 2024-02-03 23:53:31 发布