Caret的有关问题

Caret的问题
创建,确定只调用了一次,并且是在窗口已经创建之后才调用的

static HBITMAP hBitmap = NULL;
static Color color;
m_pCaretImage->GetHBITMAP(color, &hBitmap);//m_pCaretImage是一个GDI+对象,我也试过用CBitmap,也不行
::CreateCaret(m_hWnd, hBitmap, (int)m_pCaretImage->GetWidth(), (int)m_pCaretImage->GetHeight());

获取输入焦点,确定每次都调用到了的

void COwnerEdit::OnSetFocus(CWnd* pOldWnd)
{
CWnd::OnSetFocus(pOldWnd);
while(::ShowCaret(m_hWnd)==FALSE)
{
DWORD dw = GetLastError();//永远返回都是5(拒绝访问)
dw = 0;
}
}

//失去焦点,确定每次都调用到了的

void COwnerEdit::OnKillFocus(CWnd* pNewWnd)
{
CWnd::OnKillFocus(pNewWnd);
HideCaret();
}


麻烦各位给我看看这是咋回事啊,光标只有第一次能显示,之后就不能显示了。
Caret 怪事

------解决方案--------------------
while(::ShowCaret(m_hWnd)==FALSE)
    {
        DWORD dw = GetLastError();//永远返回都是5(拒绝访问)
        dw = 0;
    }
while改成if试试,免得进入死循环了
------解决方案--------------------
CreateCaret 位置是不是有问题 ?
------解决方案--------------------
你把 “hBitmap” 去掉 (=NULL) ,create 看看

------解决方案--------------------
void COwnerEdit::OnSetFocus(CWnd* pOldWnd)
{
    CWnd::OnSetFocus(pOldWnd);//屏蔽试试,不调用默认的基类函数,或移到最后执行
    while(::ShowCaret(m_hWnd)==FALSE)
    {
        DWORD dw = GetLastError();//永远返回都是5(拒绝访问)
        dw = 0;
    }
}
void COwnerEdit::OnKillFocus(CWnd* pNewWnd)
{
    CWnd::OnKillFocus(pNewWnd);//屏蔽试试,或移到最后执行,
    HideCaret();
}