
- •Оглавление
- •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), яка забезпечує роботу з стандартним елементом керування - набірний лічильник.
3.Створити програму у Windows (Win32 api), яка виводе одне (головне) вікно.
Для создания окна вызывается функция CreateWindow, прототип которой следующий:
HWNDCreateWindow (
LPCTSTRlpClassName, – имязарегестрированногокласса
LPCTSTRlpWindowName, – имяокна
DWORDdwStyle, – стиль окна
intx, – горизонтальная позиция
inty, – вертикальная позиция
intnWidth, – ширина окна
intnHeight, – высота окна
HWNDhWndParent, – дескриптор родительского окна
HMENUhMenu, – дескриптор меню окна или идентификатор элемента управления
HINSTANCEhInstance, – дескриптор экземпляра приложения
LPVOIDlParam – указатель на данные, передаваемые в сообщении WM_CREATE
);
Сама программа:
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
//-----------------------------------------------------------------------------------------------
int WINAPI WinMain(HINSTANCE hInstance. HINSTANCE hPrevInstance, LPSTR lpCmdLine, intnCmdShow)
{
HWND hMainWnd;
charszClassName[] = "MyClass";
MSGmsg;
WNOCLASSEXwc;
// Заполняем структуру класса окна
wc.cbSize = sizeof(wc);
wc.Style = CSJREDRAW | CSJ/REDRAW;
wc.1pfnWndProc = WndProc:
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hlnstance = hlnstance;
wc.hlcon = LoadICOn(NULL. IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARR0W):
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH):
wc.lpszMenuName = NULL;
wc.lpszClassName = szClassName;
wc.hlconSm = LoadIcon(NULL, IDI_APPLICATION);
// Регистрируемклассокна
if (!RegisterClassEx(&wc)) {
MessageBoxCNULL, "Cannot register class", "Error", MB_0K);
return 0;
}
// Создаем основное окно приложения
hMainWnd = CreateWindow(
szClassName, "Hello", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, (HWND)NULL,
(HMENU)NULL, (HINSTANCE)hInstance, NULL);
if (!hMainWnd) {
MessageBox(NULL, "Cannot create main window", "Error", MB_0K);
return 0;
}
// Показываем наше окно
ShowWindow(hMainWnd, nCmdShow);
// Выполняем цикл обработки сообщений до закрытия приложения
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(Smsg);
DispatchMessage(&msg);
}
returnmsg.wParam;
}
//=============„======!===„==========================================
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
HDC hDC;
PAINTSTRUCT ps;
RECT rect;
switch (uMsg)
{
case WM_PAINT:
hDC = BeginPaint(hWnd, &ps);
GetClientRect(hWnd. &rect);
DrawText(hDC, "Hello, World!", -1,&rect, DT_SINGLELINE | DT_CENTER| DT_VCENTER);
EndPaint(hWnd, &ps);
break;
case WM_CLOSE:
DestroyWindow(hWnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
returnDefWindowProc(hWnd, uMsg, wParam, lParam);
}
return 0;
}
4. Обмін інформацією між процесами та потоками. Обмін повідомленнями.
Посылка сообщения в другой процесс осуществляется вызовом функции SendMessage(),в числе параметров которого указывается дескриптор окна, которому посылаетсяданное сообщение, код сообщения и соответствующие конкретному сообщению параметры. Внутри разрабатываемого приложения не составляет труда сохранить дескрипторы всех созданных окон; дескрипторы окон других процессов мы, конечно, не знаем. Однако для их определения предусмотрена функция WindowsFindWindow() со следующим
прототипом:
HWND FindWindow(
LPCTSTR lpClassName,//Имя класса искомого окна
LPCTSTR lpWindowName//Заголовок искомого окна
) ;
Таким образом, получить дескриптор окна активного приложения Windows не составляет труда - надо лишь знать имя класса этого окна или его заголовок. Если функцияFindWindow() находит среди активных окон'искомое, она возвращает значение дескриптора этого окна; если окно не найдено, возвращается FALSE.
Получив дескриптор окна приложения, с которым мы хотим установить связь, можнопосылать в него любые сообщения, имеющие для приложения-приемника смысл (т. е. такие, которые в нем обрабатываются, хотя бы и по умолчанию). Разумеется, посылка сообщения в приложение подразумевает, что в приложении-приемнике существует очередьсообщений и цикл обработки сообщений, т. е. что оно является интерфейсным.