Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kody_programm_k_voprosam.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
779 Кб
Скачать
☆

ValidateRect(hWnd, null);

EndPaint(hWnd, &ps);

break;

case WM_DESTROY:

PostQuitMessage(0);

break;

default:

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

}

return(0);

}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// loan.cpp

// Приложение для расчета процесса погашения займа

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

//

#include <windows.h>

#include <stdlib.h>

#include <string.h>

#include <stdio.h>

#include <strstream>

#include <tchar.h> // _T

#include <math.h>

//#include <sstream>

//using namespace std;

#define SCROLLLINES 100 // глубина прокрутки

#define SCROLLWIDTH 100 //ширина прокрутки

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

char szProgName[]="ProgName";

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPreInst,

LPSTR IpszCmdLine, int nCmdShow)

{

HWND hWnd;

MSG lpMsg;

WNDCLASS wcApp;

If(!hPreInst) {

wcApp.lpszClassName=(LPCWSTR)szProgName;

wcApp.hInstance=hInst;

wcApp.lpfnWndProc=WndProc;

wcApp.hCursor=LoadCursor(NULL,IDC_ARROW);

wcApp.hIcon=NULL;

wcApp.lpszMenuName=NULL;

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

wcApp.style=CS_HREDRAW|CS_VREDRAW;

wcApp.cbClsExtra=0;

wcApp.cbWndExtra=0;

if (!RegisterClass(&wcApp))

return 0;

}

hWnd=CreateWindow((LPCTSTR)szProgName,

(LPCTSTR)_T("Loan Amortization"), // Амортизация займа

WS_OVERLAPPEDWINDOW | WS_VSCROLL | WS_HSCROLL, CW_USEDEFAULT,

CW_USEDEFAULT, CW_USEDEFAULT,

CW_USEDEFAULT, (HWND)NULL,

(HMENU)NULL, (HINSTANCE)hInst,(LPSTR)NULL);

ShowWindow(hWnd,nCmdShow);

UpdateWindow(hWnd);

while(GetMessage(&lpMsg, NULL, 0, 0)) {

TranslateMessage(&lpMsg);

DispatchMessage(&lpMsg);

}

return(lpMsg.wParam);

}

LONG WINAPI WndProc(HWND hWnd, UINT messg,

UINT wParam, LONG lParam)

