zoukankan      html  css  js  c++  java
  • MFC CEdit 垂直居中

    参考:

    通过发送 EM_SETRECT 消息使 VC 编辑框 文本垂直居中

    这个功能容易受到其他功能影响,例如皮肤 设置控件位置大小 设置颜色等,调试时请先排除其他干扰因素。

    其实是发送 EM_SETRECT 消息改变输入字符串的位置

    1.在Edit控件所在对话框 OnInitDialog 函数中增加代码

    1     CRect rect;
    2     GetDlgItem(IDC_EDIT1)->GetClientRect(&rect);
    3     rect.OffsetRect(5, 30); //设置内容的左边距与上边距,大小自适取
    4     ((CEdit*)GetDlgItem(IDC_EDIT1))->SetPasswordChar(_T('*')); //设置字符显示为密码模式
    5     ::SendMessage(((CEdit*)GetDlgItem(IDC_EDIT1))->m_hWnd, EM_SETRECT, 0, (LPARAM)&rect);

    2.修改Edit控件的属性Multiline 为 True

    Multiline说明是“如果控件文本对控件宽度而言太长,则将文本折为多行” 听起来好像是智能一样,但无论是输入还是SetWindowText都是1行

    多行是输入时ctrl+enter换行,在edit中输入enter响应的是对话框的enter消息

    3.为edit实现单独的enter处理则重载PreTranslateMessage函数

    此时在edit中输入回车和ctrl+回车都会被捕获了

     1 BOOL xxxDlg::PreTranslateMessage(MSG* pMsg)
     2 {
     3     // TODO: 在此添加专用代码和/或调用基类
     4     //int my_ID = GetWindowLong(pMsg->hwnd, GWL_ID);//消息发生的控件id
     5     //if (my_ID == GetDlgItem(IDC_EDIT1)->GetDlgCtrlID())//消息发生的控件id == edit的id
     6     CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);
     7     if (pMsg->hwnd == pEdit->GetSafeHwnd())
     8     {
     9         if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN)//键盘 回车键
    10         {
    11             //在这里添加edit回车响应代码
    12             return TRUE;
    13         }
    14     }
    15 
    16     return CDialogEx::PreTranslateMessage(pMsg);
    17 }
  • 相关阅读:
    [BZOJ4755][JSOI2016]扭动的回文串(manacher+Hash)
    十二省联考2019部分题解
    [BZOJ2959]长跑(LCT+并查集)
    [BZOJ4541][HNOI2016]矿区(平面图转对偶图)
    笛卡尔树
    [CF896C]Willem, Chtholly and Seniorious(珂朵莉树)
    [BZOJ4349]最小树形图
    [BZOJ1858][SCOI2010]序列操作(线段树)
    [PA2014]Parking
    [PA2014]Budowa
  • 原文地址:https://www.cnblogs.com/ckrgd/p/14412146.html
Copyright © 2011-2022 走看看