Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как лучше перекомпилить код из console v MFC, Тяжело прощаться с cout... 
V
    Опции темы
XSonicX
Дата 22.12.2008, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 14.7.2006
Где: Таллинн, Edinburg h

Репутация: нет
Всего: 0



Всем добрый вечер.
До настоящего момента писал console приложения для Виндовса, теперь перешел на MFC.
Столкнулся с морем проблем, на одну из которых я не нашёл ответа.
1)Имеется код для консоли:(выводит значение дискриминанта, попутно выводя на экран промежуточные значения)
Код

ac4 < 0 ? cout << "D = " << (b*b) << "+" << - (4*a*c) << " = " << (b*b)-(4*a*c) << " (" << sqrt(d) << ") \n" : cout << "D = " << (b*b) << "-" <<  (4*a*c) << " = " << (b*b)-(4*a*c) << " (" << sqrt(d) << ") \n";

Мои познания в MFC пока довольно малы, и пока что, для единственного способа, которым можно сделать тоже самое, но в MFC понадобится целая куча разных переменных и боксов типа Static Text 
для каждого значения, чередуя их тип от CString до double...

2) вот у мну есть три Text edit после ввода в последнюю и нажатия энтер на настоящий момент моя прога закрывается, я хотел спросить как сделать так, что бы при нажатии на энтер прога как бы нажимала на опред. кнопку и выполняла ее действие?

3) у меня есть много статик текста,  я хочу что бы при нажатии на одну копку все эти окна скрывались, а при нажатии на другую появлялись, как мне это притворить в жизнь?


Я уверен, что есть более целесообразный способ, как решить эту проблемму и надеюсь на вашу помощь, спасибо)
PM WWW Skype   Вверх
dizzy1984
Дата 22.12.2008, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: 10
Всего: 25



1. Ну смотря что ты хочешь сделать, для вывода как в консоли можно, например, использовать Edit Control  с флагом Multiline. Для каждого неизвестного, конечно, нужно отдельное поле для ввода.
2. Я использовал решение из http://www.codeproject.com/KB/dialog/DisableReturnEsc.aspx и у меня работало.
3. Ты можешь записать идентификаторы статиков в массив и ходить по нему в обеих функциях.

PM MAIL   Вверх
XSonicX
Дата 23.12.2008, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 14.7.2006
Где: Таллинн, Edinburg h

Репутация: нет
Всего: 0



1 вобщем нет никакого универсального типа переменной, что бы можно было выводить текст и переменные в одной строке? ну типа "a=" a "b=" b ; ?

2 объясните пожалста поподробнее) я могу сделать например что бы при потере фокуса с третьего эдит бокса запускалась кнопка, но нужно тоже самое, тока по нажатию на энтер в томже боксе

3 есть у мну большой кусок статик текста, который закрывает то, что я пока не хочу показывать, у него тип CString control (может быть надо другой) название переменной ekran , сейчас она видима, т.е все что я хочу скрыть скрывается, но если я хочу допустим при нажатии на кнопку скрыть этот элемент и показать необходимый текст мод ним, как мне добраться до свойства behavior, visible этого элемента и изменить true na false ?

спасибо зарание) сейчасс уточнил вопрос,вроде бы очень легко,  но одному не разгрести (
PM WWW Skype   Вверх
voov
Дата 23.12.2008, 12:02 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 29.11.2007

Репутация: 8
Всего: 8



1. Есть класс CString, а у него есть метод Format. + есть мсдн

2. Не совсем понятно, что должно получиться и зачем такое нужно. Потому неясно, что лучше посоветовать. Если это поможет, то у кнопки есть свойство DefaultButton. На диалоге может быть только одна кнопка с установленым свойством DefaultButton. При нажатии Enter на диалоге срабатывает эта кнопка.

3. Любой контол является в первую очередь окном (CWnd), а у окна есть метод ShowWindow(int nCmdShow). + мсдн
PM MAIL   Вверх
XSonicX
Дата 24.12.2008, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 14.7.2006
Где: Таллинн, Edinburg h

Репутация: нет
Всего: 0



voov, спасибо большое, 2 и 3 получилось smile) сейчас мучаюсь с 1, надеюсь добью его поскорее)
PM WWW Skype   Вверх
dizzy1984
Дата 24.12.2008, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: 10
Всего: 25



Как на счет
Код

#include <sstream> 

//...
std::stringstream ss; 
double b=1,a=2,c=3,d=4; 
ss << "D = " << (b*b) << "+" << - (4*a*c) << " = " << (b*b)-(4*a*c) << " 
(" << ") \n"; 
MessageBox( ss.str().c_str() );

PM MAIL   Вверх
XSonicX
Дата 24.12.2008, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 14.7.2006
Где: Таллинн, Edinburg h

Репутация: нет
Всего: 0



все спасибо большое еще раз, со всем справился ))
осталась одна проблемка, есть у мну Static text у него переменная c_d типа control, как можно изменить в нем программно значение border с false na true? 
вообще, что бы закрепить и больше не спрашивать, как можно добираться до этих значений? enable, border, default button, color и т.д(кароч все которые в свойствах элемента) ? на счет border весь мсдн перерыл, нифига, есть тока на создание окна (
спасибо зарание) 
PM WWW Skype   Вверх
Earnest
Дата 24.12.2008, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Цитата(XSonicX @  24.12.2008,  17:50 Найти цитируемый пост)
как можно добираться до этих значений? enable, border, default button, color 

