@Heinz Traub के रूप में यह समस्या RegisterClass
या RegisterClassEx
कॉल पर परिभाषित कर्सर से आती है। आप शायद है कोड की तरह:
BOOL CMyWnd::RegisterWindowClass()
{
WNDCLASS wndcls;
// HINSTANCE hInst = AfxGetInstanceHandle();
HINSTANCE hInst = AfxGetResourceHandle();
if (!(::GetClassInfo(hInst, _T("MyCtrl"), &wndcls)))
{
// otherwise we need to register a new class
wndcls.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;
wndcls.lpfnWndProc = ::DefWindowProc;
wndcls.cbClsExtra = wndcls.cbWndExtra = 0;
wndcls.hInstance = hInst;
wndcls.hIcon = NULL;
wndcls.hCursor = AfxGetApp()->LoadStandardCursor(IDC_ARROW);
wndcls.hbrBackground = (HBRUSH) (COLOR_3DFACE + 1);
wndcls.lpszMenuName = NULL;
wndcls.lpszClassName = _T("MyCtrl");
if (!AfxRegisterClass(&wndcls))
{
AfxThrowResourceException();
return FALSE;
}
}
return TRUE;
}
जहां wndcls.hCursor
कहते हैं जब WM_SETCURSOR
संदेश फेंक दिया जाता है क्या कर्सर उपयोग किया जाएगा; यह हर बार होता है जब यह माउस चाल होता है और न केवल।
कक्षा में 'संदेश नक्शा WM_SETCURSOR
संदेश के लिए एक प्रवेश जोड़ें::
BEGIN_MESSAGE_MAP(CMyWnd, CWnd)
//... other messages
ON_WM_SETCURSOR()
END_MESSAGE_MAP()
विधि OnSetCursor
है, जो माता-पिता वर्ग को पार कर जाएगी जोड़ें'
मैं एक ऐसी ही समस्या इस तरह से हल कार्यान्वयन :
BOOL CMyWnd::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
if (SomeCondition())
return FALSE;
return __super::OnSetCursor(pWnd, nHitTest, message);
}
स्पष्टीकरण: जब SomeCondition()
सच है, आप माता-पिता के कार्यान्वयन फोन नहीं होंगे।हो सकता है आप हमेशा चाहते हैं माता पिता वर्ग व्यवहार के साथ अधिक्रमण नहीं एक कर्सर के लिए है, तो आप सिर्फ एक भी कम विधि की जरूरत है:
BOOL CMyWnd::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
return FALSE;
}
और हेडर फाइल में विधि की घोषणा है:
afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
नल में बदलने से समस्या हल नहीं हुई। कर्सर को बदलने की अनुमति देने के बजाय, कर्सर हमेशा सामान्य तीर के बजाय <-> था। और संदेश WM_SETCURSOR संदेश हमेशा भेजे जा रहे थे, क्योंकि मैं जासूस ++ 64 बिट का उपयोग करके सत्यापित कर सकता था। हालांकि, मैंने उकसाया क्योंकि आपने मुझे कुछ नया सीख लिया है। – sergiol