Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.06.2009, 11:47   #1
nusik
Форумчанин
 
Регистрация: 13.04.2009
Сообщений: 117
По умолчанию Зависание при показе Диалога

Приветствую всех.
Хочу вызвать из главного диалога дочерний...
Создал класс диалога (дочерного), затем по нажатию кнопки в главном диалоге выполяется следуюущее:
Код:
CAddItem dlg;
	dlg.DoModal();
Вопрос
1) почему всё приложение зависло?
2)Какой тип диалога лучше подходит для след целей :
2 button-а
2 Edit -а ?
Я взял IDD_PROPERTY_MEDIUM.
Пишется всё на: VS 2008 C++, MFC .
но пока что не очень пишется(
Буду очень благодарен.
nusik вне форума Ответить с цитированием
Старый 29.06.2009, 12:57   #2
vvviperrr
Тупой студент
Форумчанин
 
Аватар для vvviperrr
 
Регистрация: 12.05.2007
Сообщений: 614
По умолчанию

1. класс диалога связан с ресурсом диалога?
2. вопрос не понят. на любое окно (в том числе и на диалог) можно положить и button, и edit. Что в вашем понимании есть "лучше"?
vvviperrr вне форума Ответить с цитированием
Старый 29.06.2009, 16:59   #3
nusik
Форумчанин
 
Регистрация: 13.04.2009
Сообщений: 117
По умолчанию

1. Когда создавал диалог вписал имя класса СAddItem. Значит да
2. Вопрос снят
Необходимо вызвать диалог по нажатию кнопки в главном диалоге, далее пользователь набирает данные в дочернем диалоге и нажимает там же на кнопку, потом полученные из едит-а данные обрабатываются.
Вот в целом что нужно.
nusik вне форума Ответить с цитированием
Старый 29.06.2009, 17:04   #4
vvviperrr
Тупой студент
Форумчанин
 
Аватар для vvviperrr
 
Регистрация: 12.05.2007
Сообщений: 614
По умолчанию

Цитата:
1. Когда создавал диалог вписал имя класса СAddItem. Значит да
ничего это не значит. если класс создавал в визарде, в поле IDD надо вписать IDD диалога (по дефолту он там должен быть прописан).
а вообще выкладывай проект, посмотрим
vvviperrr вне форума Ответить с цитированием
Старый 29.06.2009, 18:50   #5
nusik
Форумчанин
 
Регистрация: 13.04.2009
Сообщений: 117
По умолчанию

Код:
#pragma once


// CAddItemDlg dialog

class CAddItemDlg : public CDialog
{
	DECLARE_DYNAMIC(CAddItemDlg)

public:
	CAddItemDlg(CWnd* pParent = NULL);   // standard constructor
	virtual ~CAddItemDlg();
	

	
	enum { IDD = IDD_DIALOG1 };
  
	


protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

	DECLARE_MESSAGE_MAP()
public:
	
	afx_msg void OnBnClickedOk();
	afx_msg void OnEnChangeEdit1();
	afx_msg void OnBnClickedCancel();
	afx_msg void OnEnSetfocusEdit1();
	afx_msg void OnBnClickedButton1();
	CEdit m_edNodeType;
	CEdit m_edWord;
	CButton m_btOk;
	CButton m_btCancel;
	CButton m_bt1;

};
---------------------------------------------------

Код:
// AddItemDlg.cpp : implementation file
//

#include "stdafx.h"
#include "VerticalTree.h"
#include "AddItemDlg.h"
#include "afxcmn.h"


// CAddItemDlg dialog

IMPLEMENT_DYNAMIC(CAddItemDlg, CDialog)

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

}

CAddItemDlg::~CAddItemDlg()
{
}

void CAddItemDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CVerticalTreeDlg)
	DDX_Control(pDX,IDC_EDIT1,m_edNodeType);
	DDX_Control(pDX,IDC_EDIT2,m_edWord);
	DDX_Control(pDX,IDOK,m_btOk);
	DDX_Control(pDX,IDCANCEL,m_btCancel);
	DDX_Control(pDX,IDC_BUTTON1,m_bt1);
	//}}AFX_DATA_MAP
	

}


BEGIN_MESSAGE_MAP(CAddItemDlg, CDialog)
	ON_BN_CLICKED(IDOK, &CAddItemDlg::OnBnClickedOk)
	ON_EN_CHANGE(IDC_EDIT1, &CAddItemDlg::OnEnChangeEdit1)
	ON_BN_CLICKED(IDCANCEL, &CAddItemDlg::OnBnClickedCancel)
	ON_EN_SETFOCUS(IDC_EDIT1, &CAddItemDlg::OnEnSetfocusEdit1)
	ON_BN_CLICKED(IDC_BUTTON1, &CAddItemDlg::OnBnClickedButton1)
END_MESSAGE_MAP()


// CAddItemDlg message handlers

void CAddItemDlg::OnBnClickedOk()
{   

	
	// TODO: Add your control notification handler code here
	OnOK();
}

void CAddItemDlg::OnEnChangeEdit1()
{   
	// TODO:  If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CDialog::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.

	// TODO:  Add your control notification handler code here
}

void CAddItemDlg::OnBnClickedCancel()
{
	// TODO: Add your control notification handler code here
	OnCancel();
}

void CAddItemDlg::OnEnSetfocusEdit1()
{   
    OnOK();
	// TODO: Add your control notification handler code here
}

void CAddItemDlg::OnBnClickedButton1()
{   m_edWord.DestroyWindow();
	// TODO: Add your control notification handler code here
}
--------------------------------------------------------------

Диалог создал с помщью команды в меню Insert Dialog в главном диалоге...заработало.
Теперь понажатию Button1 (последний обработчик) должно происходить разружение едит-а но оно не происходит, что бы ни делал ничего там не выполняется.
Спасибо.
nusik вне форума Ответить с цитированием
Старый 29.06.2009, 20:30   #6
vvviperrr
Тупой студент
Форумчанин
 
Аватар для vvviperrr
 
Регистрация: 12.05.2007
Сообщений: 614
По умолчанию

Цитата:
должно происходить разружение едит-а но оно не происходит
Цитата:
m_edWord.DestroyWindow();
так делать нельзя. если хотите использовать динамическое создание контролов на диалоге, так и используйте их через динамическую память. соответственно, никаких программных связываний через DDX, все ручками, через new и delete.
vvviperrr вне форума Ответить с цитированием
Старый 30.06.2009, 00:51   #7
nusik
Форумчанин
 
Регистрация: 13.04.2009
Сообщений: 117
По умолчанию

мне нужно что попроще , и пример в студию , буду благодарен.
nusik вне форума Ответить с цитированием
Старый 30.06.2009, 01:00   #8
vvviperrr
Тупой студент
Форумчанин
 
Аватар для vvviperrr
 
Регистрация: 12.05.2007
Сообщений: 614
По умолчанию

ты КОНКРЕТНО напиши, что ты хочешь получить в ИТОГЕ. А то в топике одно написал, на деле у тебя совсем другое, а в мозгах небось третье
vvviperrr вне форума Ответить с цитированием
Старый 30.06.2009, 08:22   #9
nusik
Форумчанин
 
Регистрация: 13.04.2009
Сообщений: 117
По умолчанию

сконкатенировать содержимое двух edit-ов
и по нажатию ок послать к примеру в richedit на главной форме.

Код:
#pragma once

//AddITemDlg.h 

// CAddItemDlg dialog

class CAddItemDlg : public CDialog
{
	DECLARE_DYNAMIC(CAddItemDlg)

public:
	CAddItemDlg(CWnd* pParent = NULL);   // standard constructor
	virtual ~CAddItemDlg();
	

	
	enum { IDD = IDD_DIALOG1 };
  
	


protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

	DECLARE_MESSAGE_MAP()
public:
	
	afx_msg void OnBnClickedOk();
	afx_msg void OnEnChangeEdit1();
	afx_msg void OnBnClickedCancel();
	afx_msg void OnEnSetfocusEdit1();
	afx_msg void OnBnClickedButton1();
	CEdit m_edNodeType;
	CEdit m_edWord;
	CButton m_btOk;
	CButton m_btCancel;
	CButton m_bt1;

};