Свойства, которые тебе визард показывает - это всего лишь оболочки.
В основном, это флаги стиля или расширенного стиля или и того и другого (border). Насчет цвета - не поняла, какой-такой цвет у статика в свойствах. Если ты имеешь в виду BLACKRECT и т.д. - это тоже стиль, а произвольного цвета нема. Можно через CTLCOLOR реализовать или через OwnerDraw или как-то еще, но это требует переопределения класса. 


--------------------
...
PM   Вверх
XSonicX
Дата 24.12.2008, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 14.7.2006
Где: Таллинн, Edinburg h

Репутация: нет
Всего: 0



все, и первое у меня тоже получилось smile спасибо большое)  сделал с помощью cstring.format(...)  smile 
dizzy1984, способ просто офигенный )) тока если бы можно было бы вывести это в поле не с помощью MessageBox, т.к он мне тут совершенно неуместен( это реально вообще?



Earnest, спасибо за ответ  smile про цвет я имел ввиду picture control, default button в св-вах button и т.д, вобщем вставить рамку программно нельзя?(
В таком случае как можно программно выделить static text (может быть цвет, жирность(я хотел рамкой  smile ) или подчеркнуть)?  smile 
PM WWW Skype   Вверх
Earnest
Дата 24.12.2008, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Можно - я уже написала - изменением стиля.
На MFC это будет так:
Код

// добавить простую рамку:
pWnd->ModifyStyle (0, WS_BORDER, SWP_FRAMECHANGED);
// убрать ее
pWnd->ModifyStyle (WS_BORDER, 0, SWP_FRAMECHANGED);

Вдавленность - это расширенные стили - см. символы WS_EX_... и функцию ModifyStyleEx
У каждого типа контрола, кроме общих (WS_), есть специализированные стили. Например, у статика это константы SS_... Короче смотри в MSDN.
Почти любой флаг можно добавить через изменение стилей. Но не все - некоторые как установлены при создании, так и будут. Дефолт баттон - это тоже стиль, но это лучше станавливать соответствующей функцией диалога, т.к. нужно снять это свойство с предыдущей Deafaul Button.


--------------------
...
PM   Вверх
XSonicX
Дата 24.12.2008, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 14.7.2006
Где: Таллинн, Edinburg h

Репутация: нет
Всего: 0



Earnest, аааа спасибо большоеее!!! smile  smile  smile 
и если можно, последний вопрос на сегодня  smile 
есть такая штучка
Код

formula2.Format(_T("(x+%.f)"),-(x2))


очень хочу узнать, что означет вот этот участок 
Код

%.f

я не знаю как это называется , но путем подбора втыкал, что эта штука управляет кол-ом знаков после запятой...
скажите пожалуйста, что это такое, какие они бывают и где можно их найти  smile 
А также самое главное, как сделать, чтобы оно не писало 4.0000(4.9000, 4.0500 и т.д) , если стоит определение %.4f, ну т.е отбрасывало последние нули, как это обычно делаем мы ?) smile 
огромное спасибо заранее ) smile 
PM WWW Skype   Вверх
voov
Дата 25.12.2008, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 29.11.2007

Репутация: 8
Всего: 8



XSonicX, все описано в мсдн. строка формата как в printf

A format specification, which consists of optional and required fields, has the following form:
%[flags] [width] [.precision] [{h | l | ll | I | I32 | I64}]type

В случае, когда type = f :

 The precision value specifies the number of digits after the decimal point. If a decimal point appears, at least one digit appears before it. The value is rounded to the appropriate number of digits. 
 
Default precision is 6; if precision is 0, or if the period (.) appears without a number following it, no decimal point is printed.
 
т.е. так задается кол-во символов после запятой (последняя цыфра округляется). 
%.4f   - 4 знака
%f      - 6 знаков
%.f     - без десятичной точки (только целая часть)

нули средствами Format убрать нельзя, но так как это у нас строка, то можно сделать так
Код

formula2.Format(_T("x+%.4f"),-(x2))
formula2.Trim("0");



Это сообщение отредактировал(а) voov - 25.12.2008, 15:20
PM MAIL   Вверх
XSonicX
Дата 25.12.2008, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 14.7.2006
Где: Таллинн, Edinburg h

Репутация: нет
Всего: 0



voov, спасибо, но к сожалению если знак, который необходимо убрать находится по средине строки(допустим в скобках) то он его не убирает( пришлось сравнивать с (int)и в зависимости от результата писать %.4f or %.f, но все равно спасибо) пока что вопросов нет, помечаю как решенный  smile 
PM WWW Skype   Вверх
Bukmop
Дата 26.12.2008, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 1.6.2006
Где: Москва

Репутация: 2
Всего: 3



Цитата(XSonicX @  24.12.2008,  22:10 Найти цитируемый пост)
А также самое главное, как сделать, чтобы оно не писало 4.0000(4.9000, 4.0500 и т.д) , если стоит определение %.4f, ну т.е отбрасывало последние нули, как это обычно делаем мы ?) 
Посмотри в сторону %g


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.1149 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.