Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как создать в WinApi решетку такую как в тетради

82K
06 марта 2013 года
vetal3848642
12 / / 06.03.2013
Как в WinApi на С++ создать решетку как в тетраде с математики,и чтобы при нажатии на каком нибудь квадрате мишкой он менял свой цвет.
88K
09 марта 2013 года
kerneldos
2 / / 05.03.2013
Код:
#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;
}
443
06 марта 2013 года
REmindER
292 / / 23.03.2003
OMG зачем заставлять бедного медведя нажимать какие-то клетки? Если нужна работа с графикой под WinAPI, то копам в сторону работы с графикой под WinAPI.
82K
09 марта 2013 года
vetal3848642
12 / / 06.03.2013
Спасибо за ответ. Очень помогло.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог