15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту




Отображение позиции курсора в Status Bar


Автор: Edward Duffy.

Во многих приложениях, в которых используются классы CEditView и CRichEditView , оногда бывает необходимо, чтобы пользователь знал местоположение курсора, как это сделано во многих текстовых редакторах.

Добавьте ячейку в таблицу строк(string table) ID_INDICATOR_CURPOS и описание "Ln %d, Col %d  ". Дополнительные пробелы сделают возможным отображение позиции курсора, если его значения перевалят за 100. Добавьте ID_INDICATOR_CURPOS в Ваш массив индикаторов (indicators[] array) в файле MainFrm.cpp. В карте сообщений, в файле объявлений для класса CMainFrame, добавьте следующее объявление функции:

afx_msg void OnUpdateCurPosIndicator(CCmdUI *pCmdUI);
  • Теперь в фактической карте сообщений, в файле MainFrm.cpp добавьте следующий макро-вызов:
    ON_UPDATE_COMMAND_UI(ID_INDICATOR_CURPOS, 
                         OnUpdateCurPosIndicator)
    
  • И в заключении, создайте функцию в файле MainFrm.cpp
    void CMainFrame::OnUpdateCurPosIndicator(CCmdUI *pCmdUI)
    {
     CString strCurPos;
     int nLineNum, nColNum;
     int nSelStart, nSelEnd;
    
     // Вам понадобится получать указатель
     // на елемент редактирования(edit control) в окне просмотра
     m_wndEditCtrl->GetSel(nSelStart, nSelEnd);  
                                                      
     nLineNum = m_wndEditCtrl->LineFromChar(nSelStart);
     
     nColNum = nSelStart - m_wndEditCtrl->LineIndex(nLineNum);
    
     strCurPos.Format(ID_INDICATOR_CURPOS, 
                      nLineNum+1, 
                      nColNum+1);
     
     m_wndStatusBar.SetPaneText(
      m_wndStatusBar.CommandToIndex(ID_INDICATOR_CURPOS), 
      strCurPos);
    }
    

    Downloads

    Скачать демонстрашку - 38 Kb
    Скачать исходник - 2 Kb