Задача: добавить возможность вводить текст на картинках. Т.е. пользователь тыкает мышкой в любой участок картинки (нарисована в CDialog) и
в этом месте должен появиться курсор для ввода текста. Курсор должен быть на фоне картинки текст должен вводиться многострочный.
Мое решение: логично возникала мысль реализовать с помощью EditControl. В момент клика, добавляю в нужную область диалога EditControl и
после того как пользователь закончит ввод вырезаю область с текстом и вставляю в исходную картинку.
Проблема 1: текст вводится нормально, но при этом он почему-то не удаляется. Если я выделяю текст,то выделение так же не убирается.
Т.е. по сути все что в нем нарисовано не удаляется. Как это можно решить?
Проблема 2: Почему-то не работает Multiline режим,который выставлен для IDC_EDIT1. Т.е. если я нажимаю Enter ничего не происходит. Если же я меняю
мой CEditTrans на просто CEdit то все ок, кроме прозрачности.
Пока выглядит это так:
#include "stdafx.h"
#include "EditTrans.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CEditTrans
CEditTrans::CEditTrans()
{
m_TextColor = RGB(255, 255, 255);
m_BackColor = TRANS_BACK;
}
CEditTrans::~CEditTrans()
{
}
BEGIN_MESSAGE_MAP(CEditTrans, CEdit)
//{{AFX_MSG_MAP(CEditTrans)
ON_WM_CTLCOLOR_REFLECT()
//ON_WM_CTLCOLOR()
//ON_CONTROL_REFLECT(EN_UPDATE, OnUpdate)
ON_WM_LBUTTONDOWN()
//ON_CONTROL_REFLECT(EN_KILLFOCUS, OnKillfocus)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CEditTrans message handlers
HBRUSH CEditTrans::CtlColor(CDC* pDC, UINT nCtlColor)
{
m_Brush.DeleteObject();
m_Brush.CreateStockObject(HOLLOW_BRUSH);
//Делаем прозрачным бэкграунд
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(m_TextColor);
return (HBRUSH)m_Brush;
}
void CEditTrans::OnKillfocus()
{
UpdateCtrl();
}
void CEditTrans::OnUpdate()
{
UpdateCtrl();
}
void CEditTrans::OnLButtonDown(UINT nFlags, CPoint point)
{
UpdateCtrl();
CEdit::OnLButtonDown(nFlags, point);
}
void CEditTrans::UpdateCtrl()
{
CWnd* pParent = GetParent();
CRect rect;
GetWindowRect(rect);
pParent->ScreenToClient(rect);
rect.DeflateRect(2, 2);
pParent->InvalidateRect(rect, FALSE);
}
В самом диалоге
void CMyDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMyDlg)
DDX_Control(pDX, IDC_EDIT1, m_textEdit);
//}}AFX_DATA_MAP
}
...
Здравствуйте, C0x, Вы писали:
C0x>Мое решение: логично возникала мысль реализовать с помощью EditControl. В момент клика, добавляю в нужную область диалога EditControl и
C0x>после того как пользователь закончит ввод вырезаю область с текстом и вставляю в исходную картинку.
Тут есть решение, всё в пару строк делается.
[Добавлено]
А, ты видимо его и использовал.
Здравствуйте, Evgeniy Skvortsov, Вы писали:
ES>Здравствуйте, C0x, Вы писали:
C0x>>Мое решение: логично возникала мысль реализовать с помощью EditControl. В момент клика, добавляю в нужную область диалога EditControl и
C0x>>после того как пользователь закончит ввод вырезаю область с текстом и вставляю в исходную картинку.
ES>Тут есть решение, всё в пару строк делается.
ES>[Добавлено]
ES>А, ты видимо его и использовал.
Ага и оно не работает как надо.