关于使用SetClassLong和SetCapture问题 问:我用SetClassLong设置对话框光标时遇到了一些问题,当我使用SetCapture捕获鼠标时, 答:光标形状并没有变化时,以下为原代码: void CMouseMoveSimDlg::OnLButtonDown(UINT nFlags, Cpoint point) { myDragging = TRUE; myhPrevCursor = (HCURSOR)SetClassLong( m_hWnd, GCL_HCURSOR, (long)LoadCursor(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDC_SELECTCURSOR ))); SetCapture(m_hWnd); Cdialog::OnLButtonDown(nFlags, point); } 如果移去SetCapture这一行,光标就会正确的设置,但它就不能正确的捕获 鼠标消息.那儿出问题了(环境NT4.0 VC6.0)? 答:1).如果我没有记错的话,SetClassLong只影响调用它以后的建立的窗口.可以 使用 SetWindowLong来改变已存在的窗口的属性.(为什么要用SetClassLong来改 变光标形状, 为什么不在消息WM_SETCURSOR中替换.) 2).我也不清楚问题出在那儿,但下面的方法可以克服SetCapture带来的问题,它是 从 我的程序里面提出来的: void CScribbleView::OnLButtonDown(UINT nFlags, Cpoint point) { ........ SetCapture(); // Capture the mouse until button up myhPrevCursor = (HCURSOR)SetClassLong( m_hWnd, GCL_HCURSOR, (long)LoadCursor(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDC_CURSOR1))); SetCursor(LoadCursor(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDC_CURSOR1))); ........ } void CScribbleView::OnLButtonUp(UINT nFlags, Cpoint point) { if( GetCapture() != this ) return; ........ ReleaseCapture(); SetClassLong( m_hWnd, GCL_HCURSOR, (long)myhPrevCursor); return; }