Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1] 2  Все   Вниз
  Печать  
Автор Тема: Помогите разобраться с mfc  (Прочитано 24031 раз)
0 Пользователей и 4 Гостей смотрят эту тему.
JIeshiy
Участник

ru
Offline Offline
Пол: Мужской

« : 29-10-2009 11:50 » 

Помогите написать программу: добавление в лисбокс текста по нажатию кнопки, удаление из едита по нажатию кнопки. Проблема в присвоение переменных.

какой тип переменных надо в этом случае задавать?
« Последнее редактирование: 29-10-2009 11:56 от Алексей1153++ » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 29-10-2009 11:56 » 

ты хоть проект прикрепи с формой и контролами. А то лень это всё делать, а после этого всё описанное выше - пара строчек Улыбаюсь
Записан

JIeshiy
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 29-10-2009 12:03 » 

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

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 29-10-2009 12:04 » 

JIeshiy, эхъ, тогда без намёков:

      КОД ПОКАЗЫВАЙ !! ))))))
Записан

JIeshiy
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 29-10-2009 12:13 » new

Код:
// workkDlg.cpp : файл реализации
//

#include "stdafx.h"
#include "workk.h"
#include "workkDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

// диалоговое окно CworkkDlg




CworkkDlg::CworkkDlg(CWnd* pParent /*=NULL*/)
: CDialog(CworkkDlg::IDD, pParent)

{
//{{AFX_DATA_INIT(CworkkDlg)
m_Ed = _T("");
m_lisT = _T("");
//}}AFX_DATA_INIT
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CworkkDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CworkkDlg)
DDX_Control(pDX, IDC_EDIT1, m_Ed);
DDX_Control(pDX, IDC_LIST1, m_lisT);
}

BEGIN_MESSAGE_MAP(CworkkDlg, CDialog)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_BUTTON1, &CworkkDlg::OnAdd)
ON_BN_CLICKED(IDC_BUTTON2, &CworkkDlg::OnDelAll)
ON_EN_CHANGE(IDC_EDIT1, &CworkkDlg::OnEnChangeEdit1)
ON_LBN_SELCHANGE(IDC_LIST1, &CworkkDlg::OnLbnSelchangeList1)
END_MESSAGE_MAP()


// обработчики сообщений CworkkDlg

BOOL CworkkDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// Задает значок для этого диалогового окна. Среда делает это автоматически,
//  если главное окно приложения не является диалоговым
SetIcon(m_hIcon, TRUE); // Крупный значок
SetIcon(m_hIcon, FALSE); // Мелкий значок

// TODO: добавьте дополнительную инициализацию

return TRUE;  // возврат значения TRUE, если фокус не передан элементу управления
}

// При добавлении кнопки свертывания в диалоговое окно нужно воспользоваться приведенным ниже кодом,
//  чтобы нарисовать значок. Для приложений MFC, использующих модель документов или представлений,
//  это автоматически выполняется рабочей средой.

void CworkkDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // контекст устройства для рисования

SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

// Выравнивание значка по центру клиентского прямоугольника
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// Нарисуйте значок
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}

// Система вызывает эту функцию для получения отображения курсора при перемещении
//  свернутого окна.
HCURSOR CworkkDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}


void CworkkDlg::OnAdd()
{
// TODO: добавьте свой код обработчика уведомлений
UpdateData();
   CListBox *p1=(CListBox *) GetDlgItem(IDC_LIST);
        if (m_Ed!="") {
p1->InsertString(-1,m_Ed);
        m_Ed="";
UpdateData(false);}
else AfxMessageBox("нет данных");
}

void CworkkDlg::OnDelAll()
{
// TODO: добавьте свой код обработчика уведомлений
CListBox *p1=(CListBox *) GetDlgItem(IDC_lisT);
p1->ResetContent();
UpdateData(false);
}

void CworkkDlg::OnEnChangeEdit1()
{
// TODO:  Если это элемент управления RICHEDIT, то элемент управления не будет
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.

// TODO:  Добавьте код элемента управления
}

void CworkkDlg::OnLbnSelchangeList1()
{
// TODO: добавьте свой код обработчика уведомлений
}
« Последнее редактирование: 29-10-2009 12:16 от Вад » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 29-10-2009 12:21 » 

Код:
CListBox *p1=(CListBox *) GetDlgItem(IDC_lisT);
if(p1)->AddString("строка");



CEdit *ed1=(CEdit*) GetDlgItem(IDC_ed1);
if(ed1)ed1->SetWindowText("");
Записан

JIeshiy
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 29-10-2009 12:34 » 

кучу ошибок  типа невозможно преобразовать const char в int
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #7 : 29-10-2009 12:38 » 

JIeshiy, не надо просто тупо копировать текст. Это не просто текст, это код, который имеет некий смысл.

Что стоит здесь?

if(p1)->AddString("строка");

Очевидно, что Лёшка что-то упустил, но что?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #8 : 29-10-2009 12:39 » 

а где такое преобразование в моих строках ?


а, точно, пропустил ))
Записан

JIeshiy
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 29-10-2009 12:41 » 

но с данным кодом который прислал Алексей  ни чего не связано, просто я присвоил едиту и лисбоксу тип инт, может я не правильно сделал?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #10 : 29-10-2009 12:43 » 

JIeshiy, твой код я не компилировал, хоть покажи места, на которые ругается
Записан

JIeshiy
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 29-10-2009 12:45 » 

Код:
CworkkDlg::CworkkDlg(CWnd* pParent /*=NULL*/)
: CDialog(CworkkDlg::IDD, pParent)

, m_Ed(0)
, m_lisT(0)
{
//{{AFX_DATA_INIT(CworkkDlg)
m_Ed = _T("");
m_lisT = _T("");
//}}AFX_DATA_INIT
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CworkkDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CworkkDlg)
DDX_Control(pDX, IDC_EDIT1, m_Ed);
DDX_Control(pDX, IDC_LIST1, m_lisT);
}

BEGIN_MESSAGE_MAP(CworkkDlg, CDialog)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, &CworkkDlg::OnAdd)
ON_BN_CLICKED(IDC_BUTTON2, &CworkkDlg::OnDelAll)
ON_EN_CHANGE(IDC_EDIT1, &CworkkDlg::OnEnChangeEdit1)
ON_LBN_SELCHANGE(IDC_LIST1, &CworkkDlg::OnLbnSelchangeList1)
END_MESSAGE_MAP()


в основном все тут
« Последнее редактирование: 29-10-2009 12:46 от Джон » Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #12 : 29-10-2009 12:46 » 

Хорошо:

Объясни пожалуйста, что ты хотел вот этим сказать:

   m_Ed = _T("");
   m_lisT = _T("");

И какого типа у тебя m_Ed и m_lisT.

зы Теперь я понимаю смысл твоего вопроса.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
JIeshiy
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #13 : 29-10-2009 12:46 » 

для указателей на едит и листбокс
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #14 : 29-10-2009 12:47 » 

А этим

   m_Ed(0)
   m_lisT(0)
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #15 : 29-10-2009 12:48 » 

Указателя? Хорошо, а как можно указателю присвоить значение строки?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
JIeshiy
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #16 : 29-10-2009 12:49 » 

это при присваение переменной автоматически
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #17 : 29-10-2009 12:50 » 

Правильно, так проинициаллизировал это мастер.

А всё-таки, как ты объяснишь инициаллизацию указателей на контрол (по сути это окна) строковым значением?

   m_Ed = _T("");
   m_lisT = _T("");
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
JIeshiy
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #18 : 29-10-2009 12:52 » 

Это я скопировал с другого проекта.
« Последнее редактирование: 29-10-2009 15:33 от Sel » Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #19 : 29-10-2009 13:01 » 

Ага... и как ты дальше думаешь? Как тебе можно помочь? Если твой код состоит из частей других пректов?

Представь, ты приносишь в мастерскую "неведому зверюшку", часть которой взята с колхозной сноповязалки, другая с паровоза, третья с электродоилки и говоришь, что этот самолёт почему-то не летает.

Может тебе всё-таки попробовать начать с простого? Создать СВОЙ проект, добавить в него ListBox и программно в OnInitDialog добавть в листбокс одну строчку. Если ты пользуешься VS, то самому тебе надо будет написать только одну строчку кода.


И вобще на будущее. Разница между помощью и медвежьей услугой (в данном случае - сделать за тебя) небольшая, но существенная - после второй количество знаний у человека остаётся на прежнем уровне, другими словами он ничему не научился. Так тебе помощь нужна или просто за тебя сделать?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
JIeshiy
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #20 : 29-10-2009 13:07 » 

 помощь конечно
Записан
JIeshiy
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #21 : 29-10-2009 13:17 » 

а как присвоить текстовую переменную?
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #22 : 29-10-2009 13:31 » 

Вопрос, стоит ЧЕМУ её присвоить?

Например объекту класса CString можно делать так:

CString st1 = _T("Hi");
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
JIeshiy
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #23 : 29-10-2009 13:33 » 

А какой тип тогда присваивать лисбоксу с едитом?

Как преобразовать из одного типа например int в string?
« Последнее редактирование: 29-10-2009 15:34 от Sel » Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #24 : 29-10-2009 14:22 » 

JIeshiy, ты меня конечно извини, но что ты понимаешь под "какой тип присваивать"? Тип не присваевается в принципе, по определению.

Преобразовать из int в СString можно используя ф-ии форматирования. Например так:

int nData = 1;
CString stBuf;
stBuf.Format(_T("%d"), nData);
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #25 : 29-10-2009 14:25 » 

Цитата
а какой тип тогда присваивать лисбоксу с едитом
у них свои функции работы с содержимым.
у CEdit есть метод GetWindowText() / SetWindowText()

у листбокса - AddString () (и другие)


Код:
//int-> CString :
CString txt;
txt.Format("%d",555);

//CString-> int :

int i=atoi(txt);
Записан

JIeshiy
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #26 : 29-10-2009 14:38 » 

у меня продолжает ругаться невозможно преобразовать int в cons char и в LPCSTR
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #27 : 29-10-2009 14:43 » 

JIeshiy, покажи строку кода, на которую ругается.
Записан

JIeshiy
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #28 : 29-10-2009 14:50 » 

Код:
CworkkDlg::CworkkDlg(CWnd* pParent /*=NULL*/)
: CDialog(CworkkDlg::IDD, pParent)

, m_Ed(0)
, m_lisT(0)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CworkkDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CworkkDlg)
DDX_Control(pDX, IDC_EDIT1, m_Ed);
DDX_Control(pDX, IDC_LIST1, m_lisT);
}
« Последнее редактирование: 29-10-2009 15:19 от Вад » Записан
JIeshiy
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #29 : 29-10-2009 14:52 » 

а можно написать программу эту без указателей?
Записан
Страниц: [1] 2  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines