WTL 自定义EDIT控件,如何屏蔽不想要的按键消息。

forwtl 2007-11-01 02:21:16
class CMyEdit : public CWindowImpl<CMyEdit, CEdit>
{
public:
BEGIN_MSG_MAP(CMyEdit)
MESSAGE_HANDLER(WM_CONTEXTMENU, OnContextMenu)
MESSAGE_HANDLER(WM_KEYDOWN, OnKeyDown)
MESSAGE_HANDLER(WM_KEYUP, OnKeyUp)
MESSAGE_HANDLER(WM_SYSKEYDOWN, OnKeyDown)
MESSAGE_HANDLER(WM_SYSKEYUP, OnKeyUp)
END_MSG_MAP()

LRESULT OnKeyDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{

return 0;
}

LRESULT OnKeyUp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
return 0;
}
}

我现在想屏蔽掉 backspace, delete 按键和所有的字符消息(就是只接收数字),
请问要如何做?
...全文
461 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
vcPlayer 2007-11-01
  • 打赏
  • 举报
回复

class CMyEdit : public CWindowImpl <CMyEdit, CEdit>
{
public:
BEGIN_MSG_MAP(CMyEdit)
MESSAGE_HANDLER(WM_CHAR, OnChar)
END_MSG_MAP()
LRESULT OnChar(UINT nMsgType, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
// 这下面四个如果值小于0则表示按下:
short nLeftShift = GetKeyState(VK_LSHIFT),
nRightShift = GetKeyState(VK_RSHIFT),
nLeftCtrl = GetKeyState(VK_LCONTROL),
nRightCtrl = GetKeyState(VK_RCONTROL);

if(wParam > '9' || wParam < '0')
{
bHandled = TRUE;
}
else
{
bHandled = FALSE;
}
return S_OK;
}
} ;

forwtl 2007-11-01
  • 打赏
  • 举报
回复
只有hook这一种办法吗?
  • 打赏
  • 举报
回复
屏蔽 ALT ,CTRL那就做键盘hook了
同进程连dll都不用.
weiym 2007-11-01
  • 打赏
  • 举报
回复
class   CMyEdit :  public   CWindowImpl <CMyEdit, CEdit>
{
public:
BEGIN_MSG_MAP(CMyEdit)
MESSAGE_HANDLER(WM_CHAR, OnChar)
END_MSG_MAP()
LRESULT OnChar(UINT nMsgType, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
if(wParam > '9' || wParam < '0')
{
bHandled = TRUE;
}
else
{
bHandled = FALSE;
}
return S_OK;
}
} ;
forwtl 2007-11-01
  • 打赏
  • 举报
回复
如果是要屏蔽 ALT ,CTRL ??
  • 打赏
  • 举报
回复
在WM_CHAR消息中处理

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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