- •Int pascal WinMain (hinstance hInst, hinstance hPreInst,
- •If(!hPreInst)
- •Int pascal WinMain (hinstance hInst, hinstance hPreInst,
- •If(!hPreInst)
- •ValidateRect(hWnd, null);
- •ValidateRect(hWnd, null);
- •ValidateRect(hWnd, null);
- •If(!hPreInst) {
- •ValidateRect(hWnd, null);
- •If(!hPreInst){
- •If(!hPreInst){
- •ValidateRect(hWnd, null);
- •If(!hPreInst){
- •If(!hPreInst){
- •ValidateRect(hWnd, null);
- •If(!hPreInst){
- •ValidateRect(hWnd, null);
- •If(!hPreInst){
- •ValidateRect(hWnd, null);
- •If(!hPreInst){
- •// Resource.H
- •If(!hPreInst)
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;
