#include <windows.h> 
LRESULT CALLBACK WndProc      (HWND, UINT, WPARAM, LPARAM) ;
static TCHAR szAppName[] = TEXT ("POPPAD") ;
#define EDITID   1int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
     MSG       msg ;
     HWND      hwnd ;
     WNDCLASS  wndclass ;
     wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
     wndclass.lpfnWndProc   = WndProc ;
     wndclass.cbClsExtra    = 0 ;
     wndclass.cbWndExtra    = 0 ;
     wndclass.hInstance     = hInstance ;
     wndclass.hIcon         = LoadIcon (hInstance, szAppName) ;
     wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
     wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
     wndclass.lpszMenuName  = szAppName ;
     wndclass.lpszClassName = szAppName ;
     
     if (!RegisterClass (&wndclass))
     {
          MessageBox (NULL, TEXT ("This program requires Windows NT!"),
                      szAppName, MB_ICONERROR) ;
          return 0 ;
     }
     
     hwnd = CreateWindow (szAppName, NULL,
                          WS_OVERLAPPEDWINDOW,
                          CW_USEDEFAULT, CW_USEDEFAULT,
                          CW_USEDEFAULT, CW_USEDEFAULT,
                          NULL, NULL, hInstance, szCmdLine) ;
     
     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 HWND hwndEdit ;
     static HINSTANCE hInst ;
     static BOOL      bNeedSave = FALSE ;
     static TCHAR     szFileName[MAX_PATH], szTitleName[MAX_PATH] ;     
     switch (message)
     {
     case WM_CREATE :
           hInst = ((LPCREATESTRUCT) lParam) -> hInstance ;
          hwndEdit = CreateWindow (TEXT ("edit"), NULL,
                              WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL |
                              WS_BORDER | ES_LEFT | ES_MULTILINE |
                              ES_NOHIDESEL | ES_AUTOHSCROLL | ES_AUTOVSCROLL,
                              0, 0, 0, 0,
                              hwnd, (HMENU) EDITID, hInst, NULL) ;
  return 0;
 case WM_SETFOCUS:
 SetFocus(hwnd);
 return 0;
 case WM_CLOSE:
 DestroyWindow(hwnd);
 return 0;
 case WM_DESTROY:
  PostQuitMessage (0) ;
 return 0;
 case WM_SIZE : 
 MoveWindow (hwndEdit, 0, 0, LOWORD (lParam), HIWORD (lParam), TRUE) ;
          return 0 ;
 case WM_LBUTTONDOWN:
 MessageBox(hwndEdit,TEXT("dsa"),TEXT("lbutton"),0);
 return 0;
 case WM_CHAR:
 MessageBox(hwndEdit,TEXT("keydown"),TEXT("lbutton"),0);
 return 0;
 }
     return DefWindowProc (hwnd, message, wParam, lParam) ;
}当按键的时候 为什么 WM_CHAR 没有任何反应?

解决方案 »

  1.   

    没有 ,我在考虑 是不是为edit窗口加一个消息函数
      

  2.   

    你创建了edit控件而焦点被该控件获得,因此若你想要获得该消息得在消息循环中处理
      

  3.   

    《windows程序设计》有例子的。
      

  4.   


    LRESULT CALLBACK EDProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
    {// get oldproc
    WNDPROC OldEdProc=(WNDPROC)GetProp(hWnd,"EditOldProc");
    switch(Msg)
        {
    case WM_CHAR:
    OutputDebugString("haha\n");
    break;
    }
    return CallWindowProc(OldEdProc, hWnd, Msg, wParam, lParam);
    } LRESULT APIENTRY WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) 

    case WM_CREATE:
    {
    m_hEdit=CreateEdit(hwnd);
    WNDPROC EdOldProc = (WNDPROC)SetWindowLong(m_hEdit, GWL_WNDPROC, (LONG)EDProc);
    SetProp(m_hEdit,// handle of window
    "EditOldProc",  // atom or address of string
    EdOldProc);
    SendMessage(m_hEdit,EM_SETLIMITTEXT,65535,0);