100 бед - 1 ресет
Здравствуйте.. Такой вопрос: я пишу текст в форму Edit Box, программа на MFC. Как можно подсветить только определенные слова, например, "КОЛЕСО", другим цветом, чтоб остальные слова не изменялись..
BOOL CSynDlg::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
// TODO: Add your specialized code here and/or call the base class
NMHDR *pNMHDP = (NMHDR*) lParam;
if(wParam == IDC_RICHEDIT1
&& pNMHDP->code == EN_MSGFILTER)
{
MSGFILTER *lpMsgFilter = (MSGFILTER *)lParam;
if(lpMsgFilter->msg == WM_RBUTTONDOWN)
{
// ... вывод контекстного меню с поз. курсора мыши
}
}
return TRUE;
}
А что дальше? Как мне узнать, на какое слово из текста кликнул?
CPoint point;
GetCursorPos(&point);
Объясни, как именно создается контекстное меню? Я делаю курсовую, под СИ нас научили писать только консольные приложения. У меня программа проверки орфографии, мне нужно, чтоб при нажатии на неправильное слово мне предлагались варианты ответов (которые я храню в связанном списке), а при нажатии на них, слово исправлялось. Саму проверку на орфографию я сделал, а вот с меню проблемы..
А ещё минутное гугление выдало такой интересный результат: http://www.firststeps.ru/mfc/winapi/menu/r.php?38
От этого человек возненавидет MFC на всю жизнь ))
FRikaZOid
CMenu m;
m.CreatePopupMenu();
//добавляешь элементы
m.AppendMenu(MF_STRING,609,"ТЕкст");
//Собственно показать меню
m.TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this);
Чтобы обрабоать клик по добавленному элементу то нужно добавить в карту сообщений
ON_COMMAND(609,EditOpenBlocnot)
где EditOpenBlocnot - функция ничего не берущая и не возвращающая
http://msdn2.microsoft.com/zh-tw/library/y4bx8s3h.aspx
там вот я и нашел функцию CharFromPos - дает позицию символа по координате
дальше уже читаешь все словов
int CharFromPos(POINT pt) const
{
ATLASSERT(::IsWindow(m_hWnd));
return (int)::SendMessage(m_hWnd, EM_CHARFROMPOS, 0,
MAKELPARAM(pt.x, pt.y));
}
1) С-ый - FILE*
2) C++-ый - istream ostream
3) MFC-ый - CFile
Оное все сохранить в строку и CRichEditCtrl::SetWindowText(строка)
static DWORD CALLBACK
MyStreamInCallback(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)
{
CFile* pFile = (CFile*) dwCookie;
*pcb = pFile->Read(pbBuff, cb);
return 0;
}
CFile cFile("Filename", CFile::modeRead);
EDITSTREAM es;
es.dwCookie = (DWORD) &cFile;
es.pfnCallback = MyStreamInCallback;
RichEdit.StreamIn(SF_TEXT, es);
Зы: а как табуляцию ставить на дневниках и в HTML?