我在用win32 api写程序。
我自己实现了一个窗口类。
此窗口类的功能类似于edit控件。
当拥有Focus的时候,能够接收键盘输入,并显示光标(Caret)。现在的问题是,这个窗口类,如果是用在主界面frame中,是可以正常工作的。但是,如果用在对话框中,即做为对话框的子窗口,就接收不到WM_CHAR消息了。
另外,用在对话框中,光标(Caret)的闪烁是正常的。
即单击窗口内部,光标(Caret)就会闪烁。
单击同一对话框内其他edit控件内部,光标(Caret)就会消失。
麻烦大家指导一下。多谢!部分代码如下:
case WM_LBUTTONDOWN:
{
    if (GetFocus()!=hwnd)
    {
        SetFocus(hwnd);
    }
    else
    {      SetCaretPos((pt.x/cxChar)*cxChar, (pt.y/cyChar)*cyChar);
    }
    
    return 0;
}case   WM_SETFOCUS:
{
    CreateCaret(hwnd, NULL, cxChar, cyChar);
    SetCaretPos((pt.x/cxChar)*cxChar, (pt.y/cyChar)*cyChar);
    ShowCaret(hwnd);
    return 0 ;
}case   WM_KILLFOCUS:
{
    HideCaret(hwnd);
    DestroyCaret();
    return 0 ;
}对话框控件界面

解决方案 »

  1.   

    已解决.
    如下网址给出了解决方法.
    http://social.msdn.microsoft.com/Forums/vstudio/en-US/3f7766c1-9352-47f5-963f-137f20acf4cc/win32-modal-dialog-box在自定义的窗口类中,增加如下消息处理代码即可.case WM_GETDLGCODE:
       if(lParam)
       {
            LPMSG lpmsg = (LPMSG)lParam;
            if( lpmsg->message == WM_CHAR)
            {
                 return DLGC_WANTCHARS;
            }
       }
       return 0;
      

  2.   

    学习了,WM_CHAR 消息,注意一下 wParam 和 lParam 所包含的信息