SDI & input text?
От: Аноним  
Дата: 16.10.06 07:13
Оценка:
VC++7.0

Здравствуйте.
подскажите где можно посмотреть:
сделать чтобы можно было редактировать рабочую область документа приложения(SDI) т.е мне нужно чтобы я мог вводить некоторый текст в стандартное окно, которое появляется при запуске приложения

я смотрел по учебнику Холзнера, но там для VC++6.0 и поэтому я смог добиться лишь появления курсора в этом окне, а с вводом\выводом текста в него проблема. ругается на pDoc->StringData += nChar;

подскажите, пожалуйста, где можно посмотреть как это делается в VC++7.0 или может кто так объяснит, ведь, наверняка, знающим людям эта элементрщина на 20 секунд

спасибо
Re: SDI & input text?
От: febus Германия  
Дата: 16.10.06 09:34
Оценка:
Здравствуйте, Аноним, Вы писали:
А>сделать чтобы можно было редактировать рабочую область документа приложения(SDI) т.е мне нужно чтобы я мог вводить некоторый текст в стандартное окно, которое появляется при запуске приложения

А писать вообще ничего не придется, если я все правильно понял
Создай новый проект и выбери в визарде (вместо стандартного CView по умолчанию) вид CEditView.
Если тебе нужны будут бОльшие возможности (цвет, шрифт...), то тогда выбери вместо CEditView класс CRichEditView
Все, задание выполнено
Re[2]: SDI & input text?
От: Аноним  
Дата: 17.10.06 08:21
Оценка:
Здравствуйте, febus, Вы писали:

F>Создай новый проект и выбери в визарде (вместо стандартного CView по умолчанию) вид CEditView.

F>Все, задание выполнено

О, да! спасибо! волшебные волшебники рулят!

теперь возникла следующая проблемка:
я делаю новый диалог, в него я могу вводить текст(Edit Control). Теперь нужно что бы этот текст при нажатии на ОК выводился в главном окне. Когда был просто класс CView я это сделал, но при использовании CEditView в нем пропал метод
virtual void OnDraw(CDC* pDC);
Ну я думал добавлю его, сделаю как при CView и будет все нормально, но нет. Все хорошо компилится но не работает, не выводится этот текст в главное окно.

Я добавлял следующий код:
мой диалог
"FromDlgToWindow.срр"

#include "stdafx.h"
#include "mylab.h"
#include "FromDlgToWindow.h"
#include ".\fromdlgtowindow.h"
// CFromDlgToWindow dialog
IMPLEMENT_DYNAMIC(CFromDlgToWindow, CDialog)
CFromDlgToWindow::CFromDlgToWindow(CWnd* pParent /*=NULL*/)
    : CDialog(CFromDlgToWindow::IDD, pParent)
//////////////////////////////
    , m_text(_T(""))
//////////////////////////////
{
}
CFromDlgToWindow::~CFromDlgToWindow()
{
}
void CFromDlgToWindow::DoDataExchange(CDataExchange* pDX)
{    CDialog::DoDataExchange(pDX);
//////////////////////////////////////////////
    DDX_Text(pDX, IDC_EDIT1, m_text);
//////////////////////////////////////////////
}
BEGIN_MESSAGE_MAP(CFromDlgToWindow, CDialog)
////////////////////////////////////
ON_BN_CLICKED(IDOK, OnBnClickedOk)
///////////////////////////////////
END_MESSAGE_MAP()

////////////////////////////////////
void CFromDlgToWindow::OnBnClickedOk()
{
    UpdateData(true);
    OnOK();
}
///////////////////////////////////////

"FromDlgToWindow.h"
#pragma once
#include "afxwin.h"
// CFromDlgToWindow dialog
class CFromDlgToWindow : public CDialog
{    DECLARE_DYNAMIC(CFromDlgToWindow)
public:
    CFromDlgToWindow(CWnd* pParent = NULL);   // standard constructor
    virtual ~CFromDlgToWindow();
// Dialog Data
    enum { IDD = IDD_DIALOG1 };
protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    DECLARE_MESSAGE_MAP()
public:
/////////////////////////////////////////
    afx_msg void OnBnClickedOk();
    CString m_text;
/////////////////////////////////////////
    };

и далее следующее
"mylabDoc.h"
class CmylabDoc : public CDocument
{ .....
// Attributes
public:
///////////////////////////////////////////////////////////
    CString StringData;
////////////////////////////////////////////////////////////
....}

"mylabDoc.cpp"
....
CmylabDoc::CmylabDoc()
{
////////////////////////////////////////////////////////////
    StringData="";
//////////////////////////////////////////////////////////////
}
....

"mylabView.cpp"
добавил OnDraw (прототип не забыл в mylabView.h кинуть)
.......
void CmylabView::OnDraw(CDC* pDC)
{    CmylabDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    ///////////////////////////////////////////
    pDC->TextOut(0,0,pDoc->StringData
    ///////////////////////////////////////////
    
}
......
#include "FromDlgToWindow.h"
void CmylabView::OnDialog1()
{    
    CFromDlgToWindow t;
    int result=t.DoModal();
if (result==IDOK)
{CmylabDoc* pDoc=GetDocument();
ASSERT_VALID(pDoc);
pDoc->StringData=t.m_text;
Invalidate();

    //t1.DoModal();
}
}

ну так вот, помогите сделать что бы работало, плз.в чем ошибка?

и еще, при использовании CEditView куда записывается тот текст который мы можем вводить в главном окне?
мне нужно будет вывести этот текст в другой диалог.(обратное дейсвие вышеопсанному )

заранее спасибо
Re[3]: SDI & input text?
От: febus Германия  
Дата: 18.10.06 08:40
Оценка:
Здравствуйте, Аноним,
OnDraw тебе соверщенно тут не нужен- убери его, если не собираещься рисовать кроме текста чего нибудь необычного.
Все необходимое для вывода простого текста CEditView (точнее лежащий в его основе CEdit) умеет делать сам.


void CmylabView::OnDialog1()
{    
    CFromDlgToWindow t;
    int result=t.DoModal();
    if (t.DoModal() != IDOK)
       return;
    CmylabDoc* pDoc=GetDocument(); 
    ASSERT_VALID(pDoc);
    pDoc->StringData=t.m_text;
    //Invalidate();
    pDoc->UpdateAllViews(NULL); //обновляет содержимое всех видов, вызывает для каждого вида метод OnUpdate
}

void CmylabView::OnUpdate( CView* pSender, LPARAM lHint, CObject* pHint)
{
    CmylabDoc* pDoc=GetDocument();
    ASSERT_VALID(pDoc);
    GetEditCtrl().SetWindowText(pDoc->m_text); //GetEditCtrl() возвращает CEdit 
}



Когда будешь делать обратное действие (ака вид->диалог), то вызывай

GetEditCtrl().GetWindowText(pDoc->m_text); 
COtherDlg dlg;
dlg.m_text = pDoc->StringData;



P.S. Удачной сдачи лабы
Re[4]: SDI & input text?
От: Аноним  
Дата: 18.10.06 11:04
Оценка:
Здравствуйте, febus, Вы писали:

F>P.S. Удачной сдачи лабы



от нашего скромного общества, огромное вам спасибо!
приятно, когда находятся люди которые готовы помочь, направить на правильный путь.
вы меня направили, я поразбирался, подправил код и теперь ко мне пришло счастье!

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

лично мне почти все попадавшиеся книги давали только общее представление о языке, а когда приходилось садиться за практику, то порой возникали проблемы которые с помощью книг редко можно было решить
Итого: существует ли идеальный учебник?
Re[5]: SDI & input text?
От: febus Германия  
Дата: 19.10.06 20:28
Оценка:
Здравствуйте, Аноним, Вы писали:

А>лично мне почти все попадавшиеся книги давали только общее представление о языке, а когда приходилось садиться за практику, то порой возникали проблемы которые с помощью книг редко можно было решить

А>Итого: существует ли идеальный учебник?
Аноним, я не уверен, что гожусь в сэнсэи, но раз тебя интересует мое мнение...
Прежде всего, разница между 6-й и 7-й версией Visual Studio касательно MFC весьма незначительна. Так что книги по 6-й версии вполне актуальны.
Холзнера я держал в руках лет 5 назад, мне книга тогда не понравилась, уж слишком там все упрощено.
Я бы посоветовал книгу Просиза Programming Windows With MFC, но не знаю выходила ли она на русском. На мой взгляд ничего лучшего по MFC не написано.
Она также есть в электронном виде на английском, с примерами.
Второй вариант,- Круглински Хотя мне лично она нравится меньше, хотя книга охватывает практически все темы.
Она также выходила на русском и по 7-й версии. (Там есть главы по управляемому C++ для .NET)
По программированию в Windows есть классная книга "Programming Windows 2000 Unleashed" by Mickey Williams.
Это если захочется знать больше по конкретным темам системного программирования в Windows.

Аноним, прямые линки на перечисленные выше книги я здесь дать не могу, это запрещено правилами сайта(пункт 4).
Из разрешенного есть хороший сайт Первые шаги. Там много всего интересного.
CodeProject. Если ты там до сих пор еще не был, обязательно посмотри.
Ну и вообще то было бы неплохо зарегистрироваться на нашем сайте
Re[6]: SDI & input text?
От: AlexisVr Россия  
Дата: 20.10.06 01:46
Оценка:
Здравствуйте, febus, Вы писали:

F>Ну и вообще то было бы неплохо зарегистрироваться на нашем сайте


да я и сам уже об этом подумал

я конечно пониматю что нельзя приставать к людям, но...
появился такой вопрос: а если мне в диалоге нужно сохранить исходное форматирование текста, введенного в главном окне?
(когда я вывожу текст из главного окна в диалог) на данный момент если я в главном окне ввожу текст в двух строках
(_текст_ENTER_текст_) то при отображении в диалоге текст будет записан в одной строке, причем вместо символа ENTERа стоят 2 квадратика. наверно есть какой нибудь параметр или манипулятор, подскажите?
Re[7]: SDI & input text?
От: febus Германия  
Дата: 20.10.06 10:56
Оценка:
Здравствуйте, AlexisVr, Вы писали:

AV>появился такой вопрос: а если мне в диалоге нужно сохранить исходное форматирование текста, введенного в главном окне?

AV>(когда я вывожу текст из главного окна в диалог) на данный момент если я в главном окне ввожу текст в двух строках
AV>(_текст_ENTER_текст_) то при отображении в диалоге текст будет записан в одной строке, причем вместо символа ENTERа стоят 2 квадратика. наверно есть какой нибудь параметр или манипулятор, подскажите?

в редакторе ресурсов выстави стили. т.е.

"Multiline" True ( стандартно False)
"Want Return" True ( стандартно False)

эти установки соответствуют стилям ES_MULTILINE и ES_WANTRETURN соответсвенно. Это на случай если
захочешь выставлять стили из программы при помощи ModifyStyle
Re[8]: SDI & input text?
От: AlexisVr Россия  
Дата: 02.11.06 10:31
Оценка:
Здравствуйте.
Вообще то надо было создавать новую ветку по моему вопросу (напр. Dialog&imput text?) но т.к задачи в общем схожие продолжу ветку.

я создал MFS приложение — Dialog based. Добавил в главный диалог меню, Edit Control.
создал второй диалог, который так же имеет Edit Control. добавил для каждого Edit Controlа по своей Variable (m_edit и m_text1 соответственно для главного и второго диалога).

задача в общем та же: ввести текст во втором диалоге, При его закрытии текст должен вывеститсь в главном диалоге, и наоборот.

пытался сделать так

#include "Vvod.h"
void CseDlg::OnDialog1()//второй диалог
{  
    CVvod t;
    INT_PTR result=t.DoModal();
    if (result!= IDOK)       return;

      m_edit.SetWindowText(m_text1);//но, ругается на m_text1
//  error C2065: 'm_text1' : undeclared identifier

}


Вестимо надо этот m_text1 надо как то туда переслать или может это вообще по другому реализуется. подскажите, плз.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.