Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Уроки по Visual C++ (MFC, платформа .NET)


Информационный Канал Subscribe.Ru

Visual C++. FAQ. Уроки по программированию с сайта http://progs.biz

Рассылка №48

Visual C++. FAQ. Вопрос 22. Как написать два класса, использующие друг друга?
Visual C++. FAQ. Вопрос 23. Как с помощью checkbox'а отключить/включить другой элемент?
Visual C++. FAQ. Вопрос 24. Как быстро удалить класс?
Visual C++. FAQ. Вопрос 25. Чем отличается BOOL и bool?
Visual C++. FAQ. Вопрос 26. Как закрыть все окна в MDI-приложении?

Полные версии уроков (с картинками) можно найти по адресам
Вопрос 22. Как написать два класса, использующие друг друга?
Вопрос 23. Как с помощью checkbox'а отключить/включить другой элемент?
Вопрос 24. Как быстро удалить класс?
Вопрос 25. Чем отличается BOOL и bool?
Вопрос 26. Как закрыть все окна в MDI-приложении?

FAQ по Visual C++. Вопрос 22. Как написать два класса, использующие друг друга?

Проблема вот в чем. Есть два класса - для определенности назавем их CFirst и CSecond. В CFirst есть укзазатель на экземпляр второго класса, а в CSecond - указатель на экземпляр первого. И как это все должно работать - какой класс писать сначала?

Делаем это так:

Заголовочный файл для первого класса:

class CSecond;
class CFirst
{
public:
    CFirst();
 ~CFirst();
    ...
    CSecond* m_pSecond;
};

Файл реализации для первого класса:

#include "First.h"
#include "Second.h"
CFirst::CFirst()
{
    m_pSecond = new CSecond;
}
CFirst::~CFirst()
{
    delete m_pSecond;
}

Заголовочный файл для второго класса:

class CFirst;
class CSecond
{
public:
    CSecond();
    ...
    CFirst* m_pFirst;
};

Файл реализации для второго класса:

#include "Second.h"
#include "First.h"
CFirst::CFirst()
{
    ...
}
CFirst::~CFirst()
{
    ...
}
Наверх

FAQ по Visual C++. Вопрос 23. Как с помощью checkbox'а отключить/включить другой элемент?

Сначала получаем ссылку на другой элемент (пользуясь GetDlgItem), затем делаем все что захотим. Вот пример для кнопки с идентификатором IDC_BUTTON1:

void CTestDlg::OnCheck1()
{
    static BOOL b;
    CWnd* pBtn=GetDlgItem(IDC_BUTTON1);
    pBtn->EnableWindow(b);
    b=!b;
}
Наверх

FAQ по Visual C++. Вопрос 24. Как быстро удалить класс?

Для удаления класса проще всего удалить из проекта файлы *.h и *.cpp этого класса (пользуясь вкладкой FileView). Физически файлы на диске остаются (так что код не пропадет ;)), на вкладке же ClassView их уже не будет.

Наверх

FAQ по Visual C++. Вопрос 25. Чем отличается BOOL и bool?

BOOL и bool, несмотря на похожесть написания - разные типы данных.

bool - это тип данных C/C++. Это означает, что его поддерживает любой компилятор для любой платформы. Хоть для Windows программируете, хоть под Linux - работать программа с таким типом данных должна везде одинаково.

BOOL же - это тип данных, специфичный для платформы Windows.

Две константы для этит типов (истина и ложь) тоже пишуться по-разному. Для типа bool это будут true и false, для типа BOOL - TRUE и FALSE соответственно. Запомнить это достаточно легко - пришем или все строчными буквами, или все прописными.

Для использования типа BOOL надо добавить include:

#include <windows.h>

Вместо этого include'а можно использовать и другие (включающие этот).

У этих типов данных разный размер. Выяснить это можно с помошью оператора sizeof. Для этого достаточно написаить что-то вроде:

int k1=sizeof(BOOL), k2=sizeof(bool);

Так что не путайте эти типы данных. Если в параметрах или в возвращаемом значении некоторой функции используется BOOL, то и используйте переменную такого типа, если bool - то другого. Иногда написание вместо одного из этих типов другого может приветси к краху программы.

Наверх

FAQ по Visual C++. Вопрос 26. Как закрыть все окна в MDI-приложении?

Например, так:

void CMainFrame::OnAllClose()
{
    //Указатель на дочернее окно
    CMDIChildWnd* pWnd;
    while(pWnd=MDIGetActive()) //Пока есть дочерние окна
    {
        pWnd->SendMessage(WM_CLOSE); //Закрываем
    }
}

OnAllClose() - это имя обработчика (скажем, для нажатия на пункт меню).

Наверх

Другие рассылки с сайта progs.biz

Рассылки Subscribe.Ru
Уроки по C# и .NET.

Уроки по C# -новому языку от Microsoft для платформы .NET. Создание разных типов приложений (консольные, для Windows, веб-приложения), работа с базами данных, создание собственных компонентов. Примеры, исходники, статьи, FAQ.


Copyright Алексеев Игорь, 2002

Copyright cайт progs.biz, 2002



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное