Форум программистов CodeGuru
23 Июль 2018, 09:53:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: активизация окна rich.edit  (Прочитано 18266 раз)
0 Пользователей и 1 Гость смотрят эту тему.
torero
Пользователь
***
Офлайн Офлайн

Сообщений: 36


Просмотр профиля
« : 24 Ноябрь 2005, 03:17:16 »

У меня есть стандартный CView с информацией в клиентской области.
На эту область я накладываю маленькое окно rich.edit таким образом:
CRichEditCtrl m_rich;
m_rich.Create(WS_CHILD|WS_VISIBLE,rect,this,1); //метод CMyView::OnCreate
Вывожу в rich.edit информацию:
m_rich.SetWindowText("строка 1");
Теперь мне нужно отредактировать эту информацию, но в окне rich.edit
нет курсора и окно не реагирует на клавиатуру. Чтобы активизировать
окно (или оно уже активно ?) я щёлкаю в нём мышкой. Но вот вопрос,
как это сделать без щелчка. Я вставлял операторы:
   m_rich.SetActiveWindow();
   m_rich.CreateSolidCaret(2,14); m_rich.SetCaretPos(point);
          m_rich.ShowCaret();
   m_rich.SetFocus();
   m_rich.SetCapture();
Ничего не помогает, курсора в окне нет. Как его вызвать программно?
Записан
3V
Администратор
Ветеран
*****
Офлайн Офлайн

Сообщений: 1347



Просмотр профиля WWW
« Ответ #1 : 28 Ноябрь 2005, 03:43:53 »

На самом деле, надо использовать SetFocus. Просто, если вызвать SetFocus сразу после создания ричедита, то есть в OnCreate, то фокус с ричедита после уйдет на View. Это происходит потому, что при получении фокуса окно-рамка передает его активному View:
Код:
void CFrameWnd::OnSetFocus(CWnd* pOldWnd)
{
   if (m_pViewActive != NULL)
       m_pViewActive->SetFocus();
   else
       CWnd::OnSetFocus(pOldWnd);
}

WM_SETFOCUS приходит, например, в главное окно приложения после того, как оно станет видимым после запуска. Вот фокус у ричедита и пропадает.
Для решения проблемы можно, например, в OnSetFocus View передавать фокус ричедиту:
Код:
void CMyView::OnSetFocus(CWnd* pOldWnd)
{
   m_rich.SetFocus();
}

Если надо делать это один раз, а не постоянно, просто флаг можно, например, завести.
Записан

torero
Пользователь
***
Офлайн Офлайн

Сообщений: 36


Просмотр профиля
« Ответ #2 : 02 Декабрь 2005, 00:09:49 »

     Большое спасибо. Всё получилось. Проблема в том, что я могу    использовать только то,
что есть в MSDN, а работа каркаса приложения-чёрный ящик. Может чго-нибудь посоветуете,
как разобраться с ним самостоятельно.
Записан
3V
Администратор
Ветеран
*****
Офлайн Офлайн

Сообщений: 1347



Просмотр профиля WWW
« Ответ #3 : 02 Декабрь 2005, 23:29:16 »

Цитировать
Проблема в том, что я могу использовать только то,
что есть в MSDN, а работа каркаса приложения-чёрный ящик.


Дык, для MFC же доступны исходники !
В 6-й студии просто при установке надо в опциях, кажется, указать чтобы ставить исходники. Также там можно исходники CRT поставить (эта опция точно есть).

С 6-й студией очень удобно использовать прогу Visual Assist - можно поставить курсор на какой нибудь метод, нажать кнопку "Goto" и откроется нужный файл на нужном месте. Так хорошо по исходникам MFC лазить.

А в .NET студиях в Visual C - шных проектах прямо на вкладке Class View представлена вся иерархия классов, включая классы исходников от Microsoft.

Так что изучить каркас приложения весьма просто - читайте исходники Улыбка
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2015, Simple Machines Valid XHTML 1.0! Valid CSS!