{

HDC hdc;

PAINTSTRUCT ps;

RECT rc;

TEXTMETRIC tm;

//char szBuffer[160];

wchar_t szBuffer[160];

static int xClientView, yClientView;

static int charwt, charht,

OldHPos, NewHPos, OldVPos, NewVPos;

double Balance, Payment, Interest, Amortized;

double TInterest, Temp1, NewRate;

double FPayment, FInterest, FAmortized;

double FBalance, FTInterest;

int i, t;

// Установите свои исходные данные ниже

double Principal=10000.0; // размер займа

double Rate=10.5; //годовая процентная ставка

int Term=5; //срок выплаты в годах

int PayYear=12; //выплат в год

//Установите свои исходные данные выше

switch (messg) {

case WM_CREATE:

hdc=GetDC(hWnd);

GetTextMetrics(hdc, &tm);

charwt=tm.tmAveCharWidth;

charht=tm.tmHeight+tm.tmExternalLeading;

ReleaseDC(hWnd, hdc);

SetScrollRange(hWnd, SB_HORZ, 0, SCROLLWIDTH, FALSE);//FALSE

SetScrollRange(hWnd, SB_VERT, 0, SCROLLLINES, FALSE);

break;

case WM_SIZE:

xClientView=LOWORD(lParam);

yClientView=HIWORD(lParam);

break;

case WM_HSCROLL:

#ifdef _WIN32

switch (LOWORD(wParam)){

#else

switch (wParam){

#endif

case SB_PAGERIGHT:

OldHPos=GetScrollPos(hWnd, SB_HORZ);

SetScrollPos(hWnd, SB_HORZ,(OldHPos+10), TRUE);

NewHPos=GetScrollPos(hWnd, SB_HORZ);

break;

case SB_LINERIGHT:

OldHPos=GetScrollPos(hWnd, SB_HORZ);

SetScrollPos(hWnd, SB_HORZ, (OldHPos+1), TRUE);

NewHPos=GetScrollPos(hWnd, SB_HORZ);

break;

case SB_PAGELEFT:

OldHPos=GetScrollPos(hWnd, SB_HORZ);

SetScrollPos(hWnd, SB_HORZ, (OldHPos-10), TRUE);

NewHPos=GetScrollPos(hWnd, SB_HORZ);

break;

case SB_LINELEFT:

OldHPos=GetScrollPos(hWnd, SB_HORZ);

SetScrollPos(hWnd, SB_HORZ, (OldHPos-1), TRUE);

NewHPos=GetScrollPos(hWnd, SB_HORZ);

break;

case SB_THUMBPOSITION:

OldHPos=GetScrollPos(hWnd, SB_HORZ);

#ifdef _WIN32

NewHPos=HIWORD(wParam);

#else

NewHPos=wParam;

#endif

SetScrollPos(hWnd, SB_HORZ, NewHPos, TRUE);

break;

}

InvalidateRect(hWnd, NULL, TRUE);

break;

case WM_VSCROLL:

#ifdef _WIN32

switch (LOWORD(wParam)){

#else

switch (wParam){

#endif

case SB_PAGEDOWN:

OldVPos=GetScrollPos(hWnd, SB_VERT);

SetScrollPos(hWnd, SB_VERT, (OldVPos+10), TRUE);

NewVPos=GetScrollPos(hWnd, SB_VERT);

break;

case SB_LINEDOWN:

OldVPos=GetScrollPos(hWnd, SB_VERT);

SetScrollPos(hWnd, SB_VERT, (OldVPos+1), TRUE);

NewVPos=GetScrollPos(hWnd, SB_VERT);

break;

case SB_PAGEUP:

OldVPos=GetScrollPos(hWnd, SB_VERT);

SetScrollPos(hWnd, SB_VERT, (OldVPos-10), TRUE);

NewVPos=GetScrollPos(hWnd, SB_VERT);

break;

case SB_LINEUP:

OldVPos=GetScrollPos(hWnd, SB_VERT);

SetScrollPos(hWnd, SB_VERT, (OldVPos-1), TRUE);

NewVPos=GetScrollPos(hWnd, SB_VERT);

break;

case SB_THUMBPOSITION:

OldVPos=GetScrollPos(hWnd, SB_VERT);

#ifdef _WIN32

NewHPos=HIWORD(wParam);

#else

NewHPos=wParam;

#endif

SetScrollPos(hWnd, SB_VERT, NewVPos, TRUE);

break;

}

InvalidateRect(hWnd, NULL, TRUE);

break;

case WM_PAINT:

hdc=BeginPaint(hWnd,&ps);

//-----Начало фрагмента пользователя-----

t=0;

TInterest=0.0;

NewRate=Rate/100.00;

Temp1=pow(NewRate/PayYear+1, PayYear*Term);

Payment=NewRate*Principal/PayYear/(1-1/Temp1);

Balance=Principal;

//ostrstream(szBuffer, 160)<<"PERIOD"<<'\t'

// <<"PAYMENT"<<'\t'

// <<"INTEREST"<<'\t'

// <<"AMORTIZED")<<'\t'

// <<"BALANCE")<<'\t'

// <<"TOTAL INT"

// <<endl;

swprintf(szBuffer, L"PERIOD\t"

L"PAYMENT\t"

L"INTEREST\t"

L"AMORTIZED\t"

L"BALANCE\t"

L"TOTAL INT\n");

rc.left=-charwt*(NewHPos);

rc.top=charht*(t-NewVPos);

rc.right=rc.left+1024;

rc.bottom=rc.top + charht;

//DrawTextW(hdc, (LPCTSTR)szBuffer, strlen(szBuffer),

// &rc, DT_EXPANDTABS);

DrawText(hdc, szBuffer, wcslen(szBuffer), &rc, DT_EXPANDTABS);

for(i=1; i<=Term*PayYear; i++){

t++;

Interest=Balance*NewRate/12;

FPayment=((long)(Payment*100.005))/100.0;

FInterest=((long)(Interest*100.005))/100.0;

Amortized=Payment-Interest;

FAmortized=((long)(Amortized*100.005))/100.0;

Balance-=Amortized;

FBalance=((long)(Balance*100.005))/100.0;

TInterest+=Interest;

FTInterest=((long)(TInterest*100.005))/100.0;

//ostrstream(szBuffer, 160)<<i<<'\t'

// <<FPayment<<'\t'<<'\t'

// <<FInterest<<'\t'<<'\t'

// <<Amortized<<'\t'<<'\t'

// <<FBalance<<'\t'<<'\t'

// <<FTInterest<<endl;

swprintf(szBuffer,

L"%d\t"

L"%0.2f\t\t"

L"%0.2f\t\t"

L"%0.2f\t\t"

L"%0.2f\t\t"

L"%0.2f\r\n",

i, FPayment, FInterest, Amortized, FBalance, FTInterest);

rc.left=-charwt*(NewHPos);

rc.top=charht*(t-NewVPos);

rc.right=rc.left+1024;

rc.bottom=rc.top + charht;

//DrawTextW(hdc, (LPCTSTR)szBuffer, strlen(szBuffer),

// &rc, DT_EXPANDTABS);

DrawText(hdc, szBuffer, wcslen(szBuffer), &rc, DT_EXPANDTABS);

}

//-----Конец фрагмента пользователя-----

ValidateRect(hWnd,NULL);

EndPaint(hWnd,&ps);

break;

case WM_DESTROY:

PostQuitMessage(0);

break;

default:

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

}

return(0);

}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// scroll.сpp

// Простое приложение Windows с полосами прокрутки,

// которое иллюстрирует новые 32-разрядные функции

// GetScrollInfo() и SetScrollInfо()

//

///…

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

char szProgName[] = "ProgName";

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPreInst,

LPSTR lpszCmdLine, int nCmdShow)

{

///…

}

LRESULT CALLBACK WndProc(HWND hWnd, UINT messg,

WPARAM wParam, LPARAM lParam)

{

HDC hdc;

PAINTSTRUCT ps;

TEXTMETRIC tm;

static int xClientView, yClientView;

static int charwt, charht, OldHPos, NewHPos,

OldVPos, NewVPos, nDelta;

FILE *fp;

int i, t, ch;

wchar_t abc[160];

SCROLLINFO si;

switch (messg){

case WM_CREATE:

///…

case WM_SIZE:

xClientView = LOWORD(lParam);

yClientView = HIWORD(lParam);

break;

case WM_HSCROLL:

///…

switch(LOWORD(wParam)){

///…

}

if(nDelta){

///…

}

if (nDelta){

///…

}

///…

case WM_VSCROLL:

si.cbSize = sizeof(si);

si.fMask = SIF_ALL;

si.nMin = 0;

si.nMax = 100;

si.nPage = 100;

si.nPos = NewVPos;

SetScrollInfo(hWnd, SB_VERT, &si, FALSE);

OldVPos = si.nPos;

switch(LOWORD(wParam)){

case SB_LINEDOWN:

nDelta = 1;

break;

case SB_LINEUP:

nDelta = -1;

break;

case SB_PAGEDOWN:

nDelta = 10;

break;

case SB_PAGEUP:

nDelta = -10;

break;

case SB_THUMBPOSITION:

nDelta = (HIWORD(wParam)) - OldVPos;

break;

default:

nDelta = 0;

break;

}

if(nDelta){

NewVPos = OldVPos + nDelta;

if(OldVPos < si.nMin){

nDelta -= OldVPos - si.nMin;

NewVPos = si.nMin;

}

if(OldVPos > si.nMax){

nDelta -= OldVPos - si.nMax;

NewVPos = si.nMax;

}

}

if(nDelta){

SetScrollPos(hWnd, SB_VERT, NewVPos, TRUE);

si.nPos = NewHPos;

SetScrollInfo(hWnd, SB_VERT, &si, FALSE);

}

InvalidateRect(hWnd, NULL, TRUE);

break;

case WM_PAINT:

hdc = BeginPaint(hWnd, &ps);

//-----Начало фрагмента пользователя-----

t = 0;

if((fp = fopen("scroll.txt","r")) != NULL){

while(!feof(fp)){

ch = fgetc(fp);

i = 0;

while((ch != '\n') && (ch != EOF)){

abc[i] = (wchar_t)ch;

ch = fgetc(fp);

i++;

}

TextOut(hdc, charwt * (1 - NewHPos), charht * (t - NewVPos), abc, i);

t++;

}

}

fclose(fp);

//-----Конец фрагмента пользователя-----

///…

break;

case WM_DESTROY:

///…

break;

default:

///…

}

return(0);

}

// menu1.cpp

// resource.h

//{{NO_DEPENDENCIES}}

// Microsoft Visual C++ generated include file.

// Used by menu1.rc

//

#define IDR_MENU1 101

#define IDM_SMALL 40001

#define IDM_MEDIUM 40002

#define IDM_LARGE 40003

// menu1.RC

/////////////////////////////////////////////////////////////////////////////

//

// Menu

//

IDR_MENU1 MENU

BEGIN

POPUP "&Size"

BEGIN

MENUITEM "&small", IDM_SMALL

MENUITEM "&Medium", IDM_MEDIUM

MENUITEM "&LARGE", IDM_LARGE

END

END

// menu1.сpp

// Создание меню для изменения размеров

// графического изображения в окне.

//

#include <windows.h>

#include <tchar.h> // _T

#include "resource.h"

LRESULT CALLBACK WINAPI WndProc(HWND, UINT, WPARAM, LPARAM);

char szProgName[] = "ProgName";

char szApplName[] = "IDR_MENU1"; // IDR_MENU1===ShapeMenu

//char szApplName[] = "ShapeMenu";

static WORD wSize = 30;

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPreInst,

LPSTR lpszCmdLine,int nCmdShow)

{

HWND hWnd;

MSG lpMsg;

WNDCLASS wcApp;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]