Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
IvanG
0 / 0 / 0
Регистрация: 03.11.2009
Сообщений: 5
#1

screenmate: SetWindowRgn - не всегда меняет форму окна - C++

03.11.2009, 09:58. Просмотров 1382. Ответов 1
Метки нет (Все метки)

Решил разобраться с устройством Скринмейтов (программок бегающих по экрану). Долго мучился с разрезанием картинки и т.д. (С++ знаю не очень...), но тем не менее добился кое-каких результатов.
Скринмейтом полученное творение назвать нельзя, т.к. форма окна и картинка меняется по нажатию клавишь ВВЕРХ, ВНИЗ, выход на Escape. Ну естественно анимации нет. Картинку выдрал из другого скринмейта

Так вот, теперь собственно о проблеме:
При нажатии клавиш вызывается функция RePaint, которая выводит на окошко другую картинку и устанавливает новую форум окна посредством SetWindowRgn, но тут не все просто, у меня почему то она не всегда меняет форму окна. И тут нет проблем с неправильно заданым регионом и т.д.
Получается что когда мотаешь картинки и форму окна на кнопки ВВЕРХ/ВНИЗ, картинки меняются всегда, а вот форма иногда подтупливает и остается прежняя
Картинки и формы(регионы) заданы в двух разных массивах.

Прикрепляю архив с компиленным бинарником и исходниками

Код функции RePaint (может в ней проблема?)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void RePaint()
{
    PAINTSTRUCT ps;
    HDC hdcBits;
    HDC hdc;
    SetWindowRgn(hWnd, mask[ind_image], true);
    hdc = BeginPaint(hWnd, &ps);
    hdcBits=::CreateCompatibleDC(hdc);
    SelectObject(hdcBits, bAr[ind_image]);
    BitBlt(hdc, 0, 0, 50, 50, hdcBits, 0, 0, SRCCOPY);
    DeleteDC(hdcBits);
    EndPaint(hWnd, &ps);
    //InvalidateRgn(hWnd, mask[ind_image],false);
    InvalidateRect(hWnd, 0, false);
    return;
}
Вложения
Тип файла: zip screenmate(source and binary).zip (127.2 Кб, 55 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2009, 09:58     screenmate: SetWindowRgn - не всегда меняет форму окна
Посмотрите здесь:

Какой стиль окна отвечает за то, что оно всегда активно, пока в него не ввести текст? - C++ WinAPI
Друзья! Есть программка. Там есть всплывающее окно. Пока в него текст не введёшь, все остальные окна этой программы неактивны и при тыкании...

Изменить форму окна - C++ WinAPI
Здраствуйте. Я пишу программу на WIN API в VC++2008. Вопрос такой: как изменить форму окна, чтобы был не прямоугольник, а скажем, например...

Окна меняют форму - C++ Builder
1)Кто подскажет как сделать так что бы при запуске проги все ярлыки и меня пуск убегали от мышки , лучше если сразу листинг я по ним лучше...

Открыть форму главного окна - C++ WinAPI
Доброго времени суток. Подскажите как в visual 2013 открыть форму главного окна, чтобы туда я мог добавить пару кнопок. Созданные мной...

Как сделать форму окна произвольной - C++ Builder
Доброго времени суток. У меня есть задумка: Хочу написать прогу у каторой форма формируеться в зависимости как я отрисую. К примеру я...

Программа всегда выдаёт всегда одно и то же - C++
Суть программы в том, что из вводимого массива программа выбирает нечётные числа, перемножает их и вычисляет из этого произведения корень...

При изменении размеров окна выдержать квадратную форму - C++ WinAPI
Приветствую. Создаю окно со стилем WS_OVERLAPPEDWINDOW, с равным соотношением горизонтали и вертикали (окно квадратное), при любых...

Как обратиться к компоненту форму, зная хендл ее окна? - C++ Builder
Знаю HWND...формы. TForm *f; HWND *h=f->Handle; Как обратиться к форме и её компоненту по данному указателю h? Например к...

Есть ли Microsoft Visual C++ 2015 нечто вроде как у С++ - перетаскивание элементов на форму окна? - Visual C++
Есть ли Microsoft Visual C++ 2015 нечто вроде как у С++ - перетаскивание элементов на форму окна?

Кнопка, закрывающая форму, очищающая память, и запускающая форму заново - C++ WinAPI
Можно ли сделать кнопку что бы она закрывала форму, очищая при этом память и все прочее, а потом ее запускала заново? Т.е сделал все в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IvanG
0 / 0 / 0
Регистрация: 03.11.2009
Сообщений: 5
03.11.2009, 14:40  [ТС]     screenmate: SetWindowRgn - не всегда меняет форму окна #2
Присмотрелся к этой проблем получше и выяснил, что по одному и тому же региону (HRGN), функция SetWindowRgn не изменяет форму окна больше 1го раза...
Кто-нить знает как с этим бороться?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru