2010-01-02 7 views
7

जब मैं टैब कुंजी या तीर कुंजियों का उपयोग करके अपने संवाद पर सीईडीआईटी नियंत्रण में जाता हूं तो नियंत्रण में सभी पाठ का चयन किया जाता है। यह व्यवहार मुझे समस्याएं पैदा कर रहा है और मैं इसे पसंद करूंगा अगर नियंत्रण कर्सर को पाठ के प्रारंभ (या अंत) पर रखे और कुछ भी नहीं चुना। क्या ऐसा करने का कोई आसान तरीका है (उदा। नियंत्रण की एक संपत्ति जिसे मैं सेट कर सकता हूं)?सीईडीआईटी फोकस प्राप्त करते समय सब कुछ चुनता है

उत्तर

2

मुझे नहीं लगता कि ऐसी शैली मौजूद है।
लेकिन आप विज़ार्ड के साथ OnSetfocus हैंडलर जोड़ सकते हैं:

void CMyDlg::OnSetfocusEdit1() 
{ 
    CEdit* e = (CEdit*)GetDlgItem(IDC_EDIT1); 
    e->SetSel(0); // <-- hide selection 
} 
+0

यह मेरे लिए काफी काम नहीं करता था। मेरा संपादन नियंत्रण बहु-रेखा है और जिनकी सामग्री नियंत्रण से लम्बी हो सकती है (मेरे पास लंबवत स्क्रॉल बार है)। BNoScroll को सत्य होने की आवश्यकता है, और "कोई चयन नहीं" के लिए चयन -1, 0 है, इसलिए मेरा कोड इसे 'e-> SetSel (-1, 0, TRUE) जैसा कहता है; '। यह किसी भी मौजूदा स्क्रॉल स्थिति को बनाए रखता है क्योंकि मैं अपने संवाद के नियंत्रण के माध्यम से टैब करता हूं, लेकिन यह भी सुनिश्चित करता है कि फोकस मेरे संपादन नियंत्रण पर वापस लौटने के बाद कुछ भी नहीं चुना जाता है। – franji1

7

अपने लक्ष्य को प्राप्त करने का एक और तरीका चयनित किए जाने से सामग्री को रोकने के लिए है। एक संवाद में नियंत्रणों पर नेविगेट करते समय संवाद प्रबंधक अपने व्यवहार से संबंधित कुछ गुणों के बारे में संबंधित नियंत्रणों से पूछताछ करता है। डिफ़ॉल्ट रूप से एक संपादन नियंत्रण DLGC_HASSETSEL ध्वज (दूसरों के बीच) के साथ प्रतिक्रिया करता है ताकि संवाद प्रबंधक को इंगित किया जा सके कि इसकी सामग्री स्वतः चयनित होनी चाहिए।

इस के आसपास काम करने के लिए आपको संपादन नियंत्रण को उपclass करना होगा और झंडे को उचित रूप से बदलने के लिए WM_GETDLGCODE संदेश को संभालना होगा।

class CPersistentSelectionEdit : public CEdit { 
public: 
    DECLARE_MESSAGE_MAP() 
    afx_msg UINT OnGetDlgCode() { 
     // Return default value, removing the DLGC_HASSETSEL flag 
     return (CEdit::OnGetDlgCode() & ~DLGC_HASSETSEL); 
    } 
}; 

BEGIN_MESSAGE_MAP(CPersistentSelectionEdit, CEdit) 
    ON_WM_GETDLGCODE() 
END_MESSAGE_MAP() 

अगला उपवर्ग वास्तविक नियंत्रण: सबसे पहले, CEdit से एक वर्ग निकाले जाते हैं। यह करने के कई तरीके हैं। चीज़ों को आसान बनाने सिर्फ अपने संवाद वर्ग में प्रकार CPersistentSelectionEdit की m_Edit1 एक वर्ग के सदस्य घोषित करने और DoDataExchange में एक उपयुक्त प्रविष्टि जोड़ने: इस बिंदु कोई संपादन नियंत्रण इसकी सामग्री नहीं है कि राशि पर

// Subclass the edit control 
DDX_Control(pDX, IDC_EDIT1, m_Edit1); 

स्वत: चयन जब नेविगेट किया गया। आप जो भी चाहें चयन को नियंत्रित कर सकते हैं।

+2

यदि आप इस विधि का उपयोग करते हैं तो आप टेक्स्ट बॉक्स पर ध्यान केंद्रित करते समय हर बार कैरेट स्थिति खोना नहीं चाहते हैं, इसलिए मैं इसे पसंद करूंगा। – DanDan

संबंधित मुद्दे