关于重写Edit控件的WM_SETFOCUS消息函数

hhh_hao 2011-03-04 03:14:14
非MFC,基于Win32的自己写的Edit控件,重写了下它的WM_SETFOCUS消息函数

void MyeEditCtrl::OnSetFocus()
{
SetWindowText(L"");
}


这样写了之后,Edit激活后没有输入光标显示了,不重写是正常的。

MFC中可以这样写,继承CEdit

void CGreyEdit::OnSetFocus(CWnd* pOldWnd)
{
SetWindowText(L"");
CEdit::OnSetFocus(pOldWnd);
}


我的问题是怎么样才能让我的Edit正常工作.

...全文
349 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
hhh_hao 2011-03-04
  • 打赏
  • 举报
回复
可以了,参考了MFC的代码,


void MyeEditCtrl::OnSetFocus()
{
SetWindowText(L"");
::CallWindowProc(m_wndprocSuperClass, GetHWnd(), WM_SETFOCUS, 0, 0);
}


Eleven 2011-03-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 hhh_hao 的回复:]
而且会发现这个写了之后,Edit上的文字没法选中了
[/Quote]
估计你要处理的问题还有很多滴,Good Luck!
Eleven 2011-03-04
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 hhh_hao 的回复:]
引用 6 楼 visualeleven 的回复:

你直接派生CEdit多简单,可以省去不少麻烦


工程不是MFC的
[/Quote]
工程不是MFC,你SDK还不是一样可以做啊
hhh_hao 2011-03-04
  • 打赏
  • 举报
回复
而且会发现这个写了之后,Edit上的文字没法选中了
hhh_hao 2011-03-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 visualeleven 的回复:]

你直接派生CEdit多简单,可以省去不少麻烦
[/Quote]

工程不是MFC的
Eleven 2011-03-04
  • 打赏
  • 举报
回复
你直接派生CEdit多简单,可以省去不少麻烦
hhh_hao 2011-03-04
  • 打赏
  • 举报
回复
有没有找到默认的显示方法,我不处理这个消息是正常的
Eleven 2011-03-04
  • 打赏
  • 举报
回复
// Load the application-defined caret resource.

hCaret = LoadBitmap(hinst, MAKEINTRESOURCE(120));

// Create a bitmap caret.

CreateCaret(hwnd, hCaret, 0, 0);
调用SetCaretPos来设置它的位置,ShowCaret和HideCaret来显示和隐藏插入符
具体用法参考MSDN文档
Eleven 2011-03-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hhh_hao 的回复:]
引用 1 楼 visualeleven 的回复:

那你要自己控制插入符的显示和隐藏
C/C++ code
BOOL ShowCaret(
HWND hWnd
);


没有效果,我现在的结果相当在MFC中不调用CEdit::OnSetFocus(pOldWnd);
[/Quote]
你要创建插入符啊,你不创建当然显示不出来,CreateCaret();
hhh_hao 2011-03-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 visualeleven 的回复:]

那你要自己控制插入符的显示和隐藏
C/C++ code
BOOL ShowCaret(
HWND hWnd
);
[/Quote]

没有效果,我现在的结果相当在MFC中不调用CEdit::OnSetFocus(pOldWnd);
Eleven 2011-03-04
  • 打赏
  • 举报
回复
那你要自己控制插入符的显示和隐藏
BOOL ShowCaret(         
HWND hWnd
);

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