Int WINAPI WinMain ( HINSTANCE hInst, HINSTANCE, LPSTR, int )
{
char szClassName[]="MainWindow";
char szTitle[]="Программа 2-1";
MSG Msg;
WNDCLASS wc;
// --- Обнуление и инициализация структуры wc
memset ( &wc, 0, sizeof(wc) );
wc.lpfnWndProc = WndProc;
wc.hInstance = hInst;
wc.hIcon = LoadIcon ( NULL, IDI_APPLICATION );
wc.hCursor = LoadCursor ( NULL, IDC_ARROW );
wc.hbrBackground = GetStockBrush ( LTGRAY_BRUSH );
wc.lpszClassName = szClassName;
// --- Регистрация класса главного окна в системе
RegisterClass ( &wc );
// --- Создние главного окна
HWND hwnd = CreateWindow ( szClassName, szTitle,
WS_OVERLAPPEDWINDOW, 10, 10, 250, 100,
HWND_DESKTOP, NULL, hInst, NULL );
// --- Показать главное окно
ShowWindow ( hwnd, SW_SHOWNORMAL );
// --- Цикл обработки оконных сообщений
while ( GetMessage ( &Msg, NULL, 0, 0 ) )
DispatchMessage ( &Msg );
// --- Возврат в систему
return 0;
}
/* --- Оконная функция главного окна */
LRESULT CALLBACK WndProc ( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
Switch ( msg )
{ case WM_DESTROY:
PostQuitMessage ( 0 );
return 0;
default:
return DefWindowProc ( hwnd, msg, wParam, lParam );
}
}
// File 8-3.cpp
#define STRICT
#include <windows.h>
#include <windowsx.h>
#include <commctrl.h>
#include <math.h> // sin(), acos()
#include "8-3.h"
/* --- Глобальные переменные прорграммы */
//int nPhase=0; // Сдвиг фаз
int nFreq=1; // Отношение частот
HINSTANCE hInstance;
HWND hwndGraph, hwndTrack, hwndScroll, hwndStatic;
HPEN hRedPen;
HBRUSH hGreyBrush;
SCROLLINFO sinfo;
/* --- Главная функция */
Int WINAPI WinMain ( HINSTANCE hInst, HINSTANCE, LPSTR, int )
{
char szClassName[]="MainWindow";
char szTitle[]="Программа 8-3";
MSG Msg;
WNDCLASS wc;
// --- Обнуление и инициализация структуры wc главного окна
hInstance = hInst;
InitCommonControls();
memset ( &wc, 0, sizeof(wc) );
wc.lpfnWndProc = WndProc;
wc.hInstance = hInst;
wc.hIcon = LoadIcon ( NULL, IDI_APPLICATION );
wc.hCursor = LoadCursor ( NULL, IDC_ARROW );
//wc.hbrBackground = GetStockBrush ( LTGRAY_BRUSH );
hGreyBrush = CreateSolidBrush ( RGB ( 160, 160, 160 ) );
wc.hbrBackground = hGreyBrush;
wc.lpszClassName = szClassName;
// --- Регистрация класса главного окна в системе
RegisterClass ( &wc );
// --- Инициализация структуры wc окна графики
wc.lpszClassName = "Graph";
wc.lpfnWndProc = GraphWndProc;
wc.hbrBackground = GetStockBrush ( WHITE_BRUSH );
// --- Регистрация класса окна графики в системе
RegisterClass ( &wc );
// --- Создние главного окна
HWND hwnd = CreateWindow ( szClassName, szTitle,
WS_OVERLAPPEDWINDOW, 10, 10, 0, 0,
HWND_DESKTOP, NULL, hInst, NULL );
// --- Показать главное окно
ShowWindow ( hwnd, SW_SHOWNORMAL );
// --- Цикл обработки оконных сообщений
while ( GetMessage ( &Msg, NULL, 0, 0 ) )
DispatchMessage ( &Msg );
// --- Возврат в систему
return 0;
}
/* --- Оконная функция главного окна */
LRESULT CALLBACK WndProc ( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
Switch ( msg )
{ HANDLE_MSG ( hwnd, WM_CREATE, OnCreate );
HANDLE_MSG ( hwnd, WM_HSCROLL, OnHScroll );
HANDLE_MSG ( hwnd, WM_GETMINMAXINFO, OnGetMinMaxInfo );
HANDLE_MSG ( hwnd, WM_DESTROY, OnDestroy );
default:
return DefWindowProc ( hwnd, msg, wParam, lParam );
}
}
/* --- Обработчик сообщения WM_CREATE */
BOOL OnCreate ( HWND hwnd, LPCREATESTRUCT )
{
// --- Окно графики
hRedPen = CreatePen ( PS_SOLID, 1, RGB ( 255, 0, 0 ) );
hwndGraph = CreateWindow ( "Graph", NULL,
WS_CHILD|WS_VISIBLE|WS_BORDER,
10, 10, 220, 220,
hwnd, NULL, hInstance, NULL );
// --- Линейка с ползунком
hwndTrack = CreateWindowEx ( 0, TRACKBAR_CLASS, NULL,
WS_CHILD|WS_VISIBLE|TBS_AUTOTICKS,
250, 55, 208, 30,
hwnd, NULL, hInstance, NULL );
SendMessage ( hwndTrack, TBM_SETRANGE, TRUE, MAKELPARAM(1,10) );
SendMessage ( hwndTrack, TBM_SETPAGESIZE, 0, 1 );
SendMessage ( hwndTrack, TBM_SETPOS, TRUE, 1 );
// --- Поясняющие надписи на линейке с ползунком
CreateWindow ( "STATIC", "Отношение частот по осям",
WS_CHILD|WS_VISIBLE|SS_LEFT,
260, 25, 220, 22,
hwnd, NULL, hInstance, NULL );
CreateWindow ( "STATIC", "1 2 3 4 5 6 7 8 9 10",
WS_CHILD|WS_VISIBLE|SS_LEFT,
260, 85, 220, 22,
hwnd, NULL, hInstance, NULL );
// --- Линейка прокрутки
sinfo.cbSize = sizeof(SCROLLINFO);
sinfo.fMask = SIF_ALL;
sinfo.nMin = 0;
sinfo.nMax = 180;
sinfo.nPage = 15;
sinfo.nPos = 0;
hwndScroll = CreateWindow ( "SCROLLBAR", NULL,
WS_CHILD|WS_VISIBLE,
260, 160, 200, 20,
hwnd, NULL, hInstance, NULL );
SetScrollInfo ( hwndScroll, SB_CTL,&sinfo, TRUE );
// --- Поясняющие надписи для линейки прокрутки
CreateWindow ( "STATIC", "Сдвиг фаз в градусах",
WS_CHILD|WS_VISIBLE|SS_LEFT,
280, 130, 200, 22,
hwnd, NULL, hInstance, NULL );
CreateWindow ( "STATIC", "0",
WS_CHILD|WS_VISIBLE|SS_LEFT,
280, 180, 22, 22,
hwnd, NULL, hInstance, NULL );
CreateWindow ( "STATIC", "180",
WS_CHILD|WS_VISIBLE|SS_LEFT,
430, 180, 40, 22,
hwnd, NULL, hInstance, NULL );
// --- Статический элемент для вывода сдвига фаз
hwndStatic = CreateWindow ( "STATIC", "00",
WS_CHILD|WS_VISIBLE|SS_LEFT,
355, 200, 50, 20,
hwnd, NULL, hInstance, NULL );
return TRUE;
}