Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 31.01.2018
Сообщений: 8
1

Picture control как с ним работать

12.02.2018, 13:11. Показов 2698. Ответов 3

Author24 — интернет-сервис помощи студентам
Хочу создать Picture control через createwindow, но не могу найти как с ним работать и как создавать. Или подскажите как выводить на экран иконки из ресурсов (работая с HICON), в нужную область (например заданную RECT)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.02.2018, 13:11
Ответы с готовыми решениями:

Загрузить изображение в picture control
Беда какая-то, что-то LoadImage, а затем SendMessage не работают. Вот код: BOOL CALLBACK...

Нажатие на картинку (Picture Control)
Проблема в том, что нужно чтобы при нажатии на изображение оно выполняло действия.Пробовал через...

Вставить скриншот из буфера обмена в Picture Control
Доброго времени суток! На форме имеются кнопки и Picture Control. Одна из кнопок создает скриншот,...

PlayGround SDK как работать с ним?
Есть инсталяха PlayGround SDK. Установил его, а что дальше делать не знаю. Документацию читаю на...

3
2710 / 864 / 327
Регистрация: 10.02.2018
Сообщений: 2,044
12.02.2018, 14:03 2
Посмотрите Static Control. У него есть стиль для показа иконок SS_ICON. В общем случае, для показа картинок более гибко будет переопределить у окна функцию отрисовки (WM_PAINT) и в ней рисовать через GDI любые свои картинки.
0
0 / 0 / 0
Регистрация: 31.01.2018
Сообщений: 8
13.02.2018, 21:24  [ТС] 3
Спасибо, пожалуй так и сделаю. Ради интереса посмотрел что пишет визуалка в шаблоне при создании Picture Control с иконкой получилось вот что "ICON IDI_SMALL,IDC_PICTURECONTROL,176,59,20,20" (IDC_SMALL - иконка в ресурсах), то есть она сразу иконку ставит вместо контрола?
0
2710 / 864 / 327
Регистрация: 10.02.2018
Сообщений: 2,044
13.02.2018, 23:32 4
Лучший ответ Сообщение было отмечено Geny200 как решение

Решение

Небольшой пример на основе кода Michail97 (спасибки ему).
Рисует две иконки, одну с помощью статика, вторую паинтом.
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include <Windows.h>
//#include "resource.h"
 
LPCTSTR lpszClassName = L"Main class";
LPCTSTR lpszDrawName = L"Draw class";
LPCTSTR lpszCaption = L"Show Icon";
 
HICON g_hIcon = 0;
 
BOOL RegClass(WNDPROC, LPCTSTR, UINT);
BOOL RegDrawClass(WNDPROC, LPCTSTR, UINT);
LRESULT CALLBACK MainProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK DrawProc(HWND, UINT, WPARAM, LPARAM);
 
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)
{
    //g_hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(101));
    g_hIcon = LoadIcon(0, IDI_EXCLAMATION);
 
    if (!RegClass(MainProc, lpszClassName, COLOR_3DHIGHLIGHT))
        return FALSE;
 
    if (!RegDrawClass(DrawProc, lpszDrawName, COLOR_3DHIGHLIGHT))
        return FALSE;
 
    HWND hWnd = CreateWindow(lpszClassName, lpszCaption, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, 400, 400, NULL, NULL, hInstance, NULL);
    if (!hWnd)
        return FALSE;
 
    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);
 
    MSG message;
    while (GetMessage(&message, NULL, 0, 0))
    {
        TranslateMessage(&message);
        DispatchMessage(&message);
    }
 
    return message.wParam;
}
 
BOOL RegClass(WNDPROC lpfnProc, LPCTSTR lpszClass, UINT hbrBackground)
{
    WNDCLASS my_class;
    my_class.cbClsExtra = my_class.cbWndExtra = my_class.style = 0;
    my_class.hbrBackground = (HBRUSH)(hbrBackground + 1);
    my_class.hCursor = LoadCursor(0, IDC_ARROW);
    my_class.hIcon = LoadIcon(0, IDI_APPLICATION);
    my_class.hInstance = (HINSTANCE)GetModuleHandle(0);
    my_class.lpfnWndProc = lpfnProc;
    my_class.lpszClassName = lpszClass;
    my_class.lpszMenuName = 0;
    return RegisterClass(&my_class);
}
 
BOOL RegDrawClass(WNDPROC lpfnProc, LPCTSTR lpszClass, UINT hbrBackground)
{
    WNDCLASS my_class;
    my_class.cbClsExtra = my_class.cbWndExtra = my_class.style = 0;
    my_class.hbrBackground = (HBRUSH)(hbrBackground + 1);
    my_class.hCursor = 0;
    my_class.hIcon = 0;
    my_class.hInstance = (HINSTANCE)GetModuleHandle(0);
    my_class.lpfnWndProc = lpfnProc;
    my_class.lpszClassName = lpszClass;
    my_class.lpszMenuName = 0;
    return RegisterClass(&my_class);
}
 
LRESULT CALLBACK MainProc(HWND hWnd, UINT mess, WPARAM wParam, LPARAM lParam)
{
    switch (mess)
    {
        case WM_CREATE:
        {
            HWND hIconWin = CreateWindow(L"static", L"", WS_CHILD | WS_VISIBLE | SS_CENTERIMAGE | SS_ICON, 20, 20, 80, 80, hWnd, NULL, (HINSTANCE)GetClassLong(hWnd, GCL_HMODULE), NULL);
            SendMessage(hIconWin, STM_SETICON, (WPARAM)g_hIcon, 0);
            CreateWindow(lpszDrawName, L"", WS_CHILD | WS_VISIBLE, 100, 20, 80, 80, hWnd, NULL, (HINSTANCE)GetClassLong(hWnd, GCL_HMODULE), NULL);
            break;
        }
        case WM_CLOSE:
        {
            DestroyWindow(hWnd);
            break;
        }
        case WM_DESTROY:
        {
            PostQuitMessage(0);
            break;
        }
    }
 
    return DefWindowProc(hWnd, mess, wParam, lParam);
}
 
LRESULT CALLBACK DrawProc(HWND hWnd, UINT mess, WPARAM wParam, LPARAM lParam)
{
    switch (mess)
    {
        case WM_PAINT:
        {
            PAINTSTRUCT ps;
            BeginPaint(hWnd, &ps);
            RECT rc;
            GetClientRect(hWnd, &rc);
            HBRUSH hBrush = CreateSolidBrush(RGB(64,128,64));
            FillRect(ps.hdc, &ps.rcPaint, hBrush);
            DeleteObject(hBrush);
            DrawIcon(ps.hdc, 4, 4, g_hIcon);
            EndPaint(hWnd, &ps);
            return 0;
        }
    }
 
    return DefWindowProc(hWnd, mess, wParam, lParam);
}
1
13.02.2018, 23:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.02.2018, 23:32
Помогаю со студенческими работами здесь

Что делает PlaySound, и как с ним вообще работать
Господа подскажите что делает PlaySound , и как с ним вообще работать(там по идеи 3 параметра а вот...

Загрузить изображение формата bmp и работать с ним побитово
Мне нужно загрузить изображение формата bmp, чтоб потом работать с его битами. Пробовал так. ...

Как работать с Tab Control и Page Control?
В Win32 есть такие Tab Control и Page Control но как ими пользоватся вот ссылка если не понятно...

picture control
Привет, народ вообщем такая проблема: когда в диалоговое окно добавляю картинку и привязываюсь к...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru