Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
.docx
Скачиваний:
5
Добавлен:
30.10.2018
Размер:
824.42 Кб
Скачать

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. Если первый операнд имеет ненулевое значение, то второй операнд не вычисляется.

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