2011-01-02 18 views
5

असल में मैं एक संदेश को ट्रिगर करने के लिए एक एंटर चाहता हूं जिसे मैं संपादित कर सकता हूं जब एक संपादन नियंत्रण हर फोकस करता है और उपयोगकर्ता एंटर दबाता है। ऑनलाइन सभी समाधान subclassing के बारे में प्रतीत होता है, लेकिन मैं सोच रहा था कि इसके आसपास एक और तरीका था?win32 C++ एक संपादन नियंत्रण inot subclassing में 'enter' का पता लगाने?

उदाहरण के लिए, मेरे बटन में पहचानकर्ता ID_BUTTON_SEND है। यहां बताया गया है कि मैं इसकी कल्पना कैसे करता हूं;

case WM_COMMAND: 
    switch (LOWORD(wParam)) 
      case ID_BUTTON_SEND 
       if ('enter was pressed') 
         do this 
       else 
         default 

... आप विचार प्राप्त :) मैं http://support.microsoft.com/kb/102589 लेकिन स्पष्ट रूप से विकल्प पढ़ा है 1 dosn't मेरे लिए खास मतलब।

चीयर्स

उत्तर

3

सबसे अच्छा तरीका है को पकड़ने के लिए इस TranslateMessage कहा जाता हो जाता है से पहले है। इसलिए, यदि एमएफसी का उपयोग करते हैं, तो CWnd :: PreTranslateMessage को ओवरराइड करें। यदि केवल विन एपीआई का उपयोग करते हैं, तो बस अपने संदेश पंप में जांच करें कि संदेश में अनुवाद से पहले संदेश क्या है।

+0

मैं किस संदेश को देखता हूं? WM_CHAR, WM_KEYPRESS या कुछ? साथ ही - क्या इसका प्रदर्शन प्रभाव पड़ता है, हर बार एक संदेश प्राप्त होने के लिए यह चेक कर रहा है? – KaiserJohaan

+0

प्रदर्शन समस्याओं के बारे में चिंता न करें, वे लापरवाह हैं। हालांकि, मैं भूल गया कि किस संदेश को देखना है :) लेकिन जैसा कि यह अभी तक tranaslated नहीं मिला है, मुझे लगता है कि WM_KEYDOWN देखने के लिए एक होगा। (या WM_KEYUP भी)। – kellogs

3

आप फोकस चेंज इवेंट को जाल कर सकते हैं और जब संपादन नियंत्रण फोकस ईवेंट प्राप्त करता है तो बस डायलॉग डिफॉल्ट बटन को * ID_BUTTON_SEND * बटन के रूप में बदलें। फिर जब फोकस खो जाता है तो यह डिफ़ॉल्ट बटन ध्वज हटा दें।

इसका मतलब यह होगा कि जब भी संपादन नियंत्रण में फोकस होता है तो उपयोगकर्ता प्रवेश करता है तो संवाद स्वचालित रूप से * ID_BUTTON_SEND * डिफ़ॉल्ट बटन को आग लगा देगा।

आप GWL_STYLE बटन के को BS_DEFPUSHBUTTON जोड़कर बटन डिफ़ॉल्ट बटन बना सकते हैं।

2

बस केबी आलेख पर दोहराने के लिए। विकल्प 1 के लिए आप वास्तव में WM_COMMAND में IDOK को संभाल सकते हैं।

case WM_COMMAND: 
    if(wParam == IDOK){ 
    ENTER WAS PRESSED 
    }else{ 
    REGULAR EVENT HANDLING 
    } 

यह एंटर की जांच करने के लिए एक बहुत आसान और साफ तरीका है।

+0

धन्यवाद! दिन के लिए इसे ट्रैक करने की कोशिश कर रहे थे। ओपी के लिए, आप नियंत्रण के एचडब्ल्यूएनडी की जांच कर सकते हैं, क्योंकि यह आपके लैपरम में है। –

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

  • कोई संबंधित समस्या नहीं^_^