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

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

ru
Offline Offline
Пол: Женский

« : 24-05-2010 10:54 » 

Вопрос для Вас совсем простой. В Делфи я знаю ,как это сделать, а вот в С++ Visual Studio -нет.
Пользуюсь MFC, поэтому плоховато кухню всю представляю.

Короче, из основного окна вызываю диалоговое окно с компонентами Edit , Static, Button.
В одном случае надо вводить, к примеру, адрес, а в другом - количество тактов.
Хотелось бы чтобы Caption были соответствующие тексты в названии окна и названии Static.

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

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


« Ответ #1 : 24-05-2010 11:09 » 

Цитата
Хотелось бы чтобы Caption были соответствующие тексты в названии окна и названии Static.
вот эту строку не понял что-то )
Записан

ann_nef
Помогающий

ru
Offline Offline
Пол: Женский

« Ответ #2 : 24-05-2010 11:25 » 

Имелось ввиду название диалогового окна и текста эл-та Static.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

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


« Ответ #3 : 24-05-2010 11:36 » 

сделай тестовый проектик с контролами, прикрепи. А домой приду, разберёмся )
Записан

ann_nef
Помогающий

ru
Offline Offline
Пол: Женский

« Ответ #4 : 24-05-2010 12:39 » 

Вот *.cpp скопировала со своего проекта.
Окна win2 и win3 по сути одинаковы. Как этого избежать?
Пока умею пользоваться MFC.
Код:
// spin.h : main header file for the SPIN application
//

#if !defined(AFX_SPIN_H__35710AA3_8B5D_49A6_BECF_CE71A2F2EF28__INCLUDED_)
#define AFX_SPIN_H__35710AA3_8B5D_49A6_BECF_CE71A2F2EF28__INCLUDED_

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

#ifndef __AFXWIN_H__
#error include 'stdafx.h' before including this file for PCH
#endif

#include "resource.h" // main symbols

/////////////////////////////////////////////////////////////////////////////
// CSpinApp:
// See spin.cpp for the implementation of this class
//

class CSpinApp : public CWinApp
{
public:
CSpinApp();

// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CSpinApp)
public:
virtual BOOL InitInstance();
//}}AFX_VIRTUAL

// Implementation

//{{AFX_MSG(CSpinApp)
// NOTE - the ClassWizard will add and remove member functions here.
//    DO NOT EDIT what you see in these blocks of generated code !
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};


/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_SPIN_H__35710AA3_8B5D_49A6_BECF_CE71A2F2EF28__INCLUDED_)

// spinDlg.h : header file
//

#if !defined(AFX_SPINDLG_H__2A56324A_D69A_4B79_981E_6A3424403FC4__INCLUDED_)
#define AFX_SPINDLG_H__2A56324A_D69A_4B79_981E_6A3424403FC4__INCLUDED_

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

/////////////////////////////////////////////////////////////////////////////
// CSpinDlg dialog

class CSpinDlg : public CDialog
{
// Construction
public:

CSpinDlg(CWnd* pParent = NULL); // standard constructor

// Dialog Data
//{{AFX_DATA(CSpinDlg)
enum { IDD = IDD_SPIN_DIALOG };
CSpinButtonCtrl m_spin_win1;
int m_data_win1;
//}}AFX_DATA

// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CSpinDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL

// Implementation
protected:
HICON m_hIcon;

// Generated message map functions
//{{AFX_MSG(CSpinDlg)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnBcall();
afx_msg void OnBexit();
afx_msg void OnBcreatWin3();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_SPINDLG_H__2A56324A_D69A_4B79_981E_6A3424403FC4__INCLUDED_)


#if !defined(AFX_MWIN2_H__70EA0D5D_E0A1_4FB3_A83E_825D70E518BB__INCLUDED_)
#define AFX_MWIN2_H__70EA0D5D_E0A1_4FB3_A83E_825D70E518BB__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// Mwin2.h : header file
//

/////////////////////////////////////////////////////////////////////////////
// Mwin2 dialog

class Mwin2 : public CDialog
{
// Construction
public:
Mwin2(CWnd* pParent = NULL);   // standard constructor

// Dialog Data
//{{AFX_DATA(Mwin2)
enum { IDD = IDD_DIALOGwin2 };
CSpinButtonCtrl m_spin_win2;
int m_data_win2;
//}}AFX_DATA


// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(Mwin2)
public:
protected:
virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
//}}AFX_VIRTUAL

// Implementation
protected:

// Generated message map functions
//{{AFX_MSG(Mwin2)
afx_msg void OnBexitWin2();
virtual BOOL OnInitDialog();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_MWIN2_H__70EA0D5D_E0A1_4FB3_A83E_825D70E518BB__INCLUDED_)

#if !defined(AFX_MWIN3_H__8964B53C_DF28_41BF_BB06_C2BA58E2F1C7__INCLUDED_)
#define AFX_MWIN3_H__8964B53C_DF28_41BF_BB06_C2BA58E2F1C7__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// Mwin3.h : header file
//

/////////////////////////////////////////////////////////////////////////////
// Mwin3 dialog

class Mwin3 : public CDialog
{
// Construction
public:
Mwin3(CWnd* pParent = NULL);   // standard constructor

// Dialog Data
//{{AFX_DATA(Mwin3)
enum { IDD = IDD_DIALOGwin3 };
int m_data_win3;
//}}AFX_DATA


// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(Mwin3)
protected:
virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
//}}AFX_VIRTUAL

// Implementation
protected:

// Generated message map functions
//{{AFX_MSG(Mwin3)
afx_msg void OnBvvod();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_MWIN3_H__8964B53C_DF28_41BF_BB06_C2BA58E2F1C7__INCLUDED_)

« Последнее редактирование: 24-05-2010 12:51 от Джон » Записан
Джон
просто
Администратор

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

« Ответ #5 : 24-05-2010 12:50 » 

Имелось ввиду название диалогового окна и текста эл-та Static.

Каждый раз при вызове этого диалога тебе необходимо установить некий тип этого диалога. Можно просто объявить глобальную переменную.

Затем в OnInitDialog реагировать на этот тип. Скорей всего в Дельфи ты делала именно так. Для управления текстами:

1. Окна: this->SetWindowText("Адрес");

2. Статика: GetDlgItem(IDC_твоего_статика)->SetWindowText("Введите адрес: ");
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"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."
ann_nef
Помогающий

ru
Offline Offline
Пол: Женский

« Ответ #6 : 24-05-2010 13:04 » 

Да, при инициализации самого диалогового окна срабатывает SetWindowText("Ввод и тд");

Я пыталась описать в основном окне
  Mwin3 win3; // это то диалоговое окно ,в кот.я назв.меняю
  win3.DoModal();
  win3.SetWindowText("kuku");
Линкуется, запускается и вылетает. Убираешь последний оператор и ОК.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

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


« Ответ #7 : 24-05-2010 14:51 » 

ann_nef, до последней строки дело не доходит, когда окно у тебя  открыто - оно ж модальное. Нужно передать строку через конструктор или другим методом до вызова DoModal , а в OnInitDialog окна растолкать строку куда нужно
Записан

Джон
просто
Администратор

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

« Ответ #8 : 24-05-2010 19:43 » 

Только попроще, на примере, совсем для новичка.

Модальное означает, что оно будет "висеть" до тех пор, пока его не закроют. Лишь только после этого выполнится строка:

win3.SetWindowText("kuku");

т.е. уже после разрушения окна. Сомневаюсь, чтобы в дельфях такие "шутки" прокатывали.

Если тебе в самом диалоге нет необходимости обрабатывать специальные условия, то можно сделать проще. В диалог добавить мемеберы:

public:
CString m_stCaption;
CString m_stStaticCaption;

Тогда в OnInitDialog:

...
       this->SetWindowText(m_stCaption);
       GetDlgItem(IDC_твоего_статика)->SetWindowText(m_stStaticCaption);
...

В основном окне:

       Mwin3 win3; // это то диалоговое окно ,в кот.я назв.меняю
       win3.m_stCaption = "Адлоыва";
       win3.m_stStaticCaption = "Йцукер";
       win3.DoModal();
 
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"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."
ann_nef
Помогающий

ru
Offline Offline
Пол: Женский

« Ответ #9 : 25-05-2010 04:59 » new

Сейчас попробую.
В Дельфях создавала сама диалоговое окно(там форма), всё описывала(в том числе любые кнопки и тд) и запускала.Кстати,очень удобно не болтается лишних форм,кот. при запуске программы сразу появляются.
 С++ Visual Studio 6 после Delphi 7 с трудом идёт, хотя С когда-то мне очень нравился.
 Так я понимаю,что и здесь так можно, но я пока не умею. Умею тупо через оболочку,используя MFC, создавать диалог. У меня этих диалогов уже 6 или 7,однотипных уже пара,будет ещё с десяток разных.
В любом случае, спасибо.
Записан
Джон
просто
Администратор

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

« Ответ #10 : 25-05-2010 06:18 » 

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

Да, но ДО показа окна в модальном режиме, говоря языком MFC, ДО вызова DoModal.
Записан

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


« Ответ #11 : 25-05-2010 06:35 » 

Цитата
У меня этих диалогов уже 6 или 7,однотипных
напрашивается общий родитель для диалогов Улыбаюсь
Записан

ann_nef
Помогающий

ru
Offline Offline
Пол: Женский

« Ответ #12 : 25-05-2010 06:49 » 

Джон, получился ваш вариант, но только тогда,когда назвала IDC_STATIC_win3.
При стандартном IDC_STATIC программа вылетала. Я про это где-то в форумах уже читала.
Ещё раз спасибо.

Добавлено через 2 минуты и 36 секунд:
Алексей1153++, а как ? Я это понимаю, но пока не знаю, как подступиться.
Если не сложно, мб нибудь чего подскажете?
« Последнее редактирование: 25-05-2010 06:51 от ann_nef » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

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


« Ответ #13 : 25-05-2010 07:42 » 

ann_nef, ну, теорию писать долго... Проще почитать про наследование в C++

То есть, у тебя все 7 диалогов обладают некими общими свойствами и методами. Неплохо бы объединить эти свойства в общем родителе
Код:
CMyParentDlg:public CDialog
{
};

а потом производить потомков

Код:
CDialog1 :public CMyParentDlg
{
};
Записан

Джон
просто
Администратор

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

« Ответ #14 : 25-05-2010 08:06 » 

Джон, получился ваш вариант, но только тогда,когда назвала IDC_STATIC_win3.
При стандартном IDC_STATIC программа вылетала.

IDC_STATIC - это стандартный ID, который получают все статики по умолчанию. Если необходимо получить доступ к ресурсу, то ему нужно присвоить свой индивидуальный ID.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"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."
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines