编辑框在第一次输入时最好给出一个虚拟的输入提示信息文本,这样的效果更佳友好。,我在编辑框添加灰色提示字(html+VC)一文中简单介绍了一些方法,但是效果欠佳。

  原始的编辑框CEdit类没有这样的功能,我们可以通过继承来改造得到:https://www.codeproject.com/Articles/737/Dim-Edit-Control

 DimEditCtrl.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
 
/*|*\
|*|  File:      DimEditCtrl.h
|*|
|*|  By:        James R. Twine, TransactionWorks, Inc.
|*|             Copyright 2000, TransactionWorks, inc.
|*|  Date:      Thursday, September 21, 2000
|*|
|*|  Notes:     This Is The Implementation Of A "Dim Edit Control".
|*|             It Provides Visual Instructions Within The Edit
|*|             Control Itself.  It Can Be Used To Indicate Special
|*|             Properties Of A Edit Control Used On A Crowded
|*|             Interface
|*|
|*|             May Be Freely Incorporated Into Projects Of Any Type
|*|             Subject To The Following Conditions:
|*|
|*|             o This Header Must Remain In This File, And Any
|*|               Files Derived From It
|*|             o Do Not Misrepresent The Origin Of This Code
|*|               (IOW, Do Not Claim You Wrote It)
|*|
|*|             A "Mention In The Credits", Or Similar Acknowledgement,
|*|             Is *NOT* Required.  It Would Be Nice, Though! :)
\*|*/
#if !defined(AFX_DIMEDITCTRL_H__CF8D88FB_6945_11D4_8AC4_00C04F6092F9__INCLUDED_)
#define AFX_DIMEDITCTRL_H__CF8D88FB_6945_11D4_8AC4_00C04F6092F9__INCLUDED_

#pragma once
#endif // _MSC_VER > 1000
// DimEditCtrl.h : header file
//

//
//  This Specifies The Length Of The Dim Text Buffer...
//
;                // Dim Text Buffer Length

/////////////////////////////////////////////////////////////////////////////
// CDimEditCtrl window

class CDimEditCtrl : public CEdit
{
    // Construction
public:
    /**/
    CDimEditCtrl();                                 // Constructor

// Attributes
public:

// Operations
public:

void    SetShowDimControl( bool bShow );                // Show Or Hide The Dim Control
    void    SetDimText( LPCTSTR cpText );                   // Set The Dim Text
    void    SetDimColor( COLORREF crDColor );               // Set The Dim Color
    void    SetDimOffset( char cRedOS, char cGreenOS,
                          char cBlueOS );                           // Set The Dim Color Offset

// Overrides
    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CDimEditCtrl)
public:
    virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT &rect, CWnd *pParentWnd, UINT nID, CCreateContext *pContext = NULL);
protected:
    virtual void PreSubclassWindow();
    //}}AFX_VIRTUAL

// Implementation
public:
    virtual ~CDimEditCtrl();

// Generated message map functions
protected:
    //{{AFX_MSG(CDimEditCtrl)
    afx_msg void OnChange();
    afx_msg void OnSetfocus();
    afx_msg void OnPaint();
    afx_msg BOOL OnEraseBkgnd(CDC *pDC);
    afx_msg void OnSettingChange(UINT uFlags, LPCTSTR lpszSection);
    afx_msg void OnKillfocus();
    //}}AFX_MSG
    //  afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
    //  afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);

DECLARE_MESSAGE_MAP()

void        DrawDimText( void );                        // Draw The Dim Text

COLORREF    m_crDimTextColor;                           // "Hard" Dim Text Color
 ];            // Dim Text Buffer
    bool        m_bShowDimText;                             // Are We Showing The Dim Text?
    bool        m_bUseDimOffset;                            // Are We Using The Offset Colors (Not Hard Color)?
    char        m_cRedOS;                                   // Red Color Dim Offset
    char        m_cGreenOS;                                 // Green Color Dim Offset
    char        m_cBlueOS;                                  // Blue Color Dim Offset
    int         m_iDimTextLen;                              // Length Of Dim Text
};

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_DIMEDITCTRL_H__CF8D88FB_6945_11D4_8AC4_00C04F6092F9__INCLUDED_)

 DimEditCtrl.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
 
/*|*\
|*|  File:      DimEditCtrl.cpp
|*|
|*|  By:        James R. Twine, TransactionWorks, Inc.
|*|             Copyright 2000, TransactionWorks, inc.
|*|  Date:      Thursday, September 21, 2000
|*|
|*|  Notes:     This Is The Implementation Of A "Dim Edit Control".
|*|             It Provides Visual Instructions Within The Edit
|*|             Control Itself.  It Can Be Used To Indicate Special
|*|             Properties Of A Edit Control Used On A Crowded
|*|             Interface
|*|
|*|             May Be Freely Incorporated Into Projects Of Any Type
|*|             Subject To The Following Conditions:
|*|
|*|             o This Header Must Remain In This File, And Any
|*|               Files Derived From It
|*|             o Do Not Misrepresent The Origin Of This Code
|*|               (IOW, Do Not Claim You Wrote It)
|*|
|*|             A "Mention In The Credits", Or Similar Acknowledgement,
|*|             Is *NOT* Required.  It Would Be Nice, Though! :)
\*|*/
#include "stdafx.h"
#include "DimEdit.h"
#include "DimEditCtrl.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CDimEditCtrl

CDimEditCtrl::CDimEditCtrl() :
    m_bShowDimText( true ),                                 // Set The Dim Flag
    //  m_cRedOS( -0x40 ),                                      // Set The Default Dim Offset Colors
    //  m_cGreenOS( -0x40 ),                                    // Set The Default Dim Offset Colors
    //  m_cBlueOS( -0x40 ),                                     // Set The Default Dim Offset Colors
    //  m_bUseDimOffset( true ),                                // Use The Offset Colors
 ),                                     // No Dim Text Set Yet
    m_crDimTextColor( RGB( 0x00, 0x00, 0x00 ) )             // No "Hard" Dim Text Color
{
    m_caDimText[  ] = _T( '\0' );                          // Terminate The Buffer
    SetDimOffset( -0x40, -0x40, -0x40 );                    // Set The Dim Offset

return;                                                 // Done!
}

CDimEditCtrl::~CDimEditCtrl()
{
    return;                                                 // Done!
}

BEGIN_MESSAGE_MAP(CDimEditCtrl, CEdit)
    //{{AFX_MSG_MAP(CDimEditCtrl)
    ON_CONTROL_REFLECT(EN_CHANGE, OnChange)
    ON_CONTROL_REFLECT(EN_SETFOCUS, OnSetfocus)
    ON_WM_PAINT()
    ON_WM_ERASEBKGND()
    ON_WM_SETTINGCHANGE()
    ON_CONTROL_REFLECT(EN_KILLFOCUS, OnKillfocus)
    //}}AFX_MSG_MAP
    //  ON_WM_LBUTTONDOWN()
    //  ON_WM_LBUTTONDBLCLK()
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDimEditCtrl message handlers

void    CDimEditCtrl::PreSubclassWindow()
{
    CEdit::PreSubclassWindow();                             // Do Default...

SetShowDimControl( true );                              // Default To Show The Dim Control

return;                                                 // Done!
}

void    CDimEditCtrl::SetDimText( LPCTSTR cpDimText )
{
    if( cpDimText )                                         // If Dim Text Specified
    {
        _tcsncpy( m_caDimText, cpDimText, DIM_TEXT_LEN );   // Copy Over The Text
        m_caDimText[ DIM_TEXT_LEN ] = _T( '\0' );           // Enforce Termination (I Am Paranoid, I Know!)
        m_iDimTextLen = _tcslen( m_caDimText );             // Store Length Of The Dim Text
    }
    else                                                    // If No Dim Text
    {
        m_caDimText[  ] = _T( '\0' );                      // Just Terminate The Buffer (No Text)
;                                  // No Dim Text
    }
    if( m_bShowDimText )                                    // If Showing Any Dim Text
    {
        DrawDimText();                                      // Draw The Dim Text
    }
    return;                                                 // Done!
}

void CDimEditCtrl::SetShowDimControl( bool bShow )
{
    m_bShowDimText = bShow;                                 // Set The Dim Flag
    if( bShow )                                             // If Showing Any Dim Text
    {
        DrawDimText();                                      // Draw The Dim Text
    }
    return;                                                 // Done!
}

BOOL    CDimEditCtrl::Create( LPCTSTR lpszClassName, LPCTSTR lpszWindowName,
                              DWORD dwStyle, const RECT &rect, CWnd *pParentWnd, UINT nID,
                              CCreateContext *pContext )
{
    BOOL    bCreated = CWnd::Create( lpszClassName,
                                     lpszWindowName, dwStyle, rect,
                                     pParentWnd, nID, pContext );           // Try To Create Ourselves...

if( bCreated )                                          // If We Got Created
    {
        SetShowDimControl( true );                          // Show The Dim Control
    }
    return( bCreated );                                     // Return Creation Status
}

void CDimEditCtrl::OnChange()
{
    int iLen = GetWindowTextLength();                   // Get Control's Text Length

if( !iLen )                                             // If No Text
    {
        SetShowDimControl( true );                          // Show The Dim Text
    }
    else                                                    // If Text Now In The Control
    {
        SetShowDimControl( false );                         // Disable The Dim Text
    }
    return;                                                 // Done!
}

void CDimEditCtrl::OnSetfocus()
{
    if( m_bShowDimText )                                    // If Showing Any Dim Text
    {
        DrawDimText();                                      // Draw The Dim Text
    }
    return;                                                 // Done!
}

void    CDimEditCtrl::OnPaint()
{
    Default();                                              // Do Default Control Drawing

if( m_bShowDimText )                                    // If Showing Any Dim Text
    {
        DrawDimText();                                      // Draw The Dim Text
    }
    return;                                                 // Done!
}

void CDimEditCtrl::DrawDimText( void )
{
    if( !m_iDimTextLen )                                    // If No Dim Text
    {
        return;                                             // Stop Here
    }
    CClientDC   dcDraw( this );
    CRect       rRect;
    int         iState = dcDraw.SaveDC();                   // Save The DC State

GetClientRect( &rRect );                                // Get Drawing Area
 );                               // Add Sanity Space

dcDraw.SelectObject( (*GetFont()) );                    // Use The Control's Current Font
    dcDraw.SetTextColor( m_crDimTextColor );                // Set The Text Color
    dcDraw.SetBkColor( GetSysColor( COLOR_WINDOW ) );       // Set The Bk Color
    dcDraw.DrawText( m_caDimText, m_iDimTextLen, &rRect,
                     ( DT_CENTER | DT_VCENTER ) );                  // Draw The Dim Text

dcDraw.RestoreDC( iState );                             // Restore The DC State

return;                                                 // Done!
}

BOOL CDimEditCtrl::OnEraseBkgnd(CDC *pDC)
{
    BOOL    bStatus = CEdit::OnEraseBkgnd(pDC);

if( ( bStatus ) && ( m_bShowDimText ) )                 // If All Good, And Showing Any Dim Text
    {
        DrawDimText();                                      // Draw The Dim Text
    }
    return( bStatus );                                      // Return Erase Status
}

/*
void CDimEditCtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
    TRACE( _T( "Click...\n" ) );
    CEdit::OnLButtonDown(nFlags, point);
}

void CDimEditCtrl::OnLButtonDblClk(UINT nFlags, CPoint point)
{
    TRACE( _T( "DClick...\n" ) );
    CEdit::OnLButtonDblClk(nFlags, point);
}
*/

void CDimEditCtrl::SetDimOffset( char cRedOS, char cGreenOS, char cBlueOS )
{
    COLORREF    crWindow = GetSysColor( COLOR_WINDOW );
    BYTE        btRedOS = ( GetRValue( crWindow ) + cRedOS );
    BYTE        btGreenOS = ( GetGValue( crWindow ) + cGreenOS );
    BYTE        btBlueOS = ( GetBValue( crWindow ) + cBlueOS );

m_bUseDimOffset = true;                                 // Set The Flag
    m_cRedOS = cRedOS;                                      // Store Red Offset
    m_cGreenOS = cGreenOS;                                  // Store Green Offset
    m_cBlueOS = cBlueOS;                                    // Store Blue Offset
    m_crDimTextColor = RGB( (BYTE)btRedOS, (BYTE)btGreenOS,
                            (BYTE)btBlueOS );                               // Build The New Dim Color

return;                                                 // Done!
}

void CDimEditCtrl::SetDimColor( COLORREF crColor )
{
    m_bUseDimOffset = false;                                // Unset The Flag
    m_crDimTextColor = crColor;                             // Set The New Dim Color
;                  // No Offset

return;                                                 // Done!
}

void CDimEditCtrl::OnSettingChange(UINT uFlags, LPCTSTR lpszSection)
{
    CEdit::OnSettingChange(uFlags, lpszSection);

if( m_bUseDimOffset )                                   // If Using An Offset For The Dim Color
    {
        COLORREF    crWindow = GetSysColor( COLOR_WINDOW );

m_crDimTextColor = RGB( GetRValue( crWindow ) +
                                m_cRedOS, GetGValue( crWindow ) +
                                m_cGreenOS, GetBValue( crWindow ) +
                                m_cBlueOS );                                // Rebuild The Dim Color
    }
    return;                                                 // Done!
}

void CDimEditCtrl::OnKillfocus()
{
    int iLen = GetWindowTextLength();                   // Get Control's Text Length

if( !iLen )                                             // If No Text
    {
        SetShowDimControl( true );                          // Show The Dim Text
    }
    else                                                    // If Text Now In The Control
    {
        SetShowDimControl( false );                         // Disable The Dim Text
    }
    return;

}

VC++实现编辑框输入提示效果的更多相关文章

  1. 分享一个仅0.7KB的jQuery文本框输入提示插件

    由于项目需要,找过几个jQuery文本框输入提示插件来用,但总是有不满意的地方,要么体积较大,要么使用不便,要么会出现把提示文字作为文本框的值的情况.于是我们自己的开发团队制作了这个最精简易用的输入提 ...

  2. Jquery实现文本框输入提示

    一些用户体验好的表单都会在文本框里设置输入提示,文本框获取焦点时,提示内容消息,如果未输入,失去焦点时又会出现提示. 网上找到一个比较好用的控件jquery.inputDefault.js 使用方法: ...

  3. 转摘:ashx+jquery-autocomplete文本框输入提示功能Asp.net

    引入所需文件 <script type="text/javascript" src="JS/jquery-1.8.2.min.js"></sc ...

  4. VC中编辑框更新SetDlgItemText()与UpdateData()的区别

    SetDlgItemText(IDC_EDIT_RXDATA,m_strREData);  //前一个是ID号,后一个是编辑框的成员变量 UpdateData(FALSE);   它们都能更新编辑框的 ...

  5. MFC 编辑框输入16进制字符串转换为16进制数或者10进制数据计算

    1.编辑框添加变量,并选择变量类型为CString. 2.  使用“_tcstoul”函数将Cstring 类型转换为16进制/10进制数进行计算.

  6. MFC中 编辑框输入换行功能

    首先修改编辑框的属性: Multiline 设为true , Auto HScroll 设为true , Auto VScroll 设为 true . 然后响应PreTranslateMessage( ...

  7. 仿造w3school的试一试功能,实现左侧编辑框,右侧效果页面

    转自http://fhqllt.iteye.com/blog/836186 每次想快速测试页面效果的时候,特别是在学习前端代码的时候,就想到W3school的那个试一试功能,一直都是用他们那个在线的版 ...

  8. js搜索框输入提示(高效-ys8)

    <style type="text/css"> .inputbox .seleDiv { border: 1px solid #CCCCCC; display: non ...

  9. jquery php 百度搜索框智能提示效果

    这个程序是利用php+ajax+jquery 实现的一个仿baidu智能提示的效果,有须要的朋友能够下载測试哦. 代码例如以下 index.html文件,保保存成index.htm <!DOCT ...

随机推荐

  1. maven(3)------maven构建web项目详细步骤

    eclipse集成工具,轻松通过maven构建web项目步骤如下: 一, 右键,new -->project, 进入下一页面 二,选择"Maven Project", 点击下 ...

  2. django之对FileField字段的upload_to的设定

    用django开发,经常要处理用户上传的文件, 比如user模型里面如果又个人头像的字段 ImageField等等,而django在FielField字段(包括ImageField)的支持和扩展是做的 ...

  3. The power of now

    惊喜的发现,在这个短暂而又漫长的盛夏里心情开始随天气而变了(*^__^*) ...... <秘密>和<当下的力量>两者都一样,看起来费劲,不过还真的有点道理. <冰与火之 ...

  4. . net 源代码调试

    对于 .net framework 中的代码,光拿 Reflector 看是不够过瘾的,如果能够调试进去就好了! 其实,微软是提供了一套 sourcecode 的下载的: http://referen ...

  5. 将struts的jar包拷贝到WEB-INF/lib导致eclipse中配置好的javadoc失效

    我通过这个步骤导入了struts的jar包并且配置好了javadoc,且亲测可用: http://www.cnblogs.com/qrlozte/p/3173805.html 但是当我把struts的 ...

  6. vim显示行号、语法高亮、自动缩进、添加下划线的设置

    ubuntu默认是没有安装vim的,所以设置以前请先安装vim:sudo apt-get install vim. 然后 打开vim的配置文件:sudo vim /etc/vim/vimrc 或者 s ...

  7. VBA学习笔记(2)--新建word文档并插入文字

    说明(2017.3.20): 1. Dim As声明变量类型,Set赋值/初始化 2. With使后面的省略对象,直接点就行,后面要End With 3. Application.StatusBar ...

  8. Oracle 外键约束子表、父表

    CREATE TABLE employees(     employee_id      NUMBER(6),     last_name        VARCHAR2(25) NOT NULL, ...

  9. JS地毯式学习四

    1  窗口的位置 用来确定和修改 window 对象位置的属性和方法有很多. IE . Safari . Opera 和 Chrome都提供了 screenLeft 和 screenTop 属性,分别 ...

  10. 【Unity/Kinect】获取预制的手势信息KinectInterop.HandState

    Kinect使用了枚举KinectInterop.HandState来描述手势. 该手势指的是手掌的状态(张开/握拳),而不是说整个手臂的肢体动作(Gesture). 同样是需要嵌套在Kinect获取 ...