Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Добавить кнопку с помощью CButton

54K
24 ноября 2009 года
mitrofan
4 / / 24.11.2009
Создаю новый WIn32 Console Application с MFC.
Через ресурс добавляю новое диалоговое окно, к нему добавляю новый класс CMyDialog.
Вопрос: как добавить к этому окошку кнопку, используя класс CButton, но не используя ресурсы, т.е. добавлять кнопку с помощью панели инструментов нельзя???
Спасибо всем ответившим заранее...
288
24 ноября 2009 года
nikitozz
1.2K / / 09.03.2007
Ну так создавайте кнопку программно при создании диалога. Что-то типа myButton.Create(.....)
54K
24 ноября 2009 года
mitrofan
4 / / 24.11.2009
я так понимаю, это прописывается в конструкторе,
а в качестве pParentWnd использовать указатель this?
54K
24 ноября 2009 года
mitrofan
4 / / 24.11.2009
Новый класс для диалога:
class CMyDialog : public CDialog
{
DECLARE_DYNAMIC(CMyDialog)

public:
CMyDialog(CWnd* pParent = NULL); // стандартный конструктор
virtual ~CMyDialog();

// Данные диалогового окна
enum { IDD = IDD_DIALOG1 };

protected:
virtual void DoDataExchange(CDataExchange* pDX); // поддержка DDX/DDV
virtual void OnOK();
DECLARE_MESSAGE_MAP()
public:
CButton MyButton;
myButton1.Create(_T("My button"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, CRect(10,10,100,30), this, 1);

};

главная функция:
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
CMyDialog MyDlg;
MyDlg.DoModal();

return 0;
}

почему не работает?
288
24 ноября 2009 года
nikitozz
1.2K / / 09.03.2007
Цитата: mitrofan

CButton MyButton;
myButton1.Create(_T("My button"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, CRect(10,10,100,30), this, 1);



Вот это вот, не понял. А создавать кнопку, думаю, лучше в OnInitDilaog.

54K
24 ноября 2009 года
mitrofan
4 / / 24.11.2009
MyDialog.h

#pragma once


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

class CMyDialog : public CDialog
{
DECLARE_DYNAMIC(CMyDialog)

public:
CMyDialog(CWnd* pParent = NULL); // стандартный конструктор
virtual ~CMyDialog();

// Данные диалогового окна
enum { IDD = IDD_DIALOG1 };

protected:
virtual void DoDataExchange(CDataExchange* pDX); // поддержка DDX/DDV
virtual BOOL OnInitDialog();
DECLARE_MESSAGE_MAP()
//public:
// CButton MyButton;
// MyButton.Create(_T("My button"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, CRect(10,10,100,30), this, 1);

};

MyDialog.cpp
// MyDialog.cpp: файл реализации
//

#include "stdafx.h"
#include "BUTTON.h"
#include "MyDialog.h"


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

IMPLEMENT_DYNAMIC(CMyDialog, CDialog)

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

}

CMyDialog::~CMyDialog()
{
}

void CMyDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}

BOOL CMyDialog::OnInitDialog()
{
CDialog::OnInitDialog();
CButton myButton1;
// Create a push button.
myButton1.Create(_T("My button"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, CRect(10,10,100,30), this, 1);
myButton1.ShowWindow(SW_SHOW);
return true;
}

BEGIN_MESSAGE_MAP(CMyDialog, CDialog)
END_MESSAGE_MAP()

BUTTON.cpp
// BUTTON.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include "BUTTON.h"
#include "MyDialog.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// Единственный объект приложения

CWinApp theApp;

using namespace std;

int main()
{

CMyDialog MyDlg;
MyDlg.DoModal();

return 0;
}

Использовал вроде OnInitDialog, но все равно не работает.
288
25 ноября 2009 года
nikitozz
1.2K / / 09.03.2007
myButton1 должен быть членом класса либо создаваться динамически. В противном случае объект разрушается сразу после выхода из OnInitDialog и разрушает кнопку.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог