Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.141.31.209] |
|
Сообщ.
#1
,
|
|
|
Привет народ!
Так решил немного отвлечься от основной темы своего демо на некоторые интерфейсные элементы, вот хочу сделать для числовых едитов чтобы они отображали числа с разделителями (например так 1,000,000), но если перейти в редактор то отображались без форматирования. Надеюсь нормально объяснил первый мой шаг это определил класс от CEdit: class CNumericFormatedEdit : public CEdit { DECLARE_DYNAMIC(CNumericFormatedEdit) public: CNumericFormatedEdit(); virtual ~CNumericFormatedEdit(); protected: DECLARE_MESSAGE_MAP() }; а дальше то что? какие сообщения надо определить и/или вирт.функции? |
Сообщ.
#2
,
|
|
|
так обработал OnEnSetFocus и OnEnKillFocus, все пучком, но вот тока при открытии диалога мой эдит не отображается в формате, ясно что надо где-то обработать но вот где? пробовал CNumericFormatedEdit::OnActivate, OnCreate, OnShowWindow и тд тп, но эти сообщения почему то не перехватваются я хз что делать
// CNumericFormatedEdit class CNumericFormatedEdit : public CEdit { DECLARE_DYNAMIC(CNumericFormatedEdit) public: CNumericFormatedEdit(); virtual ~CNumericFormatedEdit(); void FormatText(CString& value); private: CString mValue; BOOL mIsFormatted; protected: DECLARE_MESSAGE_MAP() public: afx_msg void OnEnKillfocus(); afx_msg void OnEnSetfocus(); }; // CNumericFormatedEdit IMPLEMENT_DYNAMIC(CNumericFormatedEdit, CEdit) CNumericFormatedEdit::CNumericFormatedEdit() : mIsFormatted(FALSE) { } CNumericFormatedEdit::~CNumericFormatedEdit() { } void CNumericFormatedEdit::FormatText(CString& value) { NUMBERFMT nf{ 0 }; nf.NumDigits = 0; nf.LeadingZero = FALSE; nf.Grouping = 3; nf.lpDecimalSep = _T(","); nf.lpThousandSep = _T(" "); nf.NegativeOrder = 0; const int cBufferSize = 80; GetNumberFormat(LOCALE_USER_DEFAULT, 0, mValue, &nf, value.GetBuffer(cBufferSize), cBufferSize); value.ReleaseBuffer(); } BEGIN_MESSAGE_MAP(CNumericFormatedEdit, CEdit) ON_CONTROL_REFLECT(EN_KILLFOCUS, &CNumericFormatedEdit::OnEnKillfocus) ON_CONTROL_REFLECT(EN_SETFOCUS, &CNumericFormatedEdit::OnEnSetfocus) END_MESSAGE_MAP() // CNumericFormatedEdit message handlers void CNumericFormatedEdit::OnEnKillfocus() { CString value; GetWindowText(mValue); FormatText(value); SetWindowText(value); mIsFormatted = TRUE; } void CNumericFormatedEdit::OnEnSetfocus() { if (!mIsFormatted) GetWindowText(mValue); CString value; value.Format(_T("%s"), mValue); SetWindowText(value); } |
Сообщ.
#3
,
|
|
|
А ты вызываешь для него SubclassDlgItem в OnInitDialog?
|
Сообщ.
#4
,
|
|
|
нашел способ, можно обработать WM_GETDLGCODE, тк WM_GETDLGCODE вызывается многократно при обращении к GetDlgItem, то поставил костыль в ввиде флажка, да и убрал проверку из OnEnSetfocus:
void CNumericFormatedEdit::OnEnKillfocus() { CString value; GetWindowText(mValue); FormatText(value); SetWindowText(value); } void CNumericFormatedEdit::OnEnSetfocus() { SetWindowText(mValue); } UINT CNumericFormatedEdit::OnGetDlgCode() { if (!mIsOnceInitValue) { OnEnKillfocus(); mIsOnceInitValue = TRUE; } return CEdit::OnGetDlgCode(); } Добавлено Цитата Олег М @ А ты вызываешь для него SubclassDlgItem в OnInitDialog? не вызываю DDX_Control в OnInitDialog : DDX_Control(pDX, IDC_TRACK_MILLISECONDS_EDIT, mMillisecondsEdit); |
Сообщ.
#5
,
Сообщение отклонено: B.V. -
|
Сообщ.
#6
,
|
|
|
Цитата Cfon @ Так решил немного отвлечься от основной темы своего демо на некоторые интерфейсные элементы, вот хочу сделать для числовых едитов чтобы они отображали числа с разделителями (например так 1,000,000), но если перейти в редактор то отображались без форматирования. Надеюсь нормально объяснил Чем тебе CMFCMaskedEdit не угодил? |
Сообщ.
#7
,
|
|
|
а он также может как я сделал? |
Сообщ.
#8
,
|
|
|
Цитата Cfon @ а он также может как я сделал? Я же тебе ссылку кинул, там даже пример использования есть. |
Сообщ.
#9
,
|
|
|
На нашем сайте очень легко заказать проститутку и для этого вам всего лишь нужно зайти на него и выбрать понравившуюся там девушку.
|
Сообщ.
#10
,
|
|
|
Цитата KILLER @ Цитата Cfon @ а он также может как я сделал? Я же тебе ссылку кинул, там даже пример использования есть. ладно спс потом почекаю маскэедит, на первый взгляд не то, мне надо не фиксированый формат чисел Добавлено Цитата olok90 @ На нашем сайте очень легко заказать проститутку и для этого вам всего лишь нужно зайти на него и выбрать понравившуюся там девушку. иди отсюда |