在主窗口hwnd中添加EDIT控件IDC_Edit1每次往Edit控件中输入字符应该有WM_CHAR发出求问一下这个WM_CHAR 是发给hwnd的呢 还是IDC_Edit1控件啊?谢谢如果发送这个控件的话 如何对输入字符相应啊 谢谢

解决方案 »

  1.   

    发给控件自己的,自己继承一个CEdit控件,处理onchar消息
      

  2.   

    奇怪的是 ,我加入如下代码 这个Edit控件在运行的时候看都看不到了 不能显示了 怪事 求问怎么回事呢?
    谢谢void adSettingWnd::OnInitDialog()
    {
    //set default off time
    HWND ID;
    HWND hwnd;
    ID=GetDlgItem(GetHWnd(),IDC_RB_1m);
    SendMessage(ID,BM_SETCHECK ,BST_CHECKED,0) ; hwnd=GetDlgItem(GetHWnd(),IDC_Test_Edit);
    LONG ret=SetWindowLong(hwnd,GWL_WNDPROC,(LONG)EditCtlProc); //这句话加了Edit控件消失
    if(ret == 0)
    {
    RETAILMSG(1,(L"error in Set WindowsLong \n"));
    }
    BOOL bRet = ::SendMessage( hwnd, WM_SETTEXT, 2038, (LPARAM)L"" );
    ::SendMessage( hwnd, EM_SETLIMITTEXT, 2038, 0 );
    //SetWindowLong(hwnd,GWL_WNDPROC,(LONG)EditCtlProc);
    }
      

  3.   

    to: Amuro1987218  and Mackz 
    默认窗口是哪个窗口? 
    自己的窗口过程是指 EDIT控件窗口么?
    谢谢
      

  4.   

    默认窗口过程就是你用SetWindowLong之后返回的那个函数指针所指向的过程,他可以对创建、绘制、销毁等(作用在EDIT上)消息进行默认的处理,而你的EditCtlProc可能并没有这些处理而是针对自己感兴趣的消息进行了处理,简单的说,WM_CREATE消息不做响应CreateWindow就不会成功,窗口不会出现
      

  5.   


    关键还是要看你EditCtlProc的实现。如果Edit控件消失不见,很可能是控件的重绘消息没有响应。
      

  6.   

    可以输入了 但是还是有问题 不知道为什么我往EDIT控件输入数据的时候 但是我得到它的长度却是0!!! get它的text却是空的 不知道这是怎么回事呢?谢谢EditCtlProc函数:
    WNDPROC s_oldPinProc; LRESULT CALLBACK EditCtlProc(
    HWND    hWndCtrl,
    UINT    message,
    WPARAM  wParam,
    LPARAM  lParam)
    {
    LRESULT ret = 0; HWND hwndParent = GetParent(hWndCtrl);
    LONG dwThis = GetWindowLong(hwndParent, GWL_USERDATA);

    adSettingWnd *pThis = reinterpret_cast<adSettingWnd*>(dwThis);
     ret = CallWindowProc(s_oldPinProc, hWndCtrl, message, wParam, lParam);

     if (message != 0)
    {
    // Otherwise, call the control's wndproc.
    switch (message)
    {
    case WM_CHAR:
    pThis->GetTextEdit(hWndCtrl);
    RETAILMSG(1,(L"WM_CHAR in EDIT WROC \n"));
    break;
    }
    } return ret;
    } }
    HRESULT adSettingWnd::GetTextEdit(HWND hwnd)
    {
    HRESULT hr=S_OK;
    LPCWSTR pszText;
    HWND editHwnd;
    HWND textHwnd;
    WCHAR Textbuf[25];
    LPTSTR lpString;
    int TextLen;
    editHwnd=GetDlgItem(hwnd,IDC_Test_Edit);
    textHwnd=GetDlgItem(hwnd,IDC_Test_Text);
    GetWindowText(editHwnd,lpString,2400);

    TextLen=GetWindowTextLength( editHwnd); hr=StringCchPrintf(Textbuf,sizeof(Textbuf),(TEXT("%s")),lpString)
                   // 下面输出Textlen ==0  lpString是空的 不知道这是怎么回事呢?谢谢
    RETAILMSG(1,(L"Textlen =%d and lpString=%s \n",TextLen,lpString)); hr = ElementSetStringAttribute(ad_mTextElement, ATTR_TEXT,lpString/*LastBuf*/);
    if(hr!=S_OK)
    RETAILMSG(1,(L"Set word error \n"));
    return hr;
    }