【问题标题】:Subclassing an edit text control to accept lowercase characters when shift is pressed子类化编辑文本控件以在按下 shift 时接受小写字符
【发布时间】:2012-11-15 03:17:54
【问题描述】:

我有一个编辑文本控件,我希望在按下 SHIFT 键时将其子类化以允许使用小写字符,因为默认情况下该控件只允许接受大写字符。

所以我的问题是如何将控件中的打字模式从小写更改为大写。

我使用的是 WIN32,我成功捕获了 WM_CHAR 事件: WNDPROC ancienneEditProc; LRESULT CALLBACK EditTextProc(HWND hwnd, UINT mssg, WPARAM wParam, LPARAM lParam) { 开关(短信) {
案例 WM_CHAR: { 字符 [2]; 字符[0] = (char)wParam; 字符[1] = 0; 如果(HIWORD(GetKeyState(VK_SHIFT))) { AnsiLower(字符); } wParam = 字符[0]; } 休息; } 返回 CallWindowProc(ancienneEditProc, hwnd, mssg, wParam, lParam); } 但问题是如何在捕获 WM_CHAR 后更新编辑文本控件以接受小写。

【问题讨论】:

    标签: c++ winapi


    【解决方案1】:

    我假设您使用的是 win32 或 MFC 文本编辑。只需捕捉 WM_CHAR 事件。

    在 MFC 上,使用消息映射:

    在你的 .h

    class YourEdit public CEdit
    {
        afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
        DECLARE_MESSAGE_MAP()
    };
    

    在您的 .cpp 中

    BEGIN_MESSAGE_MAP(YourEdit, CEdit)
        ON_WM_CHAR()
    END_MESSAGE_MAP()
    
    YourEdit::::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
    {
        nchar = toupper(nchar);
        CWnd::OnChar(nChar,nRepCnt,nFlags);
    }
    

    见:http://msdn.microsoft.com/en-us/library/3zzfkd75%28v=vs.71%29.aspx

    【讨论】:

    • 确保您还处理一般更改消息以捕获正在粘贴的数据。
    猜你喜欢
    • 2012-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-11
    • 1970-01-01
    相关资源
    最近更新 更多