Search code examples
mfceditcontrol

how to restrict copy paste in a Textbox, in MFC?


I am developing a small application in MFC... there is a little problem..hope you guys would help me regarding this...Here we go..the problem is...I have 6 little edit control(Text box) in which I will allow the user to enter some numbers..I have limited the number of chars/textbox as 4 but its allowing the user to copy and paste n numbers....How do I restrict the copy paste option in an Edit control....Please help me...


Solution

  • I found 2 ways of solving the problem....please check the below...

    1st method:

    class CNoPasteEdit: public CEdit
    {
    public:
    CNoPasteEdit();
    ~CNoPasteEdit();
    protected:
    // This line will need to be added by hand because WM_PASTE is not available in
    // class wizard
    afx_msg void OnPaste(WPARAM wParam, LPARAM lParam);
    afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
    DECLARE_MESSAGE_MAP()
    };
    

    Then you will need to edit the .cpp file for this class like so

    CNoPasteEdit::CNoPasteEdit(){
    // Put any construction code here
    }
    
    CNoPasteEdit:~:CNoPasteEdit(){
    // Put any destruction code here
    }
    
    BEGIN_MESSAGE_MAP(CNoPasteEdit, CEdit)
    // This line is needed because there is no default macro for WM_PASTE messages
    // This line will also need to be added by hand
    ON_MESSAGE(WM_PASTE, OnPaste)
    ON_WM_CONTEXTMENU()
    END_MESSAGE_MAP()
    
    void CNoPasteEdit::OnPaste(WPARAM wParam, LPARAM lParam){
    // Put any code here you want to execute when the user right clicks on the edit
    // control. Just leave it blank to disable the menu
    }
    
    void CNoPasteEdit::OnContextMenu(CWnd* pWnd, CPoint point){
    // Put any code here you want to execute when the user tries to paste into the edit
    // conrtol. Just leave it blank to prevent pasting.
    }
    

    2nd method: Handle the ON_EN_CHANGE event and capture the text in the CString and check if its more than the limited character..if its..you can clear the text box with a warning message...