Добавить кнопку с помощью CButton
Через ресурс добавляю новое диалоговое окно, к нему добавляю новый класс CMyDialog.
Вопрос: как добавить к этому окошку кнопку, используя класс CButton, но не используя ресурсы, т.е. добавлять кнопку с помощью панели инструментов нельзя???
Спасибо всем ответившим заранее...
Ну так создавайте кнопку программно при создании диалога. Что-то типа myButton.Create(.....)
а в качестве pParentWnd использовать указатель this?
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;
}
почему не работает?
Цитата: mitrofan
CButton MyButton;
myButton1.Create(_T("My button"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, CRect(10,10,100,30), this, 1);
Вот это вот, не понял. А создавать кнопку, думаю, лучше в OnInitDilaog.
#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, но все равно не работает.
myButton1 должен быть членом класса либо создаваться динамически. В противном случае объект разрушается сразу после выхода из OnInitDialog и разрушает кнопку.