Я получаю сообщение EM_CHARFORMAT в моем обработчике сообщений, когда SetFont () вызывается для моего пользовательского элемента управления. Но когда я изменяю данные в структуре CHARFORMAT, указанной в LPARAM, они не используются.
void CMyRichEdit::OnProtected(NMHDR* pNMHDR, LRESULT* pResult)
{
ENPROTECTED* pEP = (ENPROTECTED*)pNMHDR;
*pResult = 1;
switch(pEP->msg)
{
case EM_SETCHARFORMAT:
{
CHARFORMAT *cf = reinterpret_cast<CHARFORMAT *>(pEP->lParam);
cf->dwEffects |= (CFE_PROTECTED | CFE_ITALIC);
cf->dwMask |= (CFM_PROTECTED | CFM_ITALIC);
*pResult = 0;
}
break;
Документы MSDN говорят, что только если значение lParam изменяется, оно используется поверх оригинала ... но здесь lParam - указатель на объект. Как я могу выделить новый объект без утечки памяти?