这个类和MFC的CEdit类完全一样,只是增加下面一点功能:
一:如果用户通过DDX_Text宏给它初始化初值,那么当用户第一次把光标定位到该EDit框时要清除掉初始值,举个例子:一个编辑框,让用户输入自己的姓名,用DDX_Text宏给该编辑框初始化初值为“请输入您的姓名”,当用户定位光标于该编辑框准备输入自己的姓名时,“请输入您的姓名”这段文字要马上清除,就像新安装的QQ的登陆界面一样(QQ号编辑框初始显示为“请输入你的QQ号”类似)。 二:虽然通过DDX_Text宏给它初始化了初值,但后来编程者又调用了SetWindowText改变了初值(在用户第一次定位光标于该编辑框之前),那么当用户第一次定位光标于该编辑框时,不清除原内容,举个例子:用DDX_Text宏给该编程框初始化初值为“请输入您的姓名”,后来又SetWindowText("江泽名");,那么“江泽名”不应该在用户第一次定位光标于编辑框时被消除,即使是SetWindowText("请输入您的姓名");也一样。
一:如果用户通过DDX_Text宏给它初始化初值,那么当用户第一次把光标定位到该EDit框时要清除掉初始值,举个例子:一个编辑框,让用户输入自己的姓名,用DDX_Text宏给该编辑框初始化初值为“请输入您的姓名”,当用户定位光标于该编辑框准备输入自己的姓名时,“请输入您的姓名”这段文字要马上清除,就像新安装的QQ的登陆界面一样(QQ号编辑框初始显示为“请输入你的QQ号”类似)。 二:虽然通过DDX_Text宏给它初始化了初值,但后来编程者又调用了SetWindowText改变了初值(在用户第一次定位光标于该编辑框之前),那么当用户第一次定位光标于该编辑框时,不清除原内容,举个例子:用DDX_Text宏给该编程框初始化初值为“请输入您的姓名”,后来又SetWindowText("江泽名");,那么“江泽名”不应该在用户第一次定位光标于编辑框时被消除,即使是SetWindowText("请输入您的姓名");也一样。
解决方案 »
- 为啥我releasedc了还会提示重复定义呢
- 请教vc6的头文件中,这几行代码的意思是什么?
- select()的等待问题
- 为什么keybd_event在程序中失效呢?
- 谁能把这段该死的C代码转成C++的?实在是看不懂这些bt语法。。
- 怎样把VC7工程降级到VC6
- Toolkit pro 8.6中无法读取文件中的汉字
- 如何设置CEdit CRichEdit CCombox的字长度(个数问题)
- mfc怎么用 第三方软件打包成exe文件,可以在别的电脑上直接运行?
- 我想学JAVA,如何?
- 请教再卸载的时候怎忙才能把已经删除了得文件删除回来?
- 请问如何显示/隐藏MDI的一个childframe的切分窗口的分割条?
1:重载Onsetfocus(),得到焦点就把编辑框清空。
2:也重载Onsetfocus(),在里面用getwindowtext()判断清除或不清除。
给分吧
你可以 截获 WM_SETTEXT,
如果编辑框为TAB第1的话,用户根本看不到“请输入您的姓名”这句话!!因为它在第一次运行的时候就会自动获得焦点。对于“用getwindowtext()判断清除或不清除”,我上面说得很清楚,并不一定是“请输入您的姓名”这样的文字就清除,有可能有个人的名字就叫“请输入您的姓名”呢?请认真看清楚我对第二个要求的描述。再说了,如果判断是“请输入您的姓名”就清除,那这个类还有什么通用性,若某人想把提示信息写成“please input your name”,那是不是要判断编辑框中的内容是不是等于“please input your name”,等于就删除,如果另外一个人想再用别的提示信息呢?!!这个问题我想了很久才决定要问的,请大家实际的写个这样的类好吗?反正从CEdit重载,也写不了多少程序。
如果从CWnd来继承,那倒是没有任何问题,可是编辑与输入那一块很麻烦的,既然有CEdit类,为什么不从它继承呢。
LRESULT CT1Dlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
if(message==WM_SETTEXT)
{
MessageBox("A");
return false;
}
return CDialog::DefWindowProc(message, wParam, lParam);
}
申明:
class CSTEdit : public CEdit
{
public:
CSTEdit();
//{{AFX_VIRTUAL(CSTEdit)
protected:
virtual LRESULT DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam);
//}}AFX_VIRTUALpublic:
virtual ~CSTEdit();
protected:
int nSetText;
//{{AFX_MSG(CSTEdit)
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
//}}AFX_MSG DECLARE_MESSAGE_MAP()
};
实现:
CSTEdit::CSTEdit()
{
nSetText = 0;
}CSTEdit::~CSTEdit()
{
}BEGIN_MESSAGE_MAP(CSTEdit, CEdit)
//{{AFX_MSG_MAP(CSTEdit)
ON_WM_LBUTTONDOWN()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// CSTEdit message handlers
LRESULT CSTEdit::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
if (nSetText < 2 && message == WM_SETTEXT)
nSetText++; return CEdit::DefWindowProc(message, wParam, lParam);
}void CSTEdit::OnLButtonDown(UINT nFlags, CPoint point)
{
if (1 == nSetText)
SetWindowText("");
CEdit::OnLButtonDown(nFlags, point);
}
{
if (nSetText < 2)
if (WM_SETTEXT == message)
nSetText++;
else if (WM_CHAR == message)
nSetText = 2; return CEdit::DefWindowProc(message, wParam, lParam);
}