win32 SetFocus有关问题

win32 SetFocus问题
我在用win32 api写程序。
程序是单线程的,即只有WinMain函数这一个主线程。
我遇到的问题抽象描述如下:
程序的主窗口(即frame窗口)中,有两个子窗口A和B。
A中有一个子窗口C,他是一个标准的edit控件。
B中有一个子窗口D,他是我自己实现的一个窗口,功能类似于edit。
我在D窗口的WM_LBUTTONDOWN消息处理中,调用SetFocus,使得D能够响应键盘输入。
本来这一切都是正常的。
但问题是,如果鼠标点击一下窗口C的内部,使得C获得Focus。
然后,再点击窗口D的内部,无论如何点击,D都无法获得Focus了。
SetFocus(hwnd)之后, GetLastError返回值为5。

我已经检查了我调用SetFocus(hwnd)时传入的窗口句柄,句柄是完全正确的。
win32 API

------解决方案--------------------
在D窗口中点击了就不需要调用SetFocus了
------解决方案--------------------
贴一下代码。
或者参考http://stackoverflow.com/questions/9643536/setfocus-fails-with-a-valid-window-handle
------解决方案--------------------
你的代码里是怎么写的?
------解决方案--------------------
其实点击窗口D的内部,D已经Focus了,估计是Caret在那个标准的edit控件KillFocus时被Destroy了,所以没法显示出来,正确的做法是:

  case   WM_SETFOCUS:
  {
    CreateCaret(hwnd, NULL, 1, cyChar);
    SetCaretPos(cur_data_len*cxChar, 0);
    ShowCaret(hwnd);
    return 0 ;
  }

  case   WM_KILLFOCUS:
  {
   HideCaret(hwnd);
   DestroyCaret();
   return 0 ;
  }
  case WM_LBUTTONDOWN:
  {
    SetFocus(hwnd);
    return 0;
  }