के साथ विफल रहता है मेरे पास कई कस्टम नियंत्रण वाले प्रोग्राम हैं। इन कस्टम नियंत्रणों में से एक एक पाठ इनपुट नियंत्रण है। चूंकि जब आप उस पर क्लिक करते हैं तो विंडो स्वचालित रूप से कीबोर्ड फ़ोकस प्राप्त नहीं करती है, इसलिए मैंने अपने प्रोग्राम में एक माउस हुक बनाया है जो उस विंडो में क्लिक करते समय विंडो पर SetFocus() को कॉल करता है। हालांकि, वहाँ एक समस्या है।SetFocus() वैध विंडो हैंडल
यदि कोई अन्य प्रोग्राम फोकस करता है जब आप मेरे प्रोग्राम की विंडो (या उस विंडो में से किसी भी नियंत्रण) पर क्लिक करते हैं तो SetFocus() विफल रहता है। इसके बाद मुझे सफल होने के लिए फिर से क्लिक करना होगा।
SetFocus(Hwnd = 00410c06) failed. Error code: 87
SetFocus(Hwnd = 00410c06) returned success.
SetFocus(Hwnd = 01740fc8) failed. Error code: 87
SetFocus(Hwnd = 01740fc8) returned success.
त्रुटि कोड 87 ERROR_INVALID_PARAMETER है, लेकिन मैं स्पष्ट रूप से कार्य करने के लिए एक वैध खिड़की संभाल गुजर रहा हूँ, तो क्यों:
LRESULT CALLBACK kbfProc(int nCode, WPARAM wParam, LPARAM lParam) // Keyboard focus switching procedure
{
switch(nCode)
{
case HC_ACTION:
{
if(wParam == WM_LBUTTONDOWN || wParam == WM_NCLBUTTONDOWN)
{
MOUSEHOOKSTRUCT * mhs = (MOUSEHOOKSTRUCT*) lParam;
if(SetFocus(mhs->hwnd) == NULL)
{
printf("SetFocus(Hwnd = %.8x) failed. Error code: %lu\n", mhs->hwnd, GetLastError());
} else {
printf("SetFocus(Hwnd = %.8x) returned success.\n", mhs->hwnd);
}
}
}
break;
}
return CallNextHookEx(0, nCode, wParam, lParam);
}
और उन printf कॉल के उत्पादन में इस है: कोड यह क्या यह असफल रहा है?
जब भी माउस चलता है तो आपका केबीएफप्रोक कॉलबैक विधि माना जाता है? हमें WINAPI विधि पर कॉल दिखाएं। इसके अलावा, मुझे लगता है कि एक फॉर्म लोड इवेंट के माध्यम से फोकस सेट करना बेहतर है। –
@opatachibueze WINAPI विधि? फॉर्म लोड इवेंट? क्या वह .NET से नहीं है? मैं सी ++ का उपयोग कर रहा हूं ... – Gogeta70
आपके कोड का कौन सा हिस्सा LRESULT CALLBACK KbfProc –