用CreateWindow创建一窗口,再用CreateWindow创建一个EDIT,当在这个Edit中按下字符时,我想截获它,不让Edit中有字符,不要跟我说用hook
我的窗口过程如下:
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wparam,LPARAM lparam)
{
  case(message)
  {
       case WM_DESTROY:
           PostQuitMessage(0);
           return 0;
       case WM_COMMAND:
           if(LOWORD(wparam)==4004)//注:4004是edit的id
              {
                  //这里改怎么做???                   
              }
            return 0;
   }
   return DefWindowProc(hwnd,message,wparam,lparam);
}

解决方案 »

  1.   

    可以用窗口子类化方法
    用OldProc = (WNDPROC)SetWindowLong(hwnd/*edit窗口*/, GWL_WNDPROC,newProc/*自定义窗口过程*/);LRESULT CALLBACK newProc(HWND hWnd , UINT iMsg , WPARAM wParam , LPARAM lParam)
    {
         switch(iMsg)
        {
          case WM_CHAR:
                return CallWindowProc(oldProc , ......);
              
        }
         
    }
      

  2.   

    方向错了。你应该创建一个CEdit派生类。BOOL CMyEdit::PreTranslateMessage(MSG *pMsg)
    {
    if(pMsg->message == WM_KEYDOWN) // 拦截击键消息
    {
    // do anyting you like.
    return TRUE;
    }
    return CEdit::PreTranslateMessage(pMsg);
    }
      

  3.   

    case WM_CHAR:
    return 0;
      

  4.   

    case WM_COMMAND:
               if(LOWORD(wparam)==4004)//注:4004是edit的id
               {
                 if( HIWORD(wparam) == EN_CHANGE )
                 {
                   HWND hwndEdit = (HWND)lParam;
                   if( ::GetWindowTextLength( hwndEdit ) ) //如果输入了内容
                   {
                     ::SetWindowTextLength( hwndEdit, "" ); //清空内容
                     return 0;
                   }
                 }
               }
      

  5.   

    sorry! 
    应该将::SetWindowTextLength( hwndEdit, "" ); //清空内容
    改为:::SetWindowText( hwndEdit, "" ); //清空内容
      

  6.   

    // Main message loop:
    while (GetMessage(&msg, NULL, 0, 0)) 
    {
    if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) 
    {
    bool bignore=false;
    if(msg.message==WM_CHAR)
    {
    HWND hwnd=GetFocus();
    char clsbuf[128];
    GetClassName(hwnd,clsbuf,128);
    if(0==stricmp(clsbuf,"edit"))
    {
    OutputDebugString("wm_char in edit");
    bignore=true;
    }
    }
    if(!bignore)
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
    }
    }