Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > GridCtrl теряет фокус


Автор: VKlim 16.1.2009, 13:36
Доброго всем!
В силу необходимости работаю с MFCGridControl, стянутым с CodeProject.com. Все вроде хорошо и нравится, но сейчас столкнулся со следующей проблемой:
Хотелось мне, чтобы по нажатию Enter фокус в табличке автоматически перескакивал на следующую ячейку (ну удобно вроде как). Добавил следующий код:
Код

BOOL CEtalonWizardDlg::PreTranslateMessage (LPMSG pMsg)
{
    if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN)
    {
        CCellID m_Cell;
        m_Cell = m_Grid.GetFocusCell();
        if ((m_Cell.col != -1)&&(m_Cell.row != -1))
        {
            m_Cell.col++;
            if (m_Cell.col == MAX_COLS)
            {
                m_Cell.col = 1;
                m_Cell.row++;
                if (m_Cell.row >= m_Grid.GetRowCount())
                {
                    m_Grid.InsertRow("");
                    CString strRowCount;
                    strRowCount.Format("%d", m_Grid.GetRowCount() - 1);
                    m_Grid.SetItemText(m_Grid.GetRowCount() - 1, 0, strRowCount);
                }
            }
            m_Grid.Refresh();
            m_Grid.SetFocusCell(m_Cell);
        }
    }
    return CDialog::PreTranslateMessage(pMsg);
}

Вот. И все в принципе работает, если в ячейке что-то вводить. Но стоит нажать Enter в ячейке, не вводя никаких символов - фокус бесследно теряется :(
Самое главное, что в табличке он как-будто бы есть. Я смотрел функцией GetFocusCell()? там значения столбца и колонки сообтветствуют нужным. Но на диалоге ни ячейка не светится, да и вводить текст никуда не получается, пока мышкой не кликнешь в нужную ячейку. 
Отсюда возникла мысль, что фокус куда-то улетел (на другой контрол), но непонятно почему и что делать, чтобы такого не происходило. Собсно, в этом и вопрос. прав ли я и как с этим бороться.
Заранее спасибо!

Автор: KEHT 16.1.2009, 20:02
m_Grid.Refresh() перерисовывает область, возможно из за этого фокус сбивается. И почему в перерисовываете ее до того как изменили ячейку?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)