Исходник программы расчета трансформатора

Все исходники / Язык программирования C++ / OS Windows / Desktop / Исходники приложений / Исходник программы расчета трансформатора
Оглавление:
  1. Структура исходника
  2. Визуальный интерфейс MFC
  3. Смена интерфейсов
  4. Массивы окон
  5. Файл справки
  6. Функция печати
  7. Файлы исходника программы расчета трансформаторов

Структура исходника

Программа расчета трансформаторов построена на C++ библиотеке MFC. Класс class CTransApp : public CWinApp основной класс на котором базируются все остальные оконные классы. Главная форма программы class CTransDlg : public CDialog представляет собой пустое поле. На поверхности главной формы, по желанию пользователя, показываются интерфейсы расчёта сетевого 50 герц либо импульсного трансформаторов. Соответственно, интерфейсы расчета трансформаторов представляют class CTrans50hertz : public CDialog и class CTransPulse : public CDialog. При желании можно добавить любое количество интерфейсов для расчёта других типов трансформаторов.

Визуальный интерфейс MFC

Визуальный интерфейс MFC C++Для наглядного построения интерфейса использовались диалоговые окна. Работа с диалоговыми окнами напоминает работу в визуальных средах программирования C++Builder и Visual Studio на языках .NET. Каждый создаваемый интерфейс связывается с соответствующим классом, наследуемым от class CDialog.

Дополнительное окно расчётов, для третьего и более видов трансформаторов, создается в редакторе ресурсов. Далее, с помощью контекстного меню формы нового окна создаётся класс связанный с идентификатором данного оконного ресурса.

Смена интерфейсов

Для смены интерфейсов выбран способ скрытия и показа окон. Данный способ имеет простейшую логику и мгновенное переключение программы на разные типы трансформаторов.

Смена интерфейсов происходит посредством предварительно задекларированных командных сообщений:
BEGIN_MESSAGE_MAP(CTransDlg, CDialog)
    ...
    ON_COMMAND(ID_TRANS_50hertz, OnTrans50hertz)
    ON_COMMAND(ID_PULSE, OnPulse)
     ...
END_MESSAGE_MAP()

...

void CTransDlg::OnTrans50hertz()
{
    SetWindowText("Расчет сетевого трансформатора (~50 Гц однофазного)");
    m_wndTrans50hertz.ShowWindow(SW_SHOW);
    m_wndTransPulse.ShowWindow(SW_HIDE);
}

void CTransDlg::OnPulse()
{
    SetWindowText("Расчет импульсного трансформатора");
    m_wndTransPulse.ShowWindow(SW_SHOW);
    m_wndTrans50hertz.ShowWindow(SW_HIDE);
}

Массивы окон

Для управления окнами редактирования и вывода результатов их дескрипторы хранятся в элементах массивов. Это уменьшает количество программного кода для проверки формата вводимых пользователем данных. Для предотвращения утечки памяти, в деструкторе дескрипторы отсоединяются от элементов массива.


BOOL CTrans50hertz::OnInitDialog()
{
    ...
    // Инициализация массива Edit для ввода расчетного 
    // напряжения на вторичной обмотке
	
    m_EditS_V[0].Attach(GetDlgItem(IDC_EDIT_SV0)->m_hWnd);
    ...
    m_EditS_V[11].Attach(GetDlgItem(IDC_EDIT_SV11)->m_hWnd);
    ...

    // Ввод массива Static для индикации количества витков 
    // вторичных обмоток.
    m_StaticOut_SC[0].Attach(GetDlgItem(IDC_STATIC_SC0)->m_hWnd);
    ...
    m_StaticOut_SC[11].Attach(GetDlgItem(IDC_STATIC_SC11)->m_hWnd);

    return TRUE;
}

Файл справки

Файл справки программы - это одна страница HTML. Поскольку в поздних выпусках Windows не поддерживается формат справок .HPL, файл с гипертекстом полноценно заменяет справочную систему MFC. В нашем случае функция ShellExecute открывает идущий файл HTML программой по умолчанию. Файл справки обязательно должен быть в одном каталоге с файлом приложения расчёта трансформаторов.


void CTransApp::OnHelp()
{
    TCHAR Buffer[1024];
    DWORD dwRet;

    dwRet = GetCurrentDirectory(1024, Buffer);
    if (dwRet != 0)
    {
        CString s = Buffer;
        s.Append("\Transformer_Calculation.html");

        ShellExecute(NULL, "open", s, NULL, NULL, SW_SHOW);
    }
}

Функция печати

Для вывода результатов на бумажный носитель разработана функция печати, которая автоматически вычисляет количество окон CEdit и CStatic в которых есть правильные данные. Т.е. пользователь может заполнять окна произвольно, но на печать выйдет только значащие параметры обмоток. Доступ к службам печати получаем посредством class CPrintDialog. Данный класс представляет собой диалоговый оконный интерфейс и включает в себя множество методов настроек печати. Каждый тип трансформаторов имеет собственные настройки для печати.

Листинг кода вывода результатов на печать:
void CTransDlg::OnFilePrint()
{
    if (m_wndTrans50hertz.IsWindowVisible() == false &&
        m_wndTransPulse.IsWindowVisible() == false)
    {
        AfxMessageBox("Нет данных!");
        return;
    }

    HDC     hDC;
    DOCINFO di;
							
    // Диалог настройки печати
    CPrintDialog dlgPD(TRUE);

    // ПРЕДВАРИТЕЛЬНАЯ НАСТРОЙКА ПРИНТЕРА
    PRINTDLG pd;
    if(AfxGetApp()->GetPrinterDeviceDefaults(&pd) == true)
    {
        DEVMODE* dm = (DEVMODE*)LocalLock(pd.hDevMode);
        dm->dmFields = DM_ORIENTATION | DM_PAPERSIZE;
        dm->dmOrientation = DMORIENT_PORTRAIT;
        dm->dmPaperSize = DMPAPER_A4;

        dlgPD.m_pd.hDevMode = pd.hDevMode;
        LocalUnlock(pd.hDevMode);
    }
    else
    {
        AfxMessageBox("Возможно, не установлен ни один принтер.");
        return;
    }

    // ВЫВОД НА ПЕЧАТЬ
    if (dlgPD.DoModal() == IDOK)
    {
        // Получаем контекст принтера                   
        hDC = dlgPD.CreatePrinterDC();

        // Установка значений DOCINFO структуры.
        memset(&di, 0, sizeof(DOCINFO));
        di.cbSize = sizeof(DOCINFO);
        di.lpszDocName = "Transformer";

        CDC dc;
        dc.Attach(hDC);

        // Запуск печати
        dc.SetMapMode(MM_LOMETRIC);
        if (StartDoc(dc.GetSafeHdc(), &di) != SP_ERROR)
        {
            // Печать страницы 1
            StartPage(dc.GetSafeHdc());

            if (m_wndTrans50hertz.IsWindowVisible() == true)
                    PrintTranse50hertz(&dc);

            if (m_wndTransPulse.IsWindowVisible() == true)
                    PrintTransPulse(&dc);

            EndPage(dc.GetSafeHdc());

            EndDoc(dc.GetSafeHdc());
        }

    dc.Detach();
    DeleteDC(hDC);
    }
}

Скачать исходник

Тема: «Исходник программы расчета трансформатора» Язык программирования С++ transksource_vs16.zip Размер:181 КбайтЗагрузки:8181