正在阅读:MFC的子类化技术MFC的子类化技术

2004-07-14 09:53 出处:CSDN 作者:laiyiling 责任编辑:linjixiong

  下面我开始按步骤完成对这两个窗口的子类化:
  第一步,在主窗口对话框初始化的时候,保存原有的窗口过程,并设置新的窗口过程。代码如下:


  case WM_INITDIALOG:
    EditProc = (WNDPROC)SetWindowLong(GetDlgItem(hDlg, IDC_EDIT), GWL_WNDPROC, (LONG)ProcFloat);
    StaticProc = (WNDPROC)SetWindowLong(GetDlgItem(hDlg, IDC_ST_HOMEPAGE), GWL_WNDPROC, (LONG)ProcLink);
    break;



  第二步,实现浮点编辑框的窗口过程:


LRESULT CALLBACK ProcFloat(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
  if (Msg == WM_CHAR && wParam != '.' && (wParam <= '0' || wParam >= '9') && wParam != VK_BACK)
  {
    MessageBeep(MB_OK);
    return 0;
  }
  else
    return CallWindowProc(EditProc, hWnd, Msg, wParam, lParam);
}



  这里需要解释的是,由于控件本身的需求,所以只需要拦截一个消息,就是接收字符的WM_CHAR。当用户输入的字符不是小数点、0~9以及退格键(注意不要少了退格键,否则你将会发现你的编辑框无法删除输入错误的数字)的时候,就发出一声声音以提示输入错误。至于其它的消息,则调用原有的回调函数进行处理。

    子类化的限制:因子类化是对已存在的某一窗口产生作用,所以其作用范围只有这一窗,又由于可能不清楚该类怎样使用额外的类和窗口字节,所以不能保证正确使用这些空间存储信息,最后,因窗口已存在,所以新的窗口过程永远不会接收到第一个WM_CREATE消息或其他以前的消息。子类化只适用于改变极少数窗口行为和属性时使用。
 


察看评论详细内容 我要发表评论
作者笔名 简短内容 发表时间
:
键盘也能翻页,试试“← →”键

相关文章

关注我们

最新资讯离线随时看 聊天吐槽赢奖品