Edit Box输入了回车后去调用一个按钮的函数,怎么设计?就是当用户填完EditBox后输入回车直接调用一个按钮,但是EditBox没有处理Keyup或kendown的消息阿??大侠帮帮忙,感激不尽

解决方案 »

  1.   

    取得EditBox的窗口过程地址,保存之,可用GetWindowLong(hWnd, GWL_WNDPROC),
    再用LONG SetWindowLong(
      HWND hWnd,       // handle of window
      int nIndex,      // offset of value to set
      LONG dwNewLong   // new value
    );在dwNewLong是自己定义的窗口过程的地址,处理完WM_KEYDOWN消息后SendMessage到原来的窗口过程
      

  2.   

    /*----------------------------------------
       HEAD.C -- Displays beginning (head) of file
                 (c) Charles Petzold, 1998
      ----------------------------------------*/#include <windows.h>#define ID_LIST     1
    #define ID_TEXT     2#define MAXREAD     8192
    #define DIRATTR     (DDL_READWRITE | DDL_READONLY | DDL_HIDDEN | DDL_SYSTEM |                      DDL_DIRECTORY | DDL_ARCHIVE  | DDL_DRIVES)
    #define DTFLAGS     (DT_WORDBREAK | DT_EXPANDTABS | DT_NOCLIP | DT_NOPREFIX)
    LRESULT CALLBACK WndProc  (HWND, UINT, WPARAM, LPARAM) ;
    LRESULT CALLBACK ListProc (HWND, UINT, WPARAM, LPARAM) ;WNDPROC OldList ;int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                        PSTR szCmdLine, int iCmdShow)
    {
         static TCHAR szAppName[] = TEXT ("head") ;
         HWND         hwnd ;
         MSG          msg ;
         WNDCLASS     wndclass ;
         
         wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
         wndclass.lpfnWndProc   = WndProc ;
         wndclass.cbClsExtra    = 0 ;
         wndclass.cbWndExtra    = 0 ;
         wndclass.hInstance     = hInstance ;
         wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
         wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
         wndclass.hbrBackground = (HBRUSH) (COLOR_BTNFACE + 1) ;
         wndclass.lpszMenuName  = NULL ;
         wndclass.lpszClassName = szAppName ;
         
         if (!RegisterClass (&wndclass))
         {
              MessageBox (NULL, TEXT ("This program requires Windows NT!"),
                          szAppName, MB_ICONERROR) ;
              return 0 ;
         }
         
         hwnd = CreateWindow (szAppName, TEXT ("head"),
                              WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN,
                              CW_USEDEFAULT, CW_USEDEFAULT,
                              CW_USEDEFAULT, CW_USEDEFAULT,
                              NULL, NULL, hInstance, NULL) ;
         
         ShowWindow (hwnd, iCmdShow) ;
         UpdateWindow (hwnd) ;
         
         while (GetMessage (&msg, NULL, 0, 0))
         {
              TranslateMessage (&msg) ;
              DispatchMessage (&msg) ;
         }
         return msg.wParam ;
    }LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
         static BOOL     bValidFile ;
         static BYTE     buffer[MAXREAD] ;
         static HWND     hwndList, hwndText ;
         static RECT     rect ;
         static TCHAR    szFile[MAX_PATH + 1] ;
         HANDLE          hFile ;
         HDC             hdc ;
         int             i, cxChar, cyChar ;
         PAINTSTRUCT     ps ;
         TCHAR           szBuffer[MAX_PATH + 1] ;     switch (message)
         {
         case WM_CREATE :
              cxChar = LOWORD (GetDialogBaseUnits ()) ;
              cyChar = HIWORD (GetDialogBaseUnits ()) ;
              
              rect.left = 20 * cxChar ;
              rect.top  =  3 * cyChar ;
              
              hwndList = CreateWindow (TEXT ("listbox"), NULL,
                                  WS_CHILDWINDOW | WS_VISIBLE | LBS_STANDARD,
                                  cxChar, cyChar * 3,
                                  cxChar * 13 + GetSystemMetrics (SM_CXVSCROLL),
                                  cyChar * 10,
                                  hwnd, (HMENU) ID_LIST,
                                  (HINSTANCE) GetWindowLong (hwnd, GWL_HINSTANCE),
                                  NULL) ;          GetCurrentDirectory (MAX_PATH + 1, szBuffer) ;
              
              hwndText = CreateWindow (TEXT ("static"), szBuffer,
                                  WS_CHILDWINDOW | WS_VISIBLE | SS_LEFT,
                                  cxChar, cyChar, cxChar * MAX_PATH, cyChar,
                                  hwnd, (HMENU) ID_TEXT,
                                  (HINSTANCE) GetWindowLong (hwnd, GWL_HINSTANCE),
                                  NULL) ;
              
              OldList = (WNDPROC) SetWindowLong (hwndList, GWL_WNDPROC,
                                                   (LPARAM) ListProc) ;
              
              SendMessage (hwndList, LB_DIR, DIRATTR, (LPARAM) TEXT ("*.*")) ;
              return 0 ;
              
         case WM_SIZE :
              rect.right  = LOWORD (lParam) ;
              rect.bottom = HIWORD (lParam) ;
              return 0 ;
              
         case WM_SETFOCUS :
              SetFocus (hwndList) ;
              return 0 ;
              
         case WM_COMMAND :
              if (LOWORD (wParam) == ID_LIST && HIWORD (wParam) == LBN_DBLCLK)
              {               if (LB_ERR == (i = SendMessage (hwndList, LB_GETCURSEL, 0, 0)))
                        break ;
                   
                   SendMessage (hwndList, LB_GETTEXT, i, (LPARAM) szBuffer) ;
                   
                   if (INVALID_HANDLE_VALUE != (hFile = CreateFile (szBuffer, 
                             GENERIC_READ, FILE_SHARE_READ, NULL, 
                             OPEN_EXISTING, 0, NULL)))               {
                        CloseHandle (hFile) ;
                        bValidFile = TRUE ;
                        lstrcpy (szFile, szBuffer) ;
                        GetCurrentDirectory (MAX_PATH + 1, szBuffer) ;                    if (szBuffer [lstrlen (szBuffer) - 1] != `\\')
                             lstrcat (szBuffer, TEXT ("\\")) ;
                        SetWindowText (hwndText, lstrcat (szBuffer, szFile)) ;
                   }
                   else
                   {
                        bValidFile = FALSE ;
                        szBuffer [lstrlen (szBuffer) - 1] = `\0' ;                         // If setting the directory doesn't work, maybe it's
                             // a drive change, so try that.                    if (!SetCurrentDirectory (szBuffer + 1))
                        {
                             szBuffer [3] = `:' ;
                             szBuffer [4] = `\0' ;
                             SetCurrentDirectory (szBuffer + 2) ;
                        }                         // Get the new directory name and fill the list box.                    GetCurrentDirectory (MAX_PATH + 1, szBuffer) ;
                        SetWindowText (hwndText, szBuffer) ;
                        SendMessage (hwndList, LB_RESETCONTENT, 0, 0) ;
                        SendMessage (hwndList, LB_DIR, DIRATTR, 
                                               (LPARAM) TEXT ("*.*")) ;
                   }
                   InvalidateRect (hwnd, NULL, TRUE) ;
              }
              return 0 ;     case WM_PAINT :
              if (!bValidFile)
                   break ;          if (INVALID_HANDLE_VALUE == (hFile = CreateFile (szFile, 
                      GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL)))
              {
                   bValidFile = FALSE ;
                   break ;
              }          ReadFile (hFile, buffer, MAXREAD, &i, NULL) ;
              CloseHandle (hFile) ;               // i now equals the number of bytes in buffer.
                   // Commence getting a device context for displaying text.          hdc = BeginPaint (hwnd, &ps) ;
              SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)) ;
              SetTextColor (hdc, GetSysColor (COLOR_BTNTEXT)) ;
              SetBkColor   (hdc, GetSysColor (COLOR_BTNFACE)) ;               // Assume the file is ASCII          DrawTextA (hdc, buffer, i, &rect, DTFLAGS) ;          EndPaint (hwnd, &ps) ;
              return 0 ;
              
         case WM_DESTROY :
              PostQuitMessage (0) ;
              return 0 ;
         }
         return DefWindowProc (hwnd, message, wParam, lParam) ;
    }
         
    LRESULT CALLBACK ListProc (HWND hwnd, UINT message, 
                               WPARAM wParam, LPARAM lParam)
    {
         if (message == WM_KEYDOWN && wParam == VK_RETURN)
              SendMessage (GetParent (hwnd), WM_COMMAND, 
                           MAKELONG (1, LBN_DBLCLK), (LPARAM) hwnd) ;
              
         return CallWindowProc (OldList, hwnd, message, wParam, lParam) ;
    }
      

  3.   

    大哥,能不能用MFC例程阿,我这个不懂诶
      

  4.   

    http://expert.csdn.net/Expert/topic/2680/2680624.xml?temp=.5508539看看这个贴子,像是用mfc的
      

  5.   

    可个相似,很好,感激不尽,结贴。(送分给jronald(深白色))
      

  6.   

    咳,我问题还是没有解决,那个大虾给各MFC例程好吗,就是有一个EditBox和按纽,然后在EditBox输入回车后,自动调用那个按纽函数,给个例程吧,小弟感激不尽。还有怎么显示我给的分总和不对阿???请重新验证???怎么还是不能给分阿?