Вот добавил в эту функцию баттоны и эдиты

Код:
void CAddItemDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CVerticalTreeDlg)
	DDX_Control(pDX,IDC_EDIT1,m_edNodeType);
	DDX_Control(pDX,IDC_EDIT2,m_edWord);
	DDX_Control(pDX,IDOK,m_btOk);
	DDX_Control(pDX,IDCANCEL,m_btCancel);
	DDX_Control(pDX,IDC_BUTTON1,m_bt1);
	//}}AFX_DATA_MAP
	

}
Добавил кнопку

Код:
void CAddItemDlg::OnBnClickedButton1()
{   
	CString str1, str;
	m_edWord.GetWindowTextW(str1); 
	m_edNodeType.GetWindowTextW(str);
	str=str+str1;
	m_edWord.SetWindowTextW(L"_");
	m_edNodeType.SetWindowTextW(L"_");
	// TODO: Add your control notification handler code here
}
Поставил брейкпоинт, выполняю а он даже туда не входит.
Ставлю обработчики на стандартные кнопки OK Caoncel всё одно.
Заранее благодарен.
nusik вне форума Ответить с цитированием
Старый 30.06.2009, 09:58   #10
nusik
Форумчанин
 
Регистрация: 13.04.2009
Сообщений: 117
По умолчанию

проблема как связать RichEdit главного диалога, с Edit-ом дочернего)
точнее как скопировать текст из Edit-a в RichEdit
Сейчас я сделаю так : скопирую в буфер обмена и потом в ричедит загоню.
Но хотелось бы узнал как это сделать не через буфер обмена, может у пользователя в буфере были данные, а мы их стираем ...некрасиво как-то

Код:
void CAddItemDlg::OnBnClickedButton1()
{   CString str1, str;
	m_edit2.GetWindowTextW(str1); 
	m_edit1.GetWindowTextW(str);
	str=str+str1;
	//Переменную Ричедита компилятор не видит,
           //поэтому не могу его туда вставить это:
           //m_richedit.SetWindowTextW(str);
}
Вот класс главного диалога CVerticalTree.h


Код:
class CVerticalTreeDlg : public CDialog
{
// Konstruktion
public:
	CVerticalTreeDlg(CWnd* pParent = NULL);	// Standard-Konstruktor

// Dialogfelddaten
	//{{AFX_DATA(CVerticalTreeDlg)
	enum { IDD = IDD_VERTICALTREE_DIALOG };
	CVerticalTree	m_TestTree;
	
	
	
	//}}AFX_DATA

	// Vom Klassenassistenten generierte Ьberladungen virtueller Funktionen
	//{{AFX_VIRTUAL(CVerticalTreeDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV-Unterstьtzung
	//}}AFX_VIRTUAL

// Implementierung
protected:
	void FillTree(TV_INSERTSTRUCT &treeitem, int depth = 2);
	HICON m_hIcon;

	// Generierte Message-Map-Funktionen
	//{{AFX_MSG(CVerticalTreeDlg)
	virtual BOOL OnInitDialog();
	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	afx_msg void OnButCustom();
	afx_msg void OnSize(UINT nType, int cx, int cy);
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
public:
	afx_msg void OnBnClickedButton1();
	afx_msg void OnBnClickedOk();
	CRichEditCtrl m_richedit;
	
	
	afx_msg void OnNMClickTreeMytree(NMHDR *pNMHDR, LRESULT *pResult);
	afx_msg void OnBnClickedButton2();
	afx_msg void OnBnClickedButton3();
	afx_msg void OnBnClickedButton4();
};
nusik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание диалога из длл Oburec Общие вопросы C/C++ 0 27.06.2009 15:29
Зависание при открытии сетевого файла Bes1k Microsoft Office Excel 1 02.03.2009 07:38
Зависание при наборе определенных слов mus-chek Microsoft Office Word 12 01.11.2008 08:20
Зависание JRcoker Общие вопросы Delphi 8 06.08.2008 08:29
Возврат управления форме при показе PopupMenu mutabor Общие вопросы Delphi 1 08.07.2008 13:43