- •Оглавление
- •1. Интерфейс графического устройства gdi. Обработка сообщений wm_paint.
- •2. Обмін інформацією між процесами та потоками. Обмін даними за допомогою файлів.
- •3.Створити програму у Windows (Win32 api), яка виводе одне (головне) вікно.
- •4. Обмін інформацією між процесами та потоками. Обмін повідомленнями.
- •5. Створити програму у Windows (Win32 api), яка демонструє основні стилі вікон (вікно верхнього рівня, спливаюче вікно з головним вікном та без нього, дочірнє вікно).
- •6. Процеси та потоки. Створення процесу. Створення потоку
- •7. Створити програму у Windows (Win32 api), яка забезпечує при отриманні повідомлення wm_paint вивід текстових строк у вікно.
- •8) Створити програму у Windows (Win32 api), яка забезпечує при отриманні повідомлення wm_paint вивід різноманітних типів ліній у вікно.
- •9. Робота з файлами. Асинхронні операції з файлами.
- •10. Створити простішу програму у Windows (Win32 api), яка забезпечує при отриманні повідомлення wm_paint вивід простих геометричних фігур у вікно.
- •11. Створити програму у Windows (Win32 api), яка забезпечує обробку повідомлень wm_paint, wm_destroy, wm_create, wm_command. Другі повідомлення передати на обробку стандартній функції вікна.
- •№ 12 Стандартні елементи керування. Графічний список. Індикатор прогресу. Складальний лічильник.
- •13. Створити простішу програму у Windows (Win32 api), яка забезпечує обробку повідомлень миші (wm_lbuttondown, wm_rbuttondown) у вікні.
- •15. Базові команди. Класифікація команд. Команди передачі даних. Команди обміну процесора з пам'яттю. Команди передачі кодів між процесором і периферією.
- •16. Команди обробки даних. Базові арифметичні команди.
- •17. Створити програму у Windows (Win32 api), яка забезпечує обробку повідомлень клавіатури (wm_keyup, wm_keydown) у вікні.
- •18. ВікнаWindows.Процедура створенняд очірнього вікна. Повідомлення wm_create.
- •19. Створити програму у Windows (Win32 api), яка забезпечує роботу з таймером.
- •20.Таймери Windows і служба часу.
- •24. Інтерфейс графічних пристроїв gdi. Обробка повідомлень wm_paint.
- •26. Створити простішу програму у Windows (Win32 api), яка забезпечує роботу з стандартним елементом керування - графічний список.
- •27. Основи розробки Windows-додатків. Головна функція WinMain(). Повідомлення Windows.
- •29 Створити програму у Windows (Win32 api), яка забезпечує роботу з стандартним елементом керування - набірний лічильник.
29 Створити програму у Windows (Win32 api), яка забезпечує роботу з стандартним елементом керування - набірний лічильник.
Spin.rc
#include "spin.h"
SpinDemoMenu MENU
{
POPUP "&File"
{
MENUITEM "E&xit", IDM_Exit
}
MENUITEM "&Dialog", IDM_Dialog
}
SpinDemoDialog DIALOG 0, 0, 100, 100
STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP |
WS_VISIBLE |WS_CAPTION | WS_SYSMENU
CAPTION "Spin Demo Dialog"
FONT 8, "MS Sans Serif"
{
DEFPUSHBUTTON "OK", ID_OK, 25, 60, 50, 14
CONTROL "", ID_Edit, "edit", ES_LEFT | WS_CHILD |
WS_VISIBLE | WS_BORDER | WS_TABSTOP | ES_NUMBER, 25, 20, 50, 12
}
Spin.h
#define IDM_Exit 101
#define IDM_Dialog 102
#define IDM_About 103
#define ID_OK 104
#define ID_Edit 105
#define ID_Spin 106
LRESULT CALLBACK SpinDemoWndProc(HWND, UINT, UINT, LONG);
void OnCommand(HWND,int,HWND,UINT);
void OnDestroy(HWND);
BOOL CALLBACK SpinDemoDialogProc(HWND , UINT ,
WPARAM , LPARAM );
Spin.cpp
#include <windows.h>
#include <commctrl.h>
#include "spin.h"
HINSTANCE hInst;
LRESULT CALLBACK SpinDemoWndProc(HWND, UINT, UINT, LONG);
BOOL CALLBACK SpinDemoDialogProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR IpszCmdParam, int nCmdShow)
{
HWND hWnd;
WNDCLASS WndClass;
MSG Msg;
char szClassName[] = "SpinDemo";
hInst = hInstance;
// регистрация окного класса
WndClass.style = CS_HREDRAW | CS_VREDRAW;
WndClass.lpfnWndProc = SpinDemoWndProc;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hInstance = hInstance ;
WndClass.hIcon = LoadIcon (NULL,IDI_APPLICATION);
WndClass.hCursor = LoadCursor (NULL, IDC_ARROW);
WndClass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);
WndClass.lpszMenuName = "SpinDemoMenu";
WndClass.lpszClassName = szClassName;
if ( !RegisterClass(&WndClass) )
{
MessageBox(NULL,"Cannot register class", "Error", MB_OK);
return 0;
}
// создает окно
hWnd = CreateWindow(szClassName, "Spin Demo",
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance,NULL);
// сообщение об ошибке
if(!hWnd)
{
MessageBox(NULL,"Cannot create window", "Error",MB_OK);
return 0;
}
InitCommonControls();
/* показует наше окно */
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
/* обработка сообщений */
while(GetMessage(&Msg, NULL, 0, 0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
} return Msg.wParam;
}
LRESULT CALLBACK SpinDemoWndProc (HWND hWnd, UINT Message,
UINT wParam, LONG lParam )
{
// обработка сообщений
switch(Message)
{
case WM_COMMAND:
switch(wParam)
{
// меню Файл - Выход
case IDM_Exit:
SendMessage(hWnd, WM_CLOSE, 0, 0);
break;
case IDM_Dialog:
// выводит диалоговое окно
DialogBox(hInst, "SpinDemoDialog", hWnd, SpinDemoDialogProc);
break;
}
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd,Message,wParam, lParam);
}
BOOL CALLBACK SpinDemoDialogProc(HWND hDlg, UINT Message,
WPARAM wParam, LPARAM lParam)
{
static HWND hEditWnd;
static HWND hSpinWnd;
switch(Message)
{
case WM_INITDIALOG:
// создаем наюорочный счетчик
hEditWnd = GetDlgItem(hDlg,ID_Edit);
hSpinWnd = CreateUpDownControl(WS_CHILD | WS_BORDER |
WS_VISIBLE | UDS_SETBUDDYINT | UDS_ALIGNRIGHT, 0, 12,50,50, hDlg, ID_Spin, hInst, hEditWnd, 100,0,50);
return TRUE;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case ID_OK: EndDialog(hDlg,0);
return TRUE;
} break;
}
return FALSE;
}
30. Основи програмування мовою С++. Оператори умов. Логічні операції. (СП30)
Формат оператора: if (выражение) оператор-1; [else оператор-2;]
Выполнение оператора if начинается с вычисления выражения.
Далее выполнение осуществляется по следующей схеме:
- если выражение истинно (т.е. отлично от 0), то выполняется оператор-1.
- если выражение ложно (т.е. равно 0),то выполняется оператор-2.
- если выражение ложно и отсутствует оператор-2 (в квадратные скобки заключена необязательная конструкция), то выполняется следующий за if оператор.
После выполнения оператора if значение передается на следующий оператор программы, если последовательность выполнения операторов программы не будет принудительно нарушена использованием операторов перехода.
Пример:
if (i < j) i++: else { j = i-3; i++; }
Этот пример иллюстрирует также и тот факт, что на месте оператор-1, так же как и на месте оператор-2 могут находиться сложные конструкции.
Допускается использование вложенных операторов if. Оператор if может быть включен в конструкцию if или в конструкцию else другого оператора if. Чтобы сделать программу более читабельной, рекомендуется группировать операторы и конструкции во вложенных операторах if, используя фигурные скобки. Если же фигурные скобки опущены, то компилятор связывает каждое ключевое слово else с наиболее близким if, для которого нет else.
Примеры:
int main ( ) { int t=2, b=7, r=3; if (t>b) { if (b < r) r=b; } else r=t; return (0); }
Рассмотрим, наконец, схему выполнения оператора switch:
вычисляется выражение в круглых скобках после оператора switch (предварительная стадия);
это значение последовательно сравнивается со значениями константных выражений за метками case (стадия определения начальной точки выполнения оператора);
если значения совпадают, управление передаётся соответствующему помеченному оператору (стадия выполнения);
если ни одно значение не совпадает и в теле оператора case есть оператор, помеченный меткой default, управление передаётся этому оператору (но даже в этом случае сочетание объявления с инициализацией недопустимо!) (стадия выполнения);
если ни одно значение не совпадает, и в теле оператора case нет оператора, помеченного меткой default, управление передаётся оператору, следующему за оператором switch (стадия выполнения).
Метки case и default в теле оператора switch используются лишь при начальной проверке, на стадии определения начальной точки выполнения тела оператора. На стадии выполнения все операторы от точки выполнения и до конца тела оператора выполняются независимо от меток, если только какой-нибудь из операторов не передаст управление за пределы оператора выбора. Таким образом, программист сам должен заботиться о выходе из оператора выбора, если это необходимо. Чаще всего для этой цели используется оператор break.
switch (i)
{
case 0:
case 1: // последовательность операторов
break;
case 2: // последовательность операторов
break;
default:
}
Логические операции
К логическим операциям относятся операция логического И (&&) и операция логического ИЛИ (||). Операнды логических операций могут быть целого типа, плавающего типа или типа указателя, при этом в каждой операции могут участвовать операнды различных типов.
Операнды логических выражений вычисляются слева направо. Если значения первого операнда достаточно, чтобы определить результат операции, то второй операнд не вычисляется.
Логические операции не вызывают стандартных арифметических преобразований. Они оценивают каждый операнд с точки зрения его эквивалентности нулю. Результатом логической операции является 0 или 1, тип результата int.
Операция логического И (&&) вырабатывает значение 1, если оба операнда имеют нулевые значения. Если один из операндов равен 0, то результат также равен 0. Если значение первого операнда равно 0, то второй операнд не вычисляется.
Операция логического ИЛИ (||) выполняет над операндами операцию включающего ИЛИ. Она вырабатывает значение 0, если оба операнда имеют значение 0, если какой-либо из операндов имеет ненулевое значение, то результат операции равен 1. Если первый операнд имеет ненулевое значение, то второй операнд не вычисляется.