С Новым годом! Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
1 / 7 / 3
Регистрация: 06.04.2011
Сообщений: 85

Рисование STATIC с помощью мышки

23.02.2012, 03:21. Показов 2022. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написать программу, рисующую статики.
Необходимо динамически создавать статики, размер которых определяется курсором мышки.
При нажати левой клавиши мышки запомнить её координаты, при отпускании рисовать статик с полученными координатами.
В верхней части программы реализовать панель управления:
чекбокс(если выбран, то на статики загружается картинка, иначе отображается индекс статика)
группа радиокнопок(1-статик с рамкой, 2 - статик без рамки, 3 - вдавленный статик)
При рисовании статика учитывать настройки на панели управления.
При двойном щелчке левой по статику в заголовок окна выводить индекс, координаты и размер статика.
При двойном щелчке правой - удалять статик.

Предусмотреть, чтобы нельзя было создавать статик размером менее чем 10 на 10 пикселей.
Сделал все кроме того что помеченного синим цветом. Не могли бы вы подсказать, как мне доделать это задание?
И еще хотел спросить как масштабировать или обрезать картинку чтобы та не отрисовывалась по своему размеру.
Вот то что уже готово:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include<Windows.h>
#include"resource.h"
BOOL CALLBACK DlgProc(HWND hwnd,UINT msg,WPARAM wPAram,LPARAM lParam);
INT WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrew,LPSTR lpsz,INT nShow)
{
    return DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG1),NULL,DlgProc);
}
HWND hSt;
DWORD X_CUR,Y_CUR,WX_CUR,HY_CUR;
HBITMAP hBmp;
INT i=0;
DWORD TMP;
BOOL CALLBACK DlgProc(HWND hwnd,UINT msg,WPARAM wPAram,LPARAM lParam)
{
    switch(msg)
    {
        case WM_INITDIALOG:
            hBmp=LoadBitmap(GetModuleHandle(0),MAKEINTRESOURCE(IDB_BITMAP1));
            SendMessage(GetDlgItem(hwnd,IDC_RADIO1),BM_SETCHECK,BST_CHECKED,0);
            return TRUE;
            break;
        case WM_LBUTTONDOWN:
            X_CUR=LOWORD(lParam);
            Y_CUR=HIWORD(lParam);
            return TRUE;
            break;
        case WM_LBUTTONUP:
            WX_CUR=LOWORD(lParam);
            HY_CUR=HIWORD(lParam);
            if(WX_CUR-X_CUR>10&&HY_CUR-Y_CUR>10)
            {
                TMP=WS_CHILD+WS_VISIBLE;
                i++;
                if(IsDlgButtonChecked(hwnd,IDC_CHECK1))
                    TMP+=SS_BITMAP;
                else
                    TMP+=SS_CENTER|SS_CENTERIMAGE;
                if(IsDlgButtonChecked(hwnd,IDC_RADIO1))
                    TMP+=WS_DLGFRAME        ;
                if(IsDlgButtonChecked(hwnd,IDC_RADIO3))
                    TMP+=WS_BORDER;
                TCHAR STR[10];
                wsprintf(STR,L"%d",i);
                hSt=CreateWindowEx(0,L"STATIC",STR,TMP,
                    X_CUR,Y_CUR,WX_CUR-X_CUR,HY_CUR-Y_CUR,hwnd,NULL,GetModuleHandle(0),NULL);
                if(IsDlgButtonChecked(hwnd,IDC_CHECK1))
                    SendMessage(hSt,STM_SETIMAGE,(WPARAM)IMAGE_BITMAP,(LPARAM)hBmp);
            }
            return TRUE;
            break;
        case WM_LBUTTONDBLCLK:
            SetWindowText(hwnd,L"Двойной ЛКМ");
            return TRUE;
            break;
        case WM_RBUTTONDBLCLK:
            return TRUE;
            break;      
        case WM_CLOSE:
            EndDialog(hwnd,0);
            return TRUE;
            break;
    }
    return FALSE;
}
Вложения
Тип файла: rar Draws Static.rar (438.0 Кб, 35 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.02.2012, 03:21
Ответы с готовыми решениями:

Рисование линий нажимая кнопку мышки
Нужно сделать чтобы щелкая по окну левой кнопкой мышки от первого к второму нажатию рисовалась линия, чтобы при рисовании новых линий...

быстрое рисование с помощью GDI+
Доброго времени суток! Хочу вывести прямоугольник в центр экрана используя GDI+, если рисовать сразу, то картинка будет тормозить. Поэтому...

Как правильно разместить static поверх других static-ов
Есть кнопка, нажимая на которую становится видно статик. проблема в том, что статик отображатеся сзади других статиков и кнопок. как...

1
Исследователь
 Аватар для GrayWolf
318 / 317 / 24
Регистрация: 06.04.2011
Сообщений: 872
24.02.2012, 05:42
Цитата Сообщение от Sylvos Посмотреть сообщение
При двойном щелчке левой по статику в заголовок окна выводить индекс, координаты и размер статика.
Общий алгоритм:
1. Получаем текущие координаты курсора GetCursorPos().
2. Получаем хэндл окна под курсором GetWindowFromPoint().
3. Индекс можно сохранить в дополнительной памяти окна через SetWindowLong(hWnd, GWL_USERDATA, uIndex).
4. Размер окна, его координаты получаем через GetWindowRect().
Цитата Сообщение от Sylvos Посмотреть сообщение
При двойном щелчке правой - удалять статик
Почти аналогично первому варианту: выполняем первые два пункта и удаляем статик.
Все это, соответственно производится в сообщении WM_LBUTTONDBLCLK и WM_RBUTTONDBLCLK соответственно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.02.2012, 05:42
Помогаю со студенческими работами здесь

Цвет отдельного Static в массиве Static'ов
Здравствуйте ! Столкнулся с такой проблемой. Есть у меня массив статиков HWND a; Мне нужно случайным образом поменять цвет двух...

Рисование кистью: если движение мышки быстрое, то линия получается с пробелами
Осваиваю рисование в С#, проблема с рисованием кистью. Вот пишу программу, всё работает, но есть 1 недочет : если движение мышки быстрое,...

Скролл по DBGrid'у с помощью колесика мышки
Извините если надоел этой крысой... Подскажите пожалуйста, как сделать скрол по DBGrid'у колесиком крысы? Toxa33rus и Abu. Ну Вы же...

Глюк при скроллинге текста с помощью мышки
Привет всем. Прошу помощи. При прокрутке кода в редакторе кода текст строчки скролится в низ а код остаётся на месте. Как поправить? ...

Рисование с помощью НетЛого
Скажите, кто то вообще работал с такой программой как НетЛого???


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Old Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru