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

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

23.02.2012, 03:21. Показов 2045. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru