Lresult callback graphwndproc ( hwnd hwnd, UINT msg, — КиберПедия 

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Lresult callback graphwndproc ( hwnd hwnd, UINT msg,

2017-11-28 176
Lresult callback graphwndproc ( hwnd hwnd, UINT msg, 0.00 из 5.00 0 оценок
Заказать работу

WPARAM wParam, LPARAM lParam)

{

Switch (msg)

{ HANDLE_MSG (hwnd, WM_PAINT, GraphOnPaint);

default:

return DefWindowProc (hwnd, msg, wParam, lParam);

}

}

/* --- Обработчик сообщения WM_PAINT окна графики */

Void GraphOnPaint (HWND hwnd)

{

PAINTSTRUCT ps;

HDC hdc=BeginPaint (hwnd, &ps);

MoveToEx (hdc, 10, cos (nFreq * acos((double)-1) +

(double)sinfo.nPos*M_PI/180)*100 + 110, NULL);

SelectPen (hdc, hRedPen);

for (int i=-100; i<100; i++)

LineTo (hdc, i+110, cos (nFreq * acos ((double)i/100) +

(double)sinfo.nPos*M_PI/180)*100 + 110);

for (int i=100; i>=-100; i--)

LineTo (hdc, i+110, cos (-nFreq * acos ((double)i/100) +

(double)sinfo.nPos*M_PI/180)*100 + 110);

EndPaint (hwnd, &ps);

}

/* --- Обработчик сообщения WM_HSCROLL */

Void OnHScroll (HWND, HWND hwndCtl, UINT code, int pos)

{

char szT[10];

if ((hwndCtl==hwndTrack) && (code==TB_ENDTRACK))

nFreq = SendMessage (hwndTrack, TBM_GETPOS, 0, 0);

if (hwndCtl==hwndScroll)

{ switch (code)

{ case SB_LINERIGHT:

sinfo.nPos++;

if (sinfo.nPos > sinfo.nMax)

sinfo.nPos = sinfo.nMax;

SetScrollInfo (hwndScroll, SB_CTL, &sinfo, TRUE);

break;

case SB_LINELEFT:

sinfo.nPos--;

if (sinfo.nPos < sinfo.nMin)

sinfo.nPos = sinfo.nMin;

SetScrollInfo (hwndScroll, SB_CTL, &sinfo, TRUE);

break;

case SB_PAGERIGHT:

sinfo.nPos+=sinfo.nPage;

if (sinfo.nPos > sinfo.nMax)

sinfo.nPos = sinfo.nMax;

SetScrollInfo (hwndScroll, SB_CTL, &sinfo, TRUE);

break;

case SB_PAGELEFT:

sinfo.nPos-=sinfo.nPage;

if (sinfo.nPos < sinfo.nMin)

sinfo.nPos = sinfo.nMin;

SetScrollInfo (hwndScroll, SB_CTL, &sinfo, TRUE);

break;

case SB_THUMBTRACK:

sinfo.nPos = pos;

if (sinfo.nPos > sinfo.nMax)

sinfo.nPos = sinfo.nMax;

if (sinfo.nPos < sinfo.nMin)

sinfo.nPos = sinfo.nMin;

SetScrollInfo (hwndScroll, SB_CTL, &sinfo, TRUE);

break;

}

wsprintf (szT, "%d", sinfo.nPos);

SetWindowText (hwndStatic, szT);

}

// --- Перерисовать график

InvalidateRect (hwndGraph, NULL, TRUE);

}

/* --- Обработчик сообщения WM_GETMINMAXINFO */

Void OnGetMinMaxInfo (HWND, LPMINMAXINFO lpmmi)

{

lpmmi->ptMinTrackSize.x = XSIZE;

lpmmi->ptMinTrackSize.y = YSIZE;

lpmmi->ptMaxTrackSize.x = XSIZE;

lpmmi->ptMaxTrackSize.y = YSIZE;

}

/* --- Обработчик сообщения WM_DESTROY */

Void OnDestroy (HWND)

{

DeleteObject (hGreyBrush);

DeleteObject (hRedPen);

PostQuitMessage(0);

}


// Amper_A.cpp

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

USERES("Amper_A.res");

USEFORM("Amper_1.cpp", Form1);

//---------------------------------------------------------------------------

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)

{

Try

{

Application->Initialize();

Application->CreateForm(__classid(TForm1), &Form1);

Application->Run();

}

catch (Exception &exception)

{

Application->ShowException(&exception);

}

return 0;

}

//---------------------------------------------------------------------------


// Amper_1.cpp

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Amper_1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

double u=10, i, r=5;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

//u = StrToFloat (Edit1->Text);

//r = StrToFloat (Edit2->Text);

u = atof (Edit1->Text.c_str());

r = atof (Edit2->Text.c_str());

i = u/r;

Edit1->Text = FloatToStrF (u, ffFixed, 7, 2) + " V";

Edit2->Text = FloatToStrF (r, ffFixed, 7, 1) + " Om";

Label4->Caption = "Ток = " +

FloatToStr (i) + " А";

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

{

Form1->Close();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)

{

Edit1->Text = FloatToStr (u) + " V";

Edit2->Text = FloatToStr (r) + " Om";

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Edit2Click(TObject *Sender)

{

u = atof (Edit1->Text.c_str());

Edit1->Text = FloatToStrF (u, ffFixed, 7, 2) + " V";

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Edit1Click(TObject *Sender)

{

r = atof (Edit2->Text.c_str());

Edit2->Text = FloatToStrF (r, ffFixed, 7, 1) + " Om";

}

//---------------------------------------------------------------------------


// Amper1.cpp

//---------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

//---------------------------------------------------------------

USEFORM("amper1_.cpp", Form1);

//---------------------------------------------------------------

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)

{

Try

{

Application->Initialize();

Application->CreateForm(__classid(TForm1), &Form1);

Application->Run();

}

catch (Exception &exception)

{

Application->ShowException(&exception);

}

return 0;

}

//---------------------------------------------------------------


/* Amper1_.cpp

Программа вычисляет силу тока в электрической цепи.

Демонстрирует обработку:

- события KeyPress;

- исключения EZerroDevide (деление на ноль)

при помощи инструкции try … catch.

*/

#include <vcl.h>

#pragma hdrstop

#include "amper1_.h"

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

// щелчок на кнопке Вычислить

void __fastcall TForm1::Button1Click(TObject *Sender)

{

Float u; // напряжение

Float r; // сопротивление

Float i; // ток

// проверим, введены ли данные в поля Напряжение и Сопротивление

if (((Edit1->Text).Length() == 0) || ((Edit2->Text).Length() == 0))

{

MessageDlg("Надо ввести напряжение и сопротивление",

mtInformation, TMsgDlgButtons() << mbOK, 0);

if ((Edit1->Text).Length() == 0)

Edit1->SetFocus(); // курсор в поле Напряжение

Else

Edit2->SetFocus(); // курсор в поле Сопротивление

return;

};

// получить данные из полей ввода

u = StrToFloat(Edit1->Text);

r = StrToFloat(Edit2->Text);

// вычислить ток

Try

{

i = u/r;

}

catch (EZeroDivide &e)

{

ShowMessage("Величина опротивления не должна быть равна нулю");

Edit2->SetFocus(); // курсор в поле Сопротивление

return;

}

// вывести результат в поле Label4

Label4->Caption = "Ток: " +

FloatToStrF(i,ffGeneral,7,2) + " A";

}

// нажатие клавиши в поле Напряжение

// коды запрещенных клавиш заменим нулем, в результате

// символы этих клавиш в поле редактирования не появятся

void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)

{

// Key - код нажатой клавиши

// проверим, является ли символ допустимым

if ((Key >= '0') && (Key <= '9')) // цифра

return;

// Глобальная переменная Decimalseparator

// содержит символ, используемый в качестве разделителя

// при записи дробных чисел

if (Key == DecimalSeparator)

{

if ((Edit1->Text).Pos(DecimalSeparator)!= 0)

Key = 0; // разделитель уже введен

return;

}

if (Key == VK_BACK) // клавиша <Backspace>

return;

if (Key == VK_RETURN) // клавиша <Enter>

{

Edit2->SetFocus();

return;

};

// остальные клавиши запрещены

Key = 0; // не отображать символ

}

// нажатие клавиши в поле Сопротивление

void __fastcall TForm1::Edit2KeyDown(TObject *Sender, WORD &Key,

TShiftState Shift)

{

if ((Key >= '0') && (Key <= '9')) // цифра

return;

if (Key == DecimalSeparator) {

if ((Edit2->Text).Pos(DecimalSeparator)!= 0)

Key = 0; // разделитель уже введен

return;

}

if (Key == VK_BACK) // клавиша <Backspace>

return;

if (Key == VK_RETURN) // клавиша <Enter>

{

Button1->SetFocus(); // переход к кнопке Вычислить

// повторное нажатие клавиши <Enter>

// активизирует процесс вычисления тока

// см. Button1Click

return;

};

// остальные клавиши запрещены

Key = 0; // не отображать символ

}

// щелчок на кнопке Завершить

void __fastcall TForm1::Button2Click(TObject *Sender)

{

Form1->Close(); // закрыть форму приложения

}


Поделиться с друзьями:

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.008 с.