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

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Банкомат  (Прочитано 11588 раз)
0 Пользователей и 5 Гостей смотрят эту тему.
Kdv_83
Гость
« : 24-07-2004 07:00 » 

Вот у меня такое задание: необходимо создать приложение - банкомат на VC++ c  MFC срок 2 недели
Для меня это совершенно новая среда программирования, сначала даже не думал что возникнуть трудности ( язык С++ как бы знаком), но они возникли.

Помогите, пожалуйста,  мне сейчас надо картинку поменять по событию нажатия клавиши Buttona например

 P.S. В том что я не могу написать нужный код на событие думаю виновато то что я незнаю синтаксис функций API, MFC. Может у кого нибудь есть (или ссылку кинет) хороший справочник по ним
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

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


« Ответ #1 : 24-07-2004 08:01 » 

если в MFC - просто 2 раза щёлкни по изображению кнопки на форме в редакторе ресурсов - и визард сам создаст обработчик - только пиши потом свой код и всё
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

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


« Ответ #2 : 25-07-2004 19:05 » 

Дима,
Цитата

мне сейчас надо картинку поменять

так это слишком общее определение Улыбаюсь

расскажи поподробнее - мы и поможем, особенно когда Джон наткнётся на эту тему - он тебе объяснит гораздо лучше меня

я же с картинками не работал
Записан

dima (KDV_83)
Гость
« Ответ #3 : 26-07-2004 08:17 » 

Попробую поподробней
   Сначала через AppWizard выбрал Dialog based. Все каркас приложения
   создан, потом через панель инструментов Controls ставлю компонент
   Picture, в нем указываю нужную картинку1 (bmp)
   Запускаю, появляется диалоговое окно с картинкой1

   Но потом надо поменять картинку1 на картинку2 по событию нажатия
   клавиши Buttona или включателя RadioButtona (это типа карта введена
   в банкомат)

   Картинка1 это - изображение с надписью "Банкомат готов к работе,
   введите карту"
   Картинка2 это - надпись типа "Введите PIN код"

   вот так я хочу, но Вы может что-нибудь легче посоветуете
Записан
Джон
просто
Администратор

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

« Ответ #4 : 26-07-2004 09:46 » 

dima (KDV_83),

Если у тебя уже есть диалог и картинки из ресурсов (например IDB_BITMAP1  и IDB_BITMAP2)

1. Вставляешь "Picture control" - ты уже его наверно вставил. Ему надо дать ID - например IDC_MYBITMAP. В свойствах говоришь тип - Bitmap и выбираешь первоначальную картинку - IDB_BITMAP1.

2. Ctrl+DoubleClick по контролу - открывается окошко для переменных членов класса. Выбираешь тип Control и даёшь имя  - m_bmp1,

3. Вставляешь кнопку - позже заменишь её на отработку события напр. вставили карту. Ctrl+DoubleClick по этой кнопке - ты в теле ф-ии обработки нажатия на эту кнопку. Там пишешь след.:

CTestPictureChangeDlg::OnButton1()
{
   CBitmap bmp2;
   bmp2.LoadBitmap(IDB_BITMAP2);
   m_bmp1.SetBitmap(bmp2);
}

Она поменяет конечно только один раз, но начало положено.
Будут проблемы обращайся - а ещё лучше зарегестрируйся и дай своё мыло, я тебе проектик на него кину.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"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."
dima(KDV_83)
Гость
« Ответ #5 : 26-07-2004 14:20 » 

Что то не меняется картинка, все вроде как ты сказал сделал
Ошибок нет
Каркас с первой картинкой запускается, на Button кликаешь все также картинка1

Вот у тебя:  "Выбираешь тип Control и даёшь имя - m_bmp1"  я там Name поставил bmp1, Category - Control, type- CStatic   Я нечего не перепутал?
Записан
Джон
просто
Администратор

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

« Ответ #6 : 26-07-2004 15:47 » new

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

Значит так выбор проекта MFC Dialog - всё стандартно - я назвал диалог - class TestPictureChange. Те получил класс

class CTestPictureChangeDlg : public CDialog

 После "показывания" диалога - вставляем picture control
ВАЖНО:
 - дать ему отличный от IDC_STATIC ID, я дал IDC_BMP1
 - Выбрать тип Bitmap
 - Проинициаллизировать с первой картинкой (у меня две картинки IDB_BITMAP1 и IDB_BITMAP2)

это код Н файла

// TestPictureChangeDlg.h : Header-Datei
//

#if !defined(AFX_TESTPICTURECHANGEDLG_H__24AC3008_D8E1_4285_9EC1_884BB2143FA0__INCLUDED_)
#define AFX_TESTPICTURECHANGEDLG_H__24AC3008_D8E1_4285_9EC1_884BB2143FA0__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

/////////////////////////////////////////////////////////////////////////////
// CTestPictureChangeDlg Dialogfeld

class CTestPictureChangeDlg : public CDialog
{

public:
   CTestPictureChangeDlg(CWnd* pParent = NULL);

   //{{AFX_DATA(CTestPictureChangeDlg)
   enum { IDD = IDD_TESTPICTURECHANGE_DIALOG };
   CStatic   m_bmp1;
   //}}AFX_DATA

   //{{AFX_VIRTUAL(CTestPictureChangeDlg)
   protected:
   virtual void DoDataExchange(CDataExchange* pDX);   // DDX/DDV-Unterstützung
   //}}AFX_VIRTUAL

protected:
   HICON m_hIcon;

   //{{AFX_MSG(CTestPictureChangeDlg)
   virtual BOOL OnInitDialog();
   afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
   afx_msg void OnPaint();
   afx_msg HCURSOR OnQueryDragIcon();
   afx_msg void OnButton1();
   //}}AFX_MSG
   DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
#endif // !defined(AFX_TESTPICTURECHANGEDLG_H__24AC3008_D8E1_4285_9EC1_884BB2143FA0__INCLUDED_)

а это из СРР - я приведу только изменения отличные от "оригинальной версии", которую ты получаешь сразу после мастера (wizard)

void CTestPictureChangeDlg::DoDataExchange(CDataExchange* pDX)
{
   CDialog::DoDataExchange(pDX);
   //{{AFX_DATA_MAP(CTestPictureChangeDlg)
   DDX_Control(pDX, IDC_BMP1, m_bmp1);
   //}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CTestPictureChangeDlg, CDialog)
   //{{AFX_MSG_MAP(CTestPictureChangeDlg)
   ON_WM_SYSCOMMAND()
   ON_WM_PAINT()
   ON_WM_QUERYDRAGICON()
   ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
   //}}AFX_MSG_MAP
END_MESSAGE_MAP()


void CTestPictureChangeDlg::OnButton1()
{
   CBitmap bmp2;
   bmp2.LoadBitmap(IDB_BITMAP2);
   m_bmp1.SetBitmap(bmp2);
}


Вот собсно и всё - проверяй что не так.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"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."
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #7 : 26-07-2004 16:00 » 

Джон - все работает именно так как ты сказал Улыбаюсь лучше бы и я не объяснил...
dima(KDV_83), перепроверь, как ты вызываешь и вызываешь ли код обработчика нажатия кнопки, поставь брейкпоинт.
Проверь тип контроля картинки - он должен быть именно bitmap для отображения битмапов и icon для отображения иконок, в противном случае будет как у тебя...

В общем покапайся.
Записан

А птичку нашу прошу не обижать!!!
dima(KDV_83)
Гость
« Ответ #8 : 27-07-2004 10:08 » 

Джон, теперь картинка1 исчезает, а вместо картинки2 белое окошко
может где-нибудбь в настройках среды у меня что-то не так
Я тебе на мыло сейчас проект вышлю

Я уже зарегистрировался
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines