Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КУРС ИНФ.doc
Скачиваний:
2
Добавлен:
23.09.2019
Размер:
304.64 Кб
Скачать

2.6. Функция ParamDlgProc

Функция, обрабатывающая сообщения, получаемые диалоговым окном (аналогична оконной процедуре).

Блок-схема:

Инициализация диалогового окна

WM_INITDIALOG

WM_COMMAND

Считывание параметров диалогового окна

IDOK

Считывание параметров диалогового окна

IDCANCEL

2.7. Функция fileread

Функция считывающая исходные значения из файла.

Блок-схема:

pf=fopen(adress,"r");

1

0

fclose(pf);

3. Файлы проекта

3.1. l5.cpp

Файл содержащий исходный код программы.

#include <windows.h>

#include <stdio.h>

#include <conio.h>

#define _USE_MATH_DEFINES

#include <math.h>

#include "l5.h"

#include <complex>

using namespace std;

void setka (HDC,int,int,int,int,double,double,double,double,double,double);

double kkp(double);

void graphik (HDC,int,int,int,int,double,double,double,double);

BOOL APIENTRY ParamDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);

void fileread(char *adress);

double lc[100],u[100],rg,rn,f;

double fmin=0,fmax=70,fstep=10,umin=0,umax=1000,ustep=100;

int n,l,bxshow=1;

char v;

FILE *pf;

LRESULT CALLBACK WindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int hCmdShow)

{

PSTR szName="Test App";

WNDCLASS wc;

HWND hWnd;

MSG msg;

wc.style=CS_VREDRAW|CS_HREDRAW;

wc.lpfnWndProc=WindowProc;

wc.hInstance=hInstance;

wc.cbClsExtra=0;

wc.cbWndExtra=0;

wc.hIcon=LoadIcon(hInstance,"MainIcon");

wc.hCursor=LoadCursor(NULL, IDC_ARROW);

wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);

wc.lpszMenuName="MainMenu";

wc.lpszClassName=szName;

RegisterClass(&wc);

hWnd=CreateWindow(szName,"Простая программа",WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT,

CW_USEDEFAULT,NULL,NULL,hInstance,NULL);

ShowWindow(hWnd,hCmdShow);

UpdateWindow(hWnd);

while(GetMessage(&msg,(HWND)NULL,0,0))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

return msg.wParam;

}

LRESULT CALLBACK WindowProc(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam)

{

static OPENFILENAME ofn;

static char strFileName[MAX_PATH];

static int k=0,i,n;

static HFONT hFont;

static double *a,*b;

HDC hdc;

static HPEN hPen;

static int color;

static int style;

RECT r;

int x,y;

PAINTSTRUCT ps;

switch(uMsg)

{

case WM_CREATE:

style=PS_SOLID;

color=RGB(255,0,0);

hPen=CreatePen(style,1,color);

hFont=(HFONT)GetStockObject(DEFAULT_GUI_FONT);

ZeroMemory (&ofn,sizeof(ofn));

ofn.lStructSize=sizeof(ofn);

ofn.hwndOwner=hWnd;

ofn.lpstrFilter="Текстовый файл(*.txt)\0*.txt\0Все файлы(*.*)\0*.*\0";

ofn.nFilterIndex=1;

ofn.lpstrFile=strFileName;

ofn.nMaxFile=MAX_PATH;

ofn.lpstrInitialDir="";

ofn.Flags=OFN_FILEMUSTEXIST;

ofn.lpstrDefExt="txt";

case WM_COMMAND:

switch (LOWORD(wParam))

{

case IDM_EXIT:

DestroyWindow(hWnd);

break;

case IDM_OP:

DialogBox((HINSTANCE) GetWindowLong (hWnd,GWL_HINSTANCE),"DlgParam",hWnd,(DLGPROC)ParamDlgProc);

break;

case IDM_OPEN:

if (GetOpenFileName(&ofn)!=0)

fileread(strFileName);

break;

}

DeleteObject(hPen);

GetClientRect(hWnd,&r);

InvalidateRect(hWnd,&r,TRUE);

UpdateWindow(hWnd);

return 0;

case WM_PAINT:

color=RGB(0,0,0);

hPen=CreatePen(style,1,color);

hdc=BeginPaint(hWnd,&ps);

GetClientRect(hWnd,&r);

SelectObject (hdc,hPen);

SelectObject(hdc,hFont);

if (bxshow==1)

setka(hdc,100,r.right-100,100,r.bottom-100,fmin,fmax,fstep,umin,umax,ustep);

DeleteObject(hPen);

color=RGB(255,0,0);

hPen=CreatePen(style,1,color);

SelectObject (hdc,hPen);

graphik(hdc,100,r.right-100,100,r.bottom-100,fmin,fmax,umin,umax);

DeleteObject(hPen);

EndPaint;

return 0;

case WM_DESTROY:

PostQuitMessage(0);

return 0;

}

return DefWindowProc (hWnd,uMsg,wParam,lParam);

}

void setka (HDC hdc,int xmin,int xmax,int ymin,int ymax,double fmin,double fmax,double fstep,double umin,double umax,double ustep)

{

int k;

double xstep,ystep,x,y,k1;

char s [256];

xstep=fstep*(xmax-xmin)/(fmax-fmin);

ystep=ustep*(ymax-ymin)/(umax-umin);

if (xmax>xmin&&fmax>fmin&&ymax>ymin&&umax>umin)

{

k=fmin;

for(x=xmin;x<=xmax+1;x+=xstep)

{

MoveToEx(hdc,x,ymin,NULL);

LineTo(hdc, x,ymax);

wsprintf(s,"%d",k);

TextOut(hdc,x-8,ymax+10,s,strlen(s));

k+=fstep;

}

k1=umax;

for(y=xmin;y<=ymax+1;y+=ystep)

{

MoveToEx(hdc,xmin,y,NULL);

LineTo(hdc,xmax,y);

sprintf(s,"%.1f",k1/1000);

TextOut(hdc,xmin-35,y-10,s,strlen(s));

k1-=ustep;

}

TextOut(hdc,xmin-40,ymin-40,"K", 5);

TextOut(hdc,xmax,ymax+25,"F MGz", 5);

}

else

return;

}

double kkp(double f)

{

int i,j,l,m,h;

complex<double> k,x[2][2]={complex<double>(1,0),complex<double>(0,0),complex<double>(0,0),complex<double>(1,0)},

a[2][2]={complex<double>(1,0),complex<double>(0,0),complex<double>(0,0),complex<double>(1,0)},

b[2][2]={complex<double>(1,0),complex<double>(0,0),complex<double>(0,0),complex<double>(1,0)};

if (v=='L')

h=0;

else

h=1;

for(m=0;m<n;m++)

{

if(((m+h)%2)==0)

{

x[0][1]=complex<double>(0,2*M_PI*f*lc[m]);

x[1][0]=complex<double>(0,0);

}

else

{

x[1][0]=complex<double>(0,2*M_PI*f*lc[m]);

x[0][1]=complex<double>(0,0);

}

for(i=0;i<2;i++)

for(j=0;j<2;j++)

for(l=0;l<2;l++)

b[i][j]+=a[i][l]*x[l][j];

for(i=0;i<2;i++)

for(j=0;j<2;j++)

{

a[i][j]=b[i][j];

b[i][j]=complex<double>(0,0);

}

}

k=(sqrt(complex<double>(rg,0)/complex<double>(rn,0))*complex<double>(2,0))/

(a[0][0]+a[0][1]/complex<double>(rn,0)+a[1][0]*complex<double>(rg,0)+a[1][1]);

return sqrt(real(k)*real(k)+imag(k)*imag(k));

}

void graphik (HDC hdc,int xmin,int xmax,int ymin,int ymax,double fmin,double fmax,double umin,double umax)

{

double GZonPIX,PIXonK;

int p;

GZonPIX=(fmax-fmin)/(xmax-xmin);

PIXonK=(ymax-ymin)/(umax-umin);

MoveToEx(hdc,xmin,ymax-(kkp(fmin*1e6)-umin/1000)*PIXonK*1000,NULL);

for(p=xmin+1;p<=xmax;p++)

{

if (((kkp(((p-xmin)*GZonPIX+fmin)*1e6)*1000)>=(umin))&&((kkp(((p-xmin)*GZonPIX+fmin)*1e6)*1000)<=(umax)))

LineTo(hdc,p,ymax-(kkp(((p-xmin)*GZonPIX+fmin)*1e6)*1000-umin)*PIXonK);

else

MoveToEx(hdc,p,ymax-(kkp(((p-xmin)*GZonPIX+fmin)*1e6)*1000-umin)*PIXonK,NULL);

}

}

BOOL APIENTRY ParamDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)

{

char str [128];

switch (uMsg)

{

case WM_INITDIALOG:

if (bxshow==1)

CheckDlgButton(hDlg, IDB_SHOW,BST_CHECKED);

sprintf (str,"%.3f", fmin);

SetDlgItemText (hDlg, IDE_FMIN, str);

sprintf (str,"%.3f", fmax);

SetDlgItemText (hDlg,IDE_FMAX, str);

sprintf (str,"%.3f", fstep);

SetDlgItemText (hDlg, IDE_FSTEP, str);

sprintf (str,"%.3f", umin);

SetDlgItemText (hDlg, IDE_KMIN, str);

sprintf (str,"%.3f", umax);

SetDlgItemText (hDlg,IDE_KMAX, str);

sprintf (str,"%.3f", ustep);

SetDlgItemText (hDlg, IDE_KSTEP, str);

return TRUE;

case WM_COMMAND:

switch (LOWORD(wParam))

{

case IDOK:

if (IsDlgButtonChecked(hDlg,IDB_SHOW)==BST_CHECKED)

bxshow=1;

else

bxshow=0;

GetDlgItemText(hDlg,IDE_FMIN,str,128);

fmin=atof(str);

GetDlgItemText(hDlg, IDE_FMAX,str,128);

fmax=atof(str);

GetDlgItemText(hDlg, IDE_FSTEP,str,128);

fstep=atof(str);

GetDlgItemText(hDlg,IDE_KMIN,str,128);

umin=atof(str);

GetDlgItemText(hDlg, IDE_KMAX,str,128);

umax=atof(str);

GetDlgItemText(hDlg, IDE_KSTEP,str,128);

ustep=atof(str);

case IDCANCEL:

EndDialog(hDlg,wParam);

return TRUE;

}

default:

return FALSE;

}

}

void fileread(char *adress)

{

pf=fopen(adress,"r");

if (pf==NULL)

return;

fscanf(pf,"%c",&v);

fscanf(pf,"%lg",&rg);

fscanf(pf,"%lg",&rn);

fscanf(pf,"%d",&n);

for(l=0;l<n;l++)

fscanf(pf,"%lg",&lc[l]);

fclose(pf);

}

3.2. l5.h

Заголовочный файл, может содержать определение некоторых функций и констант, а так же ссылки на другие заголовочные файлы.

#ifndef _L5_H_

#define _L5_H_

#define IDM_EXIT 1001

#define IDM_ABOUT 1002

#define IDM_HELP 1003

#define IDM_OP 1004

#define IDB_SHOW 1005

#define IDE_FMIN 1006

#define IDE_FMAX 1007

#define IDE_FSTEP 1008

#define IDE_KMIN 1009

#define IDE_KMAX 1010

#define IDE_KSTEP 1011

#define IDM_OPEN 1019

#define IDC_STATIC 1020

#endif

3.3. l5.rc

Файл ресурсов, содержит описание некоторых ресурсов программы в виде кода.

#include "l5.h"

#include <windows.h>

MainIcon ICON icon.ico

MainMenu MENU

{

POPUP "&Файл"

{

MENUITEM "&Открыть" IDM_OPEN

MENUITEM "В&ыход" IDM_EXIT

}

POPUP "&Параметры"

{

MENUITEM "&Настройки" IDM_OP

}

POPUP "&Справка"

{

MENUITEM "Справка" IDM_HELP

MENUITEM SEPARATOR

MENUITEM "О программе" IDM_ABOUT

}

}

DlgParam DIALOG DISCARDABLE 10,10,150,150

STYLE DS_MODALFRAME | WS_POPUP | WS_SYSMENU

CAPTION "Параметры"

FONT 8, "MS Sans Serif"

{

GROUPBOX "Опции",IDC_STATIC,4,1,136,118, WS_GROUP

EDITTEXT IDE_FMIN,10,26,30,12

LTEXT "Частота мин МГц", IDC_STATIC,42,26,80,14

EDITTEXT IDE_FMAX, 10,40,30,12

LTEXT "Частота макс МГц", IDC_STATIC,42,40,80,14

EDITTEXT IDE_FSTEP, 10, 54, 30,12

LTEXT "Шаг МГц" IDE_FSTEP, 42, 54,80,14

EDITTEXT IDE_KMIN,10,68,30,12

LTEXT "Коэф мин", IDC_STATIC,42,68,80,14

EDITTEXT IDE_KMAX, 10,82,30,12

LTEXT "Коэф макс", IDC_STATIC,42,82,80,14

EDITTEXT IDE_KSTEP, 10, 96, 30,12

LTEXT "Шаг коэф" IDE_KSTEP, 42, 96,80,14

CONTROL "Отображать сетку", IDB_SHOW,"BUTTON",BS_AUTOCHECKBOX|WS_TABSTOP,10,12,71,10

DEFPUSHBUTTON "Oк",IDOK,4,150-14-8,45,14

PUSHBUTTON "Отмена",IDCANCEL,54,150-14-8,45,14

}