Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Взаимодействие между 2 классами, 2 класса 
V
    Опции темы
BIV
Дата 27.6.2013, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Всем доброе время суток!
Помогите разобраться как взаимодействовать с 2мя классами. У меня есть главный диалог класса CnotepadDlg и немодальный диалог класса Dialog. В классе Dialog пытаюсь воздействовать на элементы, которые принадлежат классу CnotepadDlg. Вот мой неработающий пример

Код

void Dialog::OnBnClickedButton3()
{
    CnotepadDlg* Dlg;
    int nSelStart, nSelEnd;
    Dlg->edit1.SetFocus();        //Пытаюсь установить фокус на элемент класса CnotepadDlg
    Dlg->edit1.GetSel(nSelStart,nSelEnd);
    UpdateData(TRUE);
    CString a=Dlg->edit, b, c;
    EditC1.GetWindowText(b);
...
}


Ошибка на 3й строчке: Run-Time Check Failure #3 - The variable 'Dlg' is being used without being initialized.

PM MAIL   Вверх
deniska
Дата 27.6.2013, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



правильно ругается, читайте внимательнее сообщение об ошибке. переменная не проинициализирована, там мусор. нужно проинициализировать указатель реальным адресом 
PM MAIL ICQ   Вверх
BIV
Дата 27.6.2013, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Если написать вот так

Код

void Dialog::OnBnClickedButton3()
{
    CnotepadDlg Dlg;
    int nSelStart, nSelEnd;
    Dlg.edit1.SetFocus();        //Пытаюсь установить фокус на элемент класса CnotepadDlg
    Dlg.edit1.GetSel(nSelStart,nSelEnd);
    UpdateData(TRUE);
    CString a=Dlg.edit, b, c;
    EditC1.GetWindowText(b);
...
}


то будет вот это:
user posted image
PM MAIL   Вверх
mes
Дата 27.6.2013, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(BIV @  27.6.2013,  11:57 Найти цитируемый пост)
. В классе Dialog пытаюсь воздействовать на элементы, которые принадлежат классу CnotepadDlg

подумайте об обьекте, а не о классе...



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


Бывалый
*


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

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



Цитата(mes @  27.6.2013,  20:18 Найти цитируемый пост)
подумайте об обьекте, а не о классе...


Я что-то не врубаюсь что Вы имеете ввиду... У меня есть в классе Dialog кнопка, с которой пытаюсь воздействовать элемент (или объект) класса CEdit находящийся в классе CnotepadDlg
PM MAIL   Вверх
deniska
Дата 28.6.2013, 07:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

Dlg.edit1.SetFocus();
   

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

CDialog::Create() создаст не модальный диалог, после этого можно устанавливать фокус и тд, затем  ShowWindow() , отрисует его

по параметрам функций которые выше привел, читайте мсдн

PM MAIL ICQ   Вверх
BIV
Дата 28.6.2013, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(deniska @  28.6.2013,  05:38 Найти цитируемый пост)
прежде чем обращаться к окошкам диалогового окна, да и к самому окну, его нужно создать.

CDialog::Create() создаст не модальный диалог, после этого можно устанавливать фокус и тд, затем  ShowWindow() , отрисует его


CnotepadDlg уже создан и является главным окном, скажем окно текстового редактора.
CDialog немодальное окно, которое создается Create(IDD_DIALOG1); и запускается через ShowWindow(SW_SHOW);. Предположим это будет что-то типа поиска текста в текстовом поле, который в окне класса CnotepadDlg. В  немодальном окне есть кнопка "Найти". При нажатии на эту кнопку, в текстовом поле, которая находится в окне класса CnotepadDlg, выделяется найденный текст

Я знаю что эту возможность можно реализовать через CFindReplaceDialog(), но я хочу создать свое окно.
Проблема в том, что я не могу при нажатии на кнопку "OnBnClickedButton3" воздействовать на объекты класса CnotepadDlg



Создан главный диалог класса CnotepadDlg
Создан дочерний диалог класса Dialog

notepadDlg.h

Код

#pragma once
#include "afxwin.h"
#include "Dialog.h"

class CnotepadDlg : public CDialog
{
...

public:
    Dialog* Replace;
...




notepadDlg.cpp

Код

...

//Правка_Заменить...
void CnotepadDlg::OnEditRepeat()
{
    // Вызов окна
    if(!Replace)
    {
        Replace = new Dialog;
        Replace->Create(IDD_DIALOG1);
        Replace->ShowWindow(SW_SHOW);
        Replace->EditC1.SetWindowText(strFind);
        CnotepadDlg This=this;
    }
    else //если создан
    {
        Replace->Edit1=strFind;
        Replace->SetActiveWindow(); //то делаем его активным
        Replace->ShowWindow(SW_SHOW);
        Replace->EditC1.SetWindowText(strFind);
    }
}




Dialog.h

Код

#pragma once
#include "afxwin.h"
//#include "notepadDlg.h"  //Если раскомментировать, то рычит

// Dialog dialog

class Dialog : public CDialog
{

public:
...
    CEdit EditC1;
    afx_msg void OnBnClickedButton3();
};


Dialog.cpp

Код

...
#include "notepadDlg.h"
...

void Dialog::OnBnClickedButton3()
{
    CnotepadDlg Dlg;
    Dlg.GetDlgItem(IDD_NOTEPAD_DIALOG);
    CEdit *edit1;
    edit1=(CEdit*)Dlg.GetDlgItem(IDC_EDIT1);


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


 




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


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

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