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

Ваш аккаунт

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

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

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

глобальные переменные и их объявления

16K
25 мая 2008 года
Zloi_kefir
20 / / 01.04.2007
При написании программы столкнулся со следующией трудностью. сейчас попробыю объяснить.

Заголовочный и исполняемый файлы для класса наследника CButton:
Код:
//But.h
#pragma once
class CBut : public CButton
{
    DECLARE_DYNAMIC(CBut)
public:
    CBut();
    virtual ~CBut();
protected:
    DECLARE_MESSAGE_MAP()
public:
    afx_msg void OnBnClicked();
    afx_msg void OnMButtonUp(UINT nFlags, CPoint point);
};


Код:
//But.cpp
#include "stdafx.h"
#include "P01.h"
#include "But.h"

IMPLEMENT_DYNAMIC(CBut, CButton)
CBut::CBut()
{
}

CBut::~CBut()
{
}


Файлы для "скролимого" класса:
Код:
//DlgScrollable.h
..........
..........
#include "But.h";
class CDlgScrollable : public CDialog
{
// Construction
public:
    CListBox* pclb;
    CStatic* ps;
    CBut* but;
    class elem
        {
        public:
        .........
        .........
        }; 

    elem *pelka, *backup;
    elem& PrepareCreData(CString q);
    };


Код:
// DlgScrollable.cpp : implementation file
//
#include "stdafx.h"
#include "P01.h"
#include "DlgScrollable.h"
#include <math.h>
..............
CDlgScrollable::CDlgScrollable(CWnd* pParent /*=NULL*/)
    : CDialog(CDlgScrollable::IDD, pParent)
{
...........
}
// CDlgScrollable message handlers
BOOL CDlgScrollable::OnInitDialog()
{
    .............
    backup = new CDlgScrollable::elem();
    return TRUE;
}

CDlgScrollable::elem::elem()
    {
    }



CDlgScrollable::elem::elem(int n_q, int n_a, bool isTable)
    {
    ..................
    }

void CDlgScrollable::z_GenerateQ(int n)
    {
    pclb=new (CListBox);
    ps = new(CStatic);
    but = new (CBut);  
    but->Create(_T("button"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|LVS_REPORT, recbut, this, IDC_CLB);
    }


Файлы класса диалога:
 
Код:
// P01Dlg.h : header file
//
#include "StdAfx.h"
#include "DlgScrollable.h"
class CP01Dlg : public CDialog
{
// Construction
public:
    CDlgScrollable* m_pdlgScroll;
}


Код:
// P01Dlg.cpp : implementation file
//
#include "stdafx.h"
#include "P01.h"
#include "P01Dlg.h"
................
................
BOOL CP01Dlg::OnInitDialog()
{
    CDialog::OnInitDialog();
...............
    m_pdlgScroll=new CDlgScrollable(this);
    return TRUE;  // return TRUE  unless you set the focus to a control
}


Для события клика класса CBut определена функция OnBnClicked, внутри которой нужно получить доступ к объекту m_pdlgScroll.
Как это сделать? пытался объявить глобальную переменную, но ничего не получилось. Где это правильнее всего сделать?
и как работать с переменными, объявленными как extern ??
288
01 июня 2008 года
nikitozz
1.2K / / 09.03.2007
Насколько понял я, Вы хотите получить из метода OnBnClicked объекта but доступ к членам объекта m_pdlgScroll. Поправьте меня, если я не прав. Если же я прав, тогда зависит от того, к каким именно членам вы хотите получить доступ. Если только к членам унаследованным от CDialog, тогда код в OnBnClicked будет выглядеть примерно так:

 
Код:
CDialog *dlg = (CDialog *)GetParent();
dlg->................................


Если же доступ нужен именно к членам CDlgScrollable, тогда придется включить DlgScrollable.h в But.cpp и написать в OnBnClicked

 
Код:
CDlgScrollable *dlg = (CDlgScrollable *)GetParent();
dlg->................................


Возможно это не лучшее решение со стилистической точки зрения, но по идее оно должно работать.

Теперь по поводу etxern. Работает все просто. В одном файле объявляете пременную: что-то типа
 
Код:
int a;

В другом файле просто пишите
 
Код:
extern int a;

Все, у Вас одна общая переменная для двух файлов.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог