#include<windows.h>
//#include<string.h>
#include <stdio.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
TCHAR* szProgName=L"GDIPaint";
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow){
HWND hWnd;
MSG lpMsg;
WNDCLASS w;
w.lpszClassName=szProgName; //имя программы - объявлено выше
w.hInstance=hInstance; //идентификатор текущего приложения
w.lpfnWndProc=WndProc; //указатель на функцию окна
w.hCursor=LoadCursor(NULL, IDC_ARROW); //загружаем курсор
w.hIcon=0;
w.lpszMenuName=0;
w.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); //цвет фона окна
w.style=CS_HREDRAW|CS_VREDRAW;
w.cbClsExtra=0;
w.cbWndExtra=0;
//Если не удалось зарегистрировать класс окна - выходим
if(!RegisterClass(&w))
return 0;
//Создадим окно в памяти, заполнив аргументы CreateWindow
hWnd=CreateWindow(szProgName, //Имя программы
L"Грфические возможности Win32 API", //Заголовок окна
WS_OVERLAPPEDWINDOW, //Стиль окна - перекрывающееся
CW_USEDEFAULT, //положение окна на экране по х
CW_USEDEFAULT, //положение по у
400, //ширина
400, //высота
(HWND)NULL, //идентификатор родительского окна
(HMENU)NULL, //идентификатор меню
(HINSTANCE)hInstance, //идентификатор экземпляра программы
(HINSTANCE)NULL); //отсутствие дополнительных параметров
//Выводим окно из памяти на экран
ShowWindow(hWnd, nCmdShow);
//Обновим содержимое окна
UpdateWindow(hWnd);
//Цикл обработки сообщений
while(GetMessage(&lpMsg, NULL, 0, 0)) {
TranslateMessage(&lpMsg);
DispatchMessage(&lpMsg);
}
return(lpMsg.wParam);
}
//Функция окна
LRESULT CALLBACK WndProc(HWND hWnd, UINT messg, WPARAM wParam, LPARAM lParam){
HDC hdc; //создаём контекст устройства
PAINTSTRUCT ps; //создаём экземпляр структуры графического вывода
RECT r;
HBRUSH hBrush;
HPEN hPen;
int x=0, y=0;
//Цикл обработки сообщений
switch(messg){
case WM_LBUTTONDOWN:
hdc=GetDC(hWnd);
hBrush=CreateSolidBrush(RGB(255,0,0)); //задаём сплошную кисть, закрашенную цветом RGB
SelectObject(hdc, hBrush); //делаем кисть активной
x=LOWORD(lParam);//координаты с которыми нажата мышь - аргументы WndProc
y=HIWORD(lParam);
x/=40;
y/=40;
Rectangle(hdc, x*40, y*40, x*40+40, y*40+40);
ReleaseDC(hWnd, hdc);
break;
case WM_RBUTTONDOWN:
hdc=GetDC(hWnd);
x=LOWORD(lParam);//координаты с которыми нажата мышь - аргументы WndProc
y=HIWORD(lParam);
x/=40;
y/=40;
/*char out[20];
sprintf(out, "x=%i y=%i", x, y);
MessageBoxA(NULL, out, "Координаты мыши",0);*/
MoveToEx(hdc, x*40, y*40, NULL);
LineTo(hdc, (x*40)+40, (y*40)+40);
MoveToEx(hdc, x*40+40, y*40, NULL);
LineTo(hdc, x*40, y*40+40);
ReleaseDC(hWnd, hdc);
//EndPaint(hWnd, &ps);
break;
//сообщение рисования
case WM_PAINT:
hdc=BeginPaint(hWnd, &ps);
int i;
for(i=1; i<=10; i++){
MoveToEx(hdc, 0, i*40, NULL);
LineTo(hdc, 400, i*40);
MoveToEx(hdc, i*40, 0, NULL);
LineTo(hdc, i*40, 400);
}
ValidateRect(hWnd, NULL);
EndPaint(hWnd, &ps);
break;
//сообщение выхода - разрушение окна
case WM_DESTROY:
PostQuitMessage(0); //Посылаем сообщение выхода с кодом 0 - нормальное завершение
break;
default:
return(DefWindowProc(hWnd, messg, wParam, lParam)); //освобождаем очередь приложения от нераспознаных
}
return 0;
}
Как создать в WinApi решетку такую как в тетради
Как в WinApi на С++ создать решетку как в тетраде с математики,и чтобы при нажатии на каком нибудь квадрате мишкой он менял свой цвет.
OMG зачем заставлять бедного медведя нажимать какие-то клетки? Если нужна работа с графикой под WinAPI, то копам в сторону работы с графикой под WinAPI.
Спасибо за ответ. Очень помогло.