Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

CString и CEdit в С++ MFC

23K
22 февраля 2007 года
nonick
7 / / 22.02.2007
Требуеться помощь! Или разъяснения.
Я пишу мелкую программку:
В диалоговом окне есть едиты и кнопки, радиокнопки.
Цель программы сделать бухгалтерский расчет сумм, и результат выдать в Эдит на тойже форме.
Я из эдита забираю число двойной точночти повожу манипуляции (НДС и т.п.) затем в эдит на котором
висит переменная CString пытаюсь выдать результат:
Сумма: 100,0
НДС: 20,0 и т.п (каждая запись с новой строки).
когда я произвел вычиления, заношу переменные в строку и после нужного отрезка вставляю переход
на новую строку и возврат каретки, когда передаю эту строку в эдит то перехода на новую строку нет -
а вместо \n\r отображаються квадраты.
У эдита в свойствах мультилайн true.

Может кто сталкивался с такой проблемой, что можно предпринять?
320
22 февраля 2007 года
m_Valery
1.0K / / 08.01.2007
А Want Return - тоже true ?
23K
22 февраля 2007 года
nonick
7 / / 22.02.2007
Да,
вот кусок кода, может че подскажешь. Ещё есть предложение использовать ListBox - но как то нет желания переделывать (хотя и не много.)
BOOL CCalcAmountDlg::CodeOne()
{
CString tempStringEdit, tmpS; /*Временные переменные*/
tmpS = "Результаты расчета суммы с налогами для платильщика НДС:\n\r";
double price, nds, nnr, pay1, pay2, pay1nds, pay1nnr, pay2nds, pay2nnr; /*Все для дальнейшего использования*/
double pay3, pay3nds, pay3nnr, sum, month, monthnds, monthnnr;
int pay;
UpdateData(true);
if(!myRadioYear.GetCheck()) /*Радио кнопка для расчета суммы на год рав. частями */
{
price = myAmountUA/1.205;
nds = (price*1.2)-price;
nnr = (price*1.005)-price;
tmpS.Format(_T("Расчитываемая сумма: %.3f \n\r Цена услуги: %.3f \n\r НДС: %.3f\n\rНалог на Рекламу: %.3f\n\r"),myAmountUA,price,nds,nnr);
myEditStringResult+=tmpS;
TRACE("Расчитываемая сумма: %.3f \n\r Цена услуги: %.3f \n\r НДС: %.3f\n\rНалог на Рекламу: %.3f\n\r",myAmountUA,price,nds,nnr)

.... ну и т.д. и т.п
320
22 февраля 2007 года
m_Valery
1.0K / / 08.01.2007
В твоем коде изменил \n\r на \r\n - нормально:D
Квадратов нет и переходит!
23K
23 февраля 2007 года
nonick
7 / / 22.02.2007
:eek: Странно я тоже пробовал, но не делал ReBuild.
Сделал ЗАРАБОТАЛО.
Премного благодарен.
23K
01 марта 2007 года
nonick
7 / / 22.02.2007
Тут по ходу ещё вопросик возник.
На тойже форме есть два едита,
1. сумма в гривнах
2. сумма в долларах
возле каждого эдита кнопка которая пересчитывает из одной валюты в другую.
на эдиты навешены, переменные типа double,
проблема заключается в том что при пересчете отбрасываются числа после запятой.
и при пересчете когда обновляется поле там уже отображается число без знаков после запятой, но в том куда персчитали норамльно, число с плавающей точкой
если устанавливаю в свойствах эдита что вводится будет числа
number - true
тогда не могу ввести число с плавающей точкой.
и последнее эта проблема возникла в начале но я на неё не обращаю пока внимания может кто подскажет как установить пареметр отображения в эдите числа double с определенным количеством знаков после запятой.
320
01 марта 2007 года
m_Valery
1.0K / / 08.01.2007
Цитата: nonick
... как установить пареметр отображения в эдите числа double с определенным количеством знаков после запятой.


Посмотри ф-ию

 
Код:
void Format( LPCTSTR lpszFormat, ... );

Форматированный вывод в строку.Общий формат представляется в виде:
%[flags] [width] [.precision] [{h | l | I64 | L}]type
где type:
c - Символ
d, i - целое знаковое число
o - беззнаковое восьмеричное число
x - беззнаковое шестнадцатиричное число, используются "abcdef"
X - беззнаковое шестнадцатиричное число, используются "ABCDEF"
u - беззнаковое десятичное число
e - знаковое вещественное число в научной нотации
f - знаковое вещественное число
g - в зависимости от ситуации представляется в виде форматов e и f
n - указатель на целое
p - указатель на void
s - строка
flags:
- - выравнивание по левому краю (по умолчанию по правому)
+ - если выводимые числа знаковые, то у них будет появляться знак (+/-)
width - ширина поля вывода
precision:
тип с - не дает эффекта
типы d, i, o, u, x, X - минимальное количество выводимых цифр,
если цифр меньше, то число дополняется нулями
тип e - количество цифр, которое распечатается после десятичной точки, последняя цифра округляется
тип f - количество цифр после десятичной точки, как минимум одна цифра появится до запятой, число округляется до заданного количества цифр
тип g - максимальное количество печатаемых значащих цифр
тип s - максимальное количество печатаемых символов
В твоем случае,когда считаются деньги (2 цифры после запятой)можно сделать так:
 
Код:
double val = 86.73;
    CString s;
    s.Format("value = \%g", val);
             m_edit.SetWindowText(s);

m_edit - контрольная переменная текстового поля.
23K
01 марта 2007 года
nonick
7 / / 22.02.2007
Спасибо, тут какаято путаница, хотел привести здесь код и пару слов сказать залез в исходники... все работает, а на компе пользователя нет, скорее всего или отдал человеку не последний вариант, или отображение зависит от настроек системы.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог