Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Советы по Windows (часть 4)  (Прочитано 17763 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Sel
Злобный
Администратор

ru
Offline Offline

« : 02-09-2006 17:48 » 

Обсуждение статьи: «Советы по Windows (часть 4)»
« Последнее редактирование: 03-03-2007 14:40 от RXL » Записан

Слово не воробей. Всё не воробей, кроме воробья.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 03-09-2006 15:29 » new

Код:
//Демонстрация работы SetPixel(),GetDC(),RGB(),
//GetClientRect(),SetTimer(),KillTimer()
//Окно без системного меню и системных кнопок
//Закрывать программу Alt+F4
//Писал и коментировал - p0et
//mail                 - p0et@bk.ru

#include <windows.h> //Windows API функции

HINSTANCE hInst; //Будем хранить хэндл нашего приложения!
HWND MyhWnd; //Handle Window
HDC MyDC; //a handle of a display device context (DC)

int x,y, //координаты точки
mx,my; //Максимальный размер клиентской области окна
int i,j; //Индексы массивов
int r=100,dr=5,g; //Переменные для работы с цветом

//Регистрируем класс окна!
ATOM MyRegisterClass(HINSTANCE hInstance);
//А сдесь само окно!
BOOL InitInstance(HINSTANCE, int);
//Вызывается при приходе сообщений нашему окну
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
//Вызывается при создании окна
void MyCreate(HWND hWnd);

int APIENTRY WinMain(
HINSTANCE hInstance,//hInstanse нашего приложения в памяти
//hInstanse приложения стоящего выше нашего приложения
//по дереву связей приложений
HINSTANCE hPrevInstance,
LPSTR lpCmdLine, //Командная строка :)
int nCmdShow) //Состояние нашего окна
//(Развернуто,Свернуто)
{
MSG msg; //Структура сообщений в Windows

//В ней мы зарегистрируем класс нашего окна
MyRegisterClass(hInstance);

if (!InitInstance (
hInstance, //Нашего приложения
nCmdShow  //Состояние нашего окна -
//в котором нам надо его создать!
)
) //Создаем окно приложения
{
//если не создалось - выход из программы
return FALSE;
}

//Стандартный цикл обработки сообщений Windows

//Получаем первое сообщение из стэка сообщений в msg
while (GetMessage(&msg, NULL, 0, 0))
{
//Обратите внимание!
//Из общего стэка сообщений Windows получаем

TranslateMessage(&msg); //Транслируем сообщение дальше
DispatchMessage(&msg); //Сообщение для нашего окна
}

return msg.wParam;
}


ATOM MyRegisterClass(HINSTANCE hInstance)
{
//Класс нашего окна
WNDCLASSEX wcex;
//Заполняем его информацией о нашем окне
wcex.cbSize = sizeof(WNDCLASSEX); //Размер класса окна

//Стиль окна
wcex.style = CS_HREDRAW | CS_VREDRAW;

//Адрес функции обработки сообщений нашего окна
wcex.lpfnWndProc = (WNDPROC)WndProc;

wcex.cbClsExtra = 0; //Дополнительный класс окна

//Адрес функции рисования нашего окна, т.к. NULL,
//то стандартная перерисовка окна
wcex.cbWndExtra = 0;

wcex.hInstance = hInstance; //нашей программы

// загрузка хендла иконки (стандартная или из ресурсов)
wcex.hIcon = LoadIcon(NULL, IDI_ASTERISK);

// загрузка хендла курсора (стандартная или из ресурсов)
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);

// Цвет заднего фона окна
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW);

// Цвет заднего фона окна// Название меню нашего окна
wcex.lpszMenuName = NULL;

// Имя класса нашего окна
wcex.lpszClassName = "WINCLASS";

//хендл маленькой иконки(свернутое окно)
wcex.hIconSm = LoadIcon(NULL, IDI_ASTERISK);

//Регистрируем класс нашего окна - API
return RegisterClassEx(&wcex);
}

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd; //окна

hInst = hInstance;
//Создаем окно! - API
hWnd = CreateWindow(
"WINCLASS", //Класс окна
"Kill", //Информация в верней строке
//окна-Title Window
WS_VISIBLE, //Стиль окна
100, //Координата Х верхневого левого угла окна
//(Глобальные координаты)
100, //Координата Y верхневого левого угла окна
//(Глобальные координаты)
300, //Координата X правого нижнего угла от
//левого верхнего (локальные)
200, //Координата Y правого нижнего угла от
//левого верхнего (локальные)

NULL, //hWnd Родительского окна
NULL, //Handle Menu
hInstance, // нашей программы - привязываем
//окно к  программе
NULL //
);

if (!hWnd) //Если окно не создано
{
MessageBox(NULL,"CreateWindow()","Error!",NULL);
//MessageBox с сообщением о невозможности создания окна
return FALSE;
}

MyhWnd = hWnd; //Сохраняем hWnd нашего окна

ShowWindow(hWnd, nCmdShow); //Показать окно

//Послать сообщение функции WinMain() о перерисовке окна!
UpdateWindow(hWnd);

return TRUE;
}

LRESULT CALLBACK WndProc(
HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
// данное сообщение приходит при создании нашей формы
case WM_CREATE:
MyCreate(hWnd);
break;

//Сообщение приходит при нажатии Лев.кнопки мыши
//на нашем окне
case WM_LBUTTONDOWN:
for(x=0;x<mx;x++)
for(y=0;y<my;y++)
SetPixel(MyDC,x,y,RGB(0,0,0));
break;

//Сообщение приходит от таймера
case WM_TIMER:
{
if(((r+=dr)>245)||(r<10)) dr=-dr;
g=255-r;
for(i=0;i<mx;i+=10)
{
  for(j=0;j<my;j+=10)
  {
    for(x=i;x<i+5;x++)
    {
      for(y=j;y<j+5;y++)
      {
         //Рисуем точку - RGB(RED,GREEN,BLUE) цвет точки
         SetPixel(MyDC,x,y,RGB(r,0,0));
         SetPixel(MyDC,x+5,y+5,RGB(0,0,r));
         SetPixel(MyDC,x+5,y,RGB(0,g,0));
         SetPixel(MyDC,x,y+5,RGB(g,0,g));
       }
     }
  }
}
}//case WM_TIMER:
break;

//сообщение от windows о том, что надо завершить
//работу нашей программы
case WM_DESTROY:
//Убиваем наш таймер с номером 15
KillTimer(hWnd,15);
//Сообщение нашей программе - завершить работу
PostQuitMessage(0);
break;

//Если пришло сообщение, которое мы не обработали,
//то дать возможность windows обработать ето сообщение
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}

return 0;
}

void MyCreate(HWND hWnd)
{
RECT MyClientRect; //Прямоугольник
MyDC = GetDC(hWnd); //Получаем DC нашего окна

//Узнаем размер клиентской области нашего окна
//в глобальных координатах (от левого верхнего
//угла рабочего стола)
GetClientRect(hWnd,&MyClientRect);

//Вычисляем максимальные координаты
//клиентской области по X,Y
my = MyClientRect.bottom-MyClientRect.top;
mx = MyClientRect.right-MyClientRect.left;

//Устанавливаем таймер
//Сообщения от этого таймера будут приходить только
//на hWnd (т.е., нашему окну)
SetTimer(
hWnd,//Куда посылать сообщения
15, //Уникальный номер именно этого таймера
//(В вашей программе их может быть много)
50, //Задержка в микросекундах
NULL//Здесь можно повешать адрес своей
//функции - таймер будет вызывать
//именно эту функцию
);

}
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines