Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как внедрить медод Класса в МФС? У меня есть код ,... 
:(
    Опции темы
Sasha1
  Дата 10.5.2006, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



есть класс  Complex

.cpp



Complex Use;
.
.
.
.
.

void Complex::Vivod()
{

this->SetDlgItemText(IDC_EDIT1,str5);
this->SetDlgItemText(IDC_EDIT2,str6);
}


void CProjectDlg::OnBnClickedButton8()


    
    
str1="1.2";
 str2="1.2";
 str5="1.2";
 str6="1.2";

    p_Edit7.GetWindowText(str1);
    p_Edit8.GetWindowText(str2);

double im = atof (str1);
double re = atof (str2);
    
str5.Format ("%lg", im);
str6.Format ("%lg", re);


Use.Vivod();

//this->SetDlgItemText(IDC_EDIT1,str5);
//this->SetDlgItemText(IDC_EDIT2,str6);
}







.h


class Complex : public CDialog
    {
public:

    CString Str;
CString str1 ;
CString str2 ;
CString str3 ;
CString str4 ;
CString str5 ;
CString str6 ; 
double summim;
double summre;
 afx_msg void Vivod();

    };






как сделать что бы ето работало?

Код компилируется.
???


Програма читает строку , конвертирует в Доубле и выводит в другое место...
 
PM MAIL   Вверх
Earnest
Дата 10.5.2006, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Sasha1
1) пиши о своих проблемах конкретнее, не жди телепатов
2) пользуйся тэгами code, пожалей тех, кто захочет тебе помочь
3) перестань издеваться над русским языком, ты не младенец, и не в чате. 


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


Новичок



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

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




ProjectDlg.cpp

отрывок из программы. 


Код


void Complex::Vivod()          // Это примерно рабочий метод класса , далее используется ( По 
                                           //нажатие 8 кнопки )
{

this->SetDlgItemText(IDC_EDIT1,str5);
this->SetDlgItemText(IDC_EDIT2,str6);
}


void CProjectDlg::OnBnClickedButton1()
{

    
str1 =("1.2");
 str2= ("1.2");
 str3= ("1.2");
 str4= ("1.2");
 str5= ("1.2");
str6 =("1.2"); 

p_Edit1.GetWindowText(str1);
p_Edit2.GetWindowText(str2);
p_Edit3.GetWindowText(str3);
p_Edit4.GetWindowText(str4);


double im1 = atof (str1);
double re1 = atof (str2);
double im2 = atof (str3);
double re2 = atof (str4);




summim=im1+im2;
summre=re1+re2;





str5.Format ("%lg", summim);
str6.Format ("%lg", summre);




this->SetDlgItemText(IDC_EDIT5,str5);
this->SetDlgItemText(IDC_EDIT6,str6);

}

void CProjectDlg::OnBnClickedButton2()
{
str1 =("1.2");
 str2= ("1.2");
 str3= ("1.2");
 str4= ("1.2");
 str5= ("1.2");
str6 =("1.2");

p_Edit1.GetWindowText(str1);
p_Edit2.GetWindowText(str2);
p_Edit3.GetWindowText(str3);
p_Edit4.GetWindowText(str4);


double im1 = atof (str1);
double re1 = atof (str2);
double im2 = atof (str3);
double re2 = atof (str4);

summim=im1-im2;
summre=re1-re2;

str5.Format ("%lg", summim);
str6.Format ("%lg", summre);




this->SetDlgItemText(IDC_EDIT5,str5);
this->SetDlgItemText(IDC_EDIT6,str6);

}

void CProjectDlg::OnBnClickedButton4()
{
str1 =("1.2");
 str2= ("1.2");
 str3= ("1.2");
 str4= ("1.2");
 str5= ("1.2");
str6 =("1.2");



p_Edit1.GetWindowText(str1);
p_Edit2.GetWindowText(str2);
p_Edit3.GetWindowText(str3);
p_Edit4.GetWindowText(str4);


double im1 = atof (str1);
double re1 = atof (str2);
double im2 = atof (str3);
double re2 = atof (str4);

    double m2_arg2 = re2*re2 + im2*im2;
    
    if( m2_arg2 == 0 )
    {
        ::AfxMessageBox("Деление не возможно");
    return;
    }
        summim = (im1*re2 + re1*im2) / m2_arg2; 
    summre = (re1*re2 - im1*im2) / m2_arg2;
   

str5.Format ("%lg", summim);
str6.Format ("%lg", summre);




this->SetDlgItemText(IDC_EDIT5,str5);
this->SetDlgItemText(IDC_EDIT6,str6);




}

void CProjectDlg::OnBnClickedButton3()
{
    str1 =("1.2");
 str2= ("1.2");
 str3= ("1.2");
 str4= ("1.2");
 str5= ("1.2");
str6 =("1.2");



p_Edit1.GetWindowText(str1);
p_Edit2.GetWindowText(str2);
p_Edit3.GetWindowText(str3);
p_Edit4.GetWindowText(str4);


double im1 = atof (str1);
double re1 = atof (str2);
double im2 = atof (str3);
double re2 = atof (str4);

summim=im1*re2 + re1*im2;
summre=re1*re2 - im1*im2;



str5.Format ("%lg", summim);
str6.Format ("%lg", summre);




this->SetDlgItemText(IDC_EDIT5,str5);
this->SetDlgItemText(IDC_EDIT6,str6);


}







void CProjectDlg::OnBnClickedButton8()


    
    
str1="1.2";
 str2="1.2";
 str5="1.2";
 str6="1.2";

    p_Edit7.GetWindowText(str1);
    p_Edit8.GetWindowText(str2);

double im = atof (str1);
double re = atof (str2);
    
str5.Format ("%lg", im);
str6.Format ("%lg", re);


Use.Vivod();  // Вот этот метод класса Комплех должен выполнять функцию которая описанна ниже

//this->SetDlgItemText(IDC_EDIT1,str5);     //Вот Эта ФУнкия
//this->SetDlgItemText(IDC_EDIT2,str6);    // Ну И вот эта соответсвенно
}




ProjectDlg .h
Код


#pragma once
#include "afxwin.h"



class CProjectDlg : public CDialog
{

public:
    CProjectDlg(CWnd* pParent = NULL);    
    enum { IDD = IDD_PROJECT_DIALOG };
CString Str;
CString str1 ;
CString str2 ;
CString str3 ;
CString str4 ;
CString str5 ;
CString str6 ; 
double summim;
double summre;


//CString m_edit2;

    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    



protected:
    bool m_EditNo;
    bool m_Edit1No;
    bool m_Edit2No;
    bool m_Edit3No;
    HICON m_hIcon;

    // ІЈҐНЄє°T®§№пАіЁз¦Ў
    virtual BOOL OnInitDialog();
    afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
    afx_msg void OnPaint();
    afx_msg HCURSOR OnQueryDragIcon();
    DECLARE_MESSAGE_MAP()
public:

    CEdit p_Edit1;
    CEdit p_Edit2;
    CEdit p_Edit3;
    CEdit p_Edit4;
    afx_msg void OnBnClickedButton1();
    afx_msg void OnBnClickedButton2();
    afx_msg void OnBnClickedButton4();
    afx_msg void OnBnClickedButton3();
    afx_msg void OnBnClickedButton5();
    afx_msg void OnBnClickedButton6();
    afx_msg void OnBnClickedButton7();
    CEdit p_Edit5;
    CEdit p_Edit6;
    afx_msg void OnBnClickedButton8();
    CEdit p_Edit7;
    CEdit p_Edit8;
    afx_msg void OnEnSetfocusEdit1();
    afx_msg void OnBnClickedButton9();
    afx_msg void OnEnSetfocusEdit2();
    afx_msg void OnEnSetfocusEdit3();
    afx_msg void OnEnSetfocusEdit4();
    afx_msg void OnBnClickedButton10();
    afx_msg void OnBnClickedButton11();
    afx_msg void OnBnClickedButton12();
    afx_msg void OnBnClickedButton13();
    afx_msg void OnBnClickedButton14();
    afx_msg void OnBnClickedButton15();
    afx_msg void OnBnClickedButton16();
    afx_msg void OnBnClickedButton17();
    afx_msg void OnBnClickedButton18();
    afx_msg void OnBnClickedButton19();
    afx_msg void OnBnClickedButton20();


};

class Complex : public CDialog
    {
public:

    CString Str;
CString str1 ;
CString str2 ;
CString str3 ;
CString str4 ;
CString str5 ;
CString str6 ; 
double summim;
double summre;
 afx_msg void Vivod();  //Описание метода Класса Комплекса. 

    };




В чём вопрос.


Можно оставить как есть , но тогде не будет задет ООП . а это не красиво.(Ну и не правильно).

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





Мне понятно что я  написал , лучше не могу .. 

 
PM MAIL   Вверх
Sasha1
Дата 11.5.2006, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Неужели никто не знает )) а как иначе писать ) smile  
PM MAIL   Вверх
LPNcom
Дата 12.5.2006, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Честна, хотел тибе помочь - крутил вверх-вниз - нифига ни понЯл.
Удали все лишнее, оставь главное, добавь комменты и скажи канкретно - чо нада. 
PM MAIL ICQ   Вверх
Sasha1
Дата 12.5.2006, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ок. Извиняюсь...




Можно написать так .... И это будет работать... 

Код


void CProjectDlg::OnBnClickedButton8()


    
    
str1="1.2";
 str2="1.2";
 str5="1.2";
 str6="1.2";

    p_Edit7.GetWindowText(str1);
    p_Edit8.GetWindowText(str2);

double im = atof (str1);
double re = atof (str2);
    
str5.Format ("%lg", im);
str6.Format ("%lg", re);




this->SetDlgItemText(IDC_EDIT1,str5);     
this->SetDlgItemText(IDC_EDIT2,str6);   

 }




а я хочу что бы это работало только выглядело примерно так... ( Что бы не были напрямую задействованны функции , а чтобы был вызов метода класа )


Код


Complex use;


void CProjectDlg::OnBnClickedButton8()


    
    
str1="1.2";
 str2="1.2";
 str5="1.2";
 str6="1.2";

  
use.getwindtext();
use.atof();
use.format();    
use.vivod();   

 }




complex.h


Код


#pragma once
#include "afxwin.h"


class Complex : public CDialog
    {
public:

    CString Str;
CString str1 ;
CString str2 ;
CString str3 ;
CString str4 ;
CString str5 ;
CString str6 ; 
double summim;
double summre;
 afx_msg void Vivod();
afx_msg void getwindtext();
afx_msg void format(); 
afx_msg void atof();

    };





complex.cpp
Код


complex::getwindtext()
{

this->SetDlgItemText(IDC_EDIT1,str5);    
this->SetDlgItemText(IDC_EDIT2,str6);
}


complex::atof()
{
double im = atof (str1);
double re = atof (str2);
    

}


complex::format()
{    

str5.Format ("%lg", im);
str6.Format ("%lg", re);
}

complex::vivod()
{
this->SetDlgItemText(IDC_EDIT1,str5);     
this->SetDlgItemText(IDC_EDIT2,str6);
}




Хочеться чтобы была просто другая конструкция... .. Что надо ставить в скобках гапример 

complex::vivod()  ???  и что надо кода  use.vivod(); ??? что ьы он делал

this->SetDlgItemText(IDC_EDIT1,str5);     
this->SetDlgItemText(IDC_EDIT2,str6);   

???

Добавлено @ 19:05 
_______________________________________________________________________________
Хочеться чтобы была просто другая конструкция... .. Что надо ставить в скобках например 
тут

complex::vivod()  ???  и что надо когда  use.vivod(); ??? что бы он делал

this->SetDlgItemText(IDC_EDIT1,str5);     
this->SetDlgItemText(IDC_EDIT2,str6);   

??? 

Это сообщение отредактировал(а) Sasha1 - 12.5.2006, 19:02
PM MAIL   Вверх
Earnest
Дата 12.5.2006, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Зачем делать Complex диалогом? У тебя есть диалог ProjectDlg, а к одному окну нельзя прицепить 2 разных диалоговых класса.
И не надо. Не наследуй класс Complex ни от чего. Передавай в функции, где ты хочешь читать-писать из диалога ссылку на него (можно просто как CWnd, точный класс для этого не обязателен):
Код

void complex::vivod(CWnd* pTarget)
{
   pTarget->SetDlgItemText(IDC_EDIT1,str5);     
   pTarget->SetDlgItemText(IDC_EDIT2,str6);
}


Добавлено @ 19:27 
Можно сделать и немного по-другому: хранить ссылку на диалог в классе Complex, передавая ее в конструкторе. Тогда так:
Код

class Complex
{
   ...
   Complex(CWnd& Target): m_wndTarget(Target) {}

   ...
   CWnd& m_wndTarget;
};

...

void Complex::vivod()
{
   m_wndTarget.SetDlgItemText(IDC_EDIT1,str5);     
   m_wndTarget.SetDlgItemText(IDC_EDIT2,str6);
}
 


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


Материалист
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 7.10.2003
Где: г. Всеволожск

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



Цитата(Sasha1 @  12.5.2006,  18:53 Найти цитируемый пост)
Можно написать так .... И это будет работать... 

Ну и замечательно! Иногда "лучше по-простому, чем по-умному"!  smile  


--------------------
忍者

user posted image
PM MAIL   Вверх
Sasha1
Дата 14.5.2006, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



чаго то не пашет , наверное ошибся


Код

void complex::vivod(CWnd* pTarget)
{
   pTarget->SetDlgItemText(IDC_EDIT1,str5);     
   pTarget->SetDlgItemText(IDC_EDIT2,str6);
}



в   h_ке описал метод

Код

class Complex

puplic:
...
void complex::vivod(CWnd* pTarget);

....


все тип топ , токо как её запустить.. 

т.е.

Код

void CProjectDlg::OnBnClickedButton8()


    
    
str1="1.2";
 str2="1.2";
 str5="1.2";
 str6="1.2";

  
   
complex::vivod(?????);   

 }




 что вместо вопросиков поставить?


если проблема не только в них напишите , как использовать этот метод класса)?

Добавлено @ 17:59 
2 способ , даже отладить не смог))  
PM MAIL   Вверх
Dray
Дата 14.5.2006, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Материалист
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 7.10.2003
Где: г. Всеволожск

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



Код
pTarget->SetDlgItemText(IDC_EDIT1,str5);
pTarget->SetDlgItemText(IDC_EDIT2,str6);

Откуда функция берет str5 и str6? Это глобальные переменные?
Вместо вопросиков поставить this. 


--------------------
忍者

user posted image
PM MAIL   Вверх
Sasha1
Дата 15.5.2006, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



c This я разобрался , пасибо.. а вот str5 str6 - CString 
из Дилогового окна ,  тут проблема... Я переписал под отдельный класс. 

Т.е есть Сoplex.cpp & Copmlex.h .

Можно сделать так .  СDialog h;
h.str5  ;  и он ето видит , вопрос как сделать IDC_EDIT1 ? 
PM MAIL   Вверх
Earnest
Дата 15.5.2006, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Предполагалось, что str должны быть переменными Complex... или передаваться как параметры... Глубину твоего дизайна я постичь не сумела, поэтому не знаю как лучше...

 


--------------------
...
PM   Вверх
Sasha1
Дата 15.5.2006, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ну да.. я хочу оперировать с 2 классами .. ввод с Диалогового окна , обработка входных параметров  Классом СДиалог , а исполнение нужной функции методом класса Комплекс ) 
PM MAIL   Вверх
Earnest
Дата 15.5.2006, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Тогда передавай туда все нужные переменные. Или, если их много, засунь их все в структуру и передавай ее. 


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


Новичок



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

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



я сделал . просто создал много новых методов CProjectDlg /  всё работает , токо я хотел на 2 класса разбить ... Могу потом своё творение сюда выложить если кому интересно? завтра пойду показывать , так что i'll be back smile 

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


 




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


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

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