
- •Оглавление
- •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), яка забезпечує роботу з стандартним елементом керування - набірний лічильник.
5. Створити програму у Windows (Win32 api), яка демонструє основні стилі вікон (вікно верхнього рівня, спливаюче вікно з головним вікном та без нього, дочірнє вікно).
Для создания окна вызывается функция CreateWindow, прототип которой следующий:
HWNDCreateWindow (
LPCTSTRlpClassName, – имязарегестрированногокласса
LPCTSTRlpWindowName, – имяокна
DWORDdwStyle, – стиль окна
intx, – горизонтальная позиция
inty, – вертикальная позиция
intnWidth, – ширина окна
intnHeight, – высота окна
HWNDhWndParent, – дескриптор родительского окна
HMENUhMenu, – дескриптор меню окна или идентификатор элемента управления
HINSTANCEhInstance, – дескриптор экземпляра приложения
LPVOIDlParam – указатель на данные, передаваемые в сообщении WM_CREATE
);
Сама программа
#include "stdafx.h"
#include <windows.h>
#include <windowsx.h>
#define STRICT
LRESULT CALLBACK WndProcMain(HWND,UINT,WPARAM,LPARAM);
LRESULT CALLBACK WndProcPopur(HWND,UINT,WPARAM,LPARAM);
LRESULT CALLBACK WndProcChild(HWND,UINT,WPARAM,LPARAM);
char ClassMain[]="Window";
char ClassPopur[]="Popur";
char ClassChild[]="Child";
char MainTitle[]="Main Window";
char PopurTitle[]="Popur Window";
char ChildTitle[]="Child Window";
WNDCLASS main, popur, child;
MSG msg;
HWND hWndMain, hWndPopur, hWndChild;
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE,LPSTR,int) {
if((hWndMain=FindWindow(ClassMain,NULL))!=NULL) {
if(IsIconic(hWndMain)) ShowWindow(hWndMain,SW_RESTORE);
SetForegroundWindow(hWndMain);
return FALSE; }
if((hWndPopur=FindWindow(ClassPopur,NULL))!=NULL) {
if(IsIconic(hWndPopur)) ShowWindow(hWndPopur,SW_RESTORE);
SetForegroundWindow(hWndPopur);
return FALSE; }
if((hWndChild=FindWindow(ClassChild,NULL))!=NULL) {
if(IsIconic(hWndChild)) ShowWindow(hWndChild,SW_RESTORE);
SetForegroundWindow(hWndChild);
return FALSE; }
//main window
// Заполняем структуру класса окна
memset(&main,0,sizeof(main));
main.lpszClassName=ClassMain;
main.lpfnWndProc=WndProcMain;
main.style=CS_HREDRAW|CS_VREDRAW;
main.hInstance=hInstance;
main.hIcon=LoadIcon(NULL,IDI_APPLICATION);
main.hCursor=LoadCursor(NULL,IDC_ARROW);
main.hbrBackground=GetStockBrush(WHITE_BRUSH);
main.lpszMenuName=NULL;
main.cbClsExtra=0;
main.cbWndExtra=0;
RegisterClass(&main);
// Создаем основное окно приложения
hWndMain=CreateWindow(ClassMain,MainTitle,WS_OVERLAPPEDWINDOW,100,100,850,500,NULL,NULL,hInstance,NULL);
if(!hWndMain) {
MessageBox(NULL,"Create:error",MainTitle,MB_OK|MB_ICONSTOP);
return FALSE; }
// Показываем наше окно
ShowWindow(hWndMain,SW_SHOWNORMAL);
UpdateWindow(hWndMain);
//child window-------------------------------------------------------
memset(&child,0,sizeof(child));
child.lpszClassName=ClassChild;
child.lpfnWndProc=WndProcChild;
child.style=CS_HREDRAW|CS_VREDRAW;
child.hInstance=hInstance;
child.hIcon=LoadIcon(NULL,IDI_APPLICATION);
child.hCursor=LoadCursor(NULL,IDC_ARROW);
child.hbrBackground=GetStockBrush(GRAY_BRUSH);
child.lpszMenuName=NULL;
child.cbClsExtra=0;
main.cbWndExtra=0;
RegisterClass(&child);
hWndChild=CreateWindow(ClassChild,ChildTitle,WS_CHILD|WS_OVERLAPPEDWINDOW,10,10,400,150,hWndMain,NULL,hInstance,NULL);
if(!hWndChild) {
MessageBox(NULL,"Create:error",ChildTitle,MB_OK|MB_ICONSTOP);
return FALSE; }
ShowWindow(hWndChild,SW_SHOWNORMAL);
UpdateWindow(hWndChild);
//popur window---------------------------------------------
memset(&popur,0,sizeof(popur));
popur.lpszClassName=ClassPopur;
popur.lpfnWndProc=WndProcPopur;
popur.style=CS_HREDRAW|CS_VREDRAW;
popur.hInstance=hInstance;
popur.hIcon=LoadIcon(NULL,IDI_APPLICATION);
popur.hCursor=LoadCursor(NULL,IDC_ARROW);
popur.hbrBackground=GetStockBrush(BLACK_BRUSH);
popur.lpszMenuName=NULL;
popur.cbClsExtra=0;
main.cbWndExtra=0;
RegisterClass(&popur);
hWndPopur=CreateWindow(ClassPopur,PopurTitle,WS_OVERLAPPEDWINDOW,450,400,400,150,NULL,NULL,hInstance,NULL);
if(!hWndPopur) {
MessageBox(NULL,"Create:error",PopurTitle,MB_OK|MB_ICONSTOP);
return FALSE; }
// Выполняем цикл обработки сообщений до закрытия приложения
while(GetMessage(&msg,NULL,0,0)) {
TranslateMessage(&msg);
DispatchMessage(&msg); }
return 0;
//-------------------------------------------------------
}
LRESULT CALLBACK WndProcMain(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) {
switch(msg) {
case WM_LBUTTONDOWN: {
ShowWindow(hWndPopur,SW_SHOWNORMAL);
break; }
case WM_DESTROY: {
PostQuitMessage(0);
break; }
default:return DefWindowProc(hWnd,msg,wParam,lParam);
}
return 0;
}
LRESULT CALLBACK WndProcChild(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) {
switch(msg) {
case WM_DESTROY: {
PostQuitMessage(0);
break; }
default:return DefWindowProc(hWnd,msg,wParam,lParam);
}
return 0;
}
LRESULT CALLBACK WndProcPopur(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) {
switch(msg) {
case WM_DESTROY: {
PostQuitMessage(0);
break; }
default:return DefWindowProc(hWnd,msg,wParam,lParam);
}
return 0;
}