Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 14.04.2013
Сообщений: 180

Как загрузить картинки и изменить цвет кнопки

31.03.2015, 17:46. Показов 3502. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Два вопроса:
1. Необходимо загрузить картинку для кнопки. Хочу увидеть пример.
2. Необходимо изменить цвет для кнопки. Хочу увидеть пример.
Заранее благодарен.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.03.2015, 17:46
Ответы с готовыми решениями:

Как изменить цвет gif-картинки?
Всем привет! Есть анимированная gif-картинка с прозрачным фоном. В фотошопе открывается только 1 кадр, там поменять цвет не могу. Надо...

Как изменить цвет кнопки?
проект CLR (win forms) пробовал _btn00->BackColor = Color.Red; и _btn00->BackColor = Color->Red; не...

Как изменить цвет кнопки?
Привет всем. Подскажите как изменить цвет кнопки??

9
32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 878
31.03.2015, 19:11
https://www.google.com.ua/sear... gws_rd=ssl
сотни ответов и вариантов на ваши вопросы. неужели так сложно пользоватся поисковиком?
0
0 / 0 / 0
Регистрация: 14.04.2013
Сообщений: 180
31.03.2015, 19:19  [ТС]
Если я спрашиваю, значит мне нужны точные примеры
0
32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 878
31.03.2015, 20:13
Цитата Сообщение от Леонид Каруна Посмотреть сообщение
Если я спрашиваю, значит мне нужны точные примеры
о боже, в каждой ссылке пример, форумы нужны для того чтобы помочь разобраться в коде, или с другим вопросом который вы не смогли решить, но извините, поленится зайти в гугл и просто скопипастить уже готовый код, а после просить об этом на форуме - это наглость, тем более что данный вопрос уже разжёванный дальше некуда.
0
 Аватар для Shvonder
46 / 35 / 24
Регистрация: 16.03.2015
Сообщений: 179
31.03.2015, 22:51
Лучший ответ Сообщение было отмечено Леонид Каруна как решение

Решение

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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
#include <windows.h>
 
#pragma comment(lib,"MSImg32.lib")
 
#define IDC_BUTTON1 1
#define IDC_BUTTON2 2
 
#define WIDTH   400 // Ширина кнопки.
#define HEIGHT  50  // Высота кнопки.
 
TCHAR GWndname[] = TEXT("cDc_since_1984_cDc-4Ever");    // Класс.
TCHAR GAppname[] = TEXT("Градиент: Цветные кнопки");   // Заголовок.
 
HINSTANCE GInstance;
HWND hButton1;
HWND hButton2;
 
void DrawButton1(DRAWITEMSTRUCT* dis, HWND hWnd)
{
    if( dis->itemState & ODS_SELECTED )
    {
        TRIVERTEX   tx[2];
        tx[0].x     = 0;
        tx[0].y     = 0;
        tx[0].Red   = 0;
        tx[0].Green = 0x0AAAA;
        tx[0].Blue  = 0x0FFFF;
        tx[1].x     = WIDTH;    // Ширина кнопки.
        tx[1].y     = HEIGHT;   // Высота кнопки. 
        tx[1].Red   = 0x0CCCC;
        tx[1].Green = 0;
        tx[1].Blue  = 0;
 
        GRADIENT_RECT       gRect;
        gRect.UpperLeft     = 0;
        gRect.LowerRight    = 1;
        GradientFill(dis->hDC,tx,2,&gRect,1,GRADIENT_FILL_RECT_H);
    }
    else
    {
        TRIVERTEX   tx[2];
        tx[0].x     = 0;
        tx[0].y     = 0;
        tx[0].Red   = 0x0AAAA;
        tx[0].Green = 0x07777;
        tx[0].Blue  = 0;
        tx[1].x     = WIDTH;    // Ширина кнопки.
        tx[1].y     = HEIGHT;   // Высота кнопки.
        tx[1].Red   = 0x0DDDD;
        tx[1].Green = 0;
        tx[1].Blue  = 0;
 
        GRADIENT_RECT       gRect;
        gRect.UpperLeft     = 0;
        gRect.LowerRight    = 1;
        GradientFill(dis->hDC,tx,2,&gRect,1,GRADIENT_FILL_RECT_H);
    }
    
    RECT rect;
    GetClientRect(hWnd,&rect);
    SetBkMode(dis->hDC,TRANSPARENT );
    
    TCHAR Buffer[256];
    GetWindowText(hWnd,Buffer,256);
    DrawText(dis->hDC,Buffer,lstrlen(Buffer),&rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE );
}
 
void DrawButton2(DRAWITEMSTRUCT* dis, HWND hWnd)
{
    RECT rect;
    GetClientRect(hWnd,&rect);
    
    if( dis->itemState & ODS_SELECTED )
    {
        TRIVERTEX   tx[2];
        tx[0].x     = 0;
        tx[0].y     = 0;
        tx[0].Red   = 0x02378;
        tx[0].Green = 0;
        tx[0].Blue  = 0x0FFFF;
        tx[1].x     = WIDTH;    // Ширина кнопки.
        tx[1].y     = HEIGHT;   // Высота кнопки.
        tx[1].Red   = 0;
        tx[1].Green = 0;
        tx[1].Blue  = 0x0CCCC;
        
        GRADIENT_RECT       gRect;
        gRect.UpperLeft     = 0;
        gRect.LowerRight    = 1;
        GradientFill(dis->hDC,tx,2,&gRect,1,GRADIENT_FILL_RECT_H);
    }
    else
    {
        TRIVERTEX   tx[2];
        tx[0].x     = 0;
        tx[0].y     = 0;
        tx[0].Red   = 0;
        tx[0].Green = 0x0BBCC;
        tx[0].Blue  = 0;
        tx[1].x     = WIDTH;    // Ширина кнопки.
        tx[1].y     = HEIGHT;   // Высота кнопки.
        tx[1].Red   = 0;
        tx[1].Green = 0;
        tx[1].Blue  = 0x0DDDD;
        
        GRADIENT_RECT       gRect;
        gRect.UpperLeft     = 0;
        gRect.LowerRight    = 1;
        GradientFill(dis->hDC,tx,2,&gRect,1,GRADIENT_FILL_RECT_H);
    }   
    SetBkMode(dis->hDC,TRANSPARENT);
    
    TCHAR Buffer[256];
    GetWindowText(hWnd,Buffer,256);
    DrawText(dis->hDC,Buffer,lstrlen(Buffer),&rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
}
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
    case WM_CREATE:
        {
            hButton1=CreateWindowEx(
                NULL,L"BUTTON",L"Энергетические напитки - хуже одеколона!",
                WS_VISIBLE|WS_CHILD|BS_OWNERDRAW,
                20,20,WIDTH,HEIGHT,
                hWnd,
                (HMENU)IDC_BUTTON1,
                GInstance,NULL);
            if( hButton1==NULL ) {
                MessageBox(hWnd,L"Не удалось создать кнопку #1",GAppname,MB_ICONSTOP|MB_OK);
                SendMessage(hWnd,WM_CLOSE,0,0);
                return 1;
            }
            hButton2=CreateWindowEx(
                NULL,L"BUTTON",L"Курение - убивает память!",
                WS_VISIBLE|WS_CHILD|BS_OWNERDRAW,
                20,90,WIDTH,HEIGHT,
                hWnd,
                (HMENU)IDC_BUTTON2,GInstance,NULL);
            if( hButton2==NULL ) {
                MessageBox( hWnd, TEXT("Не удалось создать кнопку #2"),GAppname,MB_ICONSTOP|MB_OK);
                SendMessage(hWnd,WM_CLOSE,0,0);
                return 1;
            }
        }
        return 0;
    
    case WM_COMMAND:
        switch( LOWORD(wParam) )
        {
        case IDC_BUTTON1:
            MessageBox(hWnd,L"[нажата] Кнопка #1",GAppname,MB_OK|MB_ICONINFORMATION);
            break;
        case IDC_BUTTON2:
            MessageBox(hWnd,L"[нажата] Кнопка #2",GAppname,MB_OK|MB_ICONINFORMATION);
            break;
        }
        break;
    
    case WM_DRAWITEM:
        {
            DRAWITEMSTRUCT* dis=(DRAWITEMSTRUCT*)lParam;
 
            switch( dis->CtlID )
            {
            case IDC_BUTTON1:
                DrawButton1(dis,hButton1);
                break;
 
            case IDC_BUTTON2:
                DrawButton2(dis,hButton2);
                break;
            }
        }
        return TRUE;
 
    case WM_CLOSE:
        DestroyWindow(hWnd);
        break;
 
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd,uMsg,wParam,lParam);
    }
    return 0;
}
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    WNDCLASSEX wc;
    wc.cbSize           = sizeof(WNDCLASSEX);
    wc.style            = 0;
    wc.lpfnWndProc      = WndProc;
    wc.cbClsExtra       = 0;
    wc.cbWndExtra       = 0;
    wc.hInstance        = hInstance;
    wc.hIcon            = LoadIcon(NULL,IDI_APPLICATION);
    wc.hCursor          = LoadCursor(NULL,IDC_ARROW);
    wc.hbrBackground    = (HBRUSH)(COLOR_WINDOW+1);
    wc.lpszMenuName     = NULL;
    wc.lpszClassName    = GWndname;
    wc.hIconSm          = LoadIcon(NULL,IDI_APPLICATION);
    if( !RegisterClassEx(&wc) ) {
        MessageBox(NULL,TEXT("Неудача: RegisterClass"),GAppname,MB_ICONSTOP|MB_OK);
        return 1;
    }
    HWND hWnd = CreateWindowEx(WS_EX_CLIENTEDGE,GWndname,GAppname,
        WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,
        640,288,NULL,NULL,GInstance,NULL);
    if( hWnd==NULL ) {
        MessageBox(NULL,TEXT("Неудача: CreateWindow"),GAppname,MB_ICONSTOP|MB_OK);
        return 1;
    }
    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);
    MSG Msg;
    while(GetMessage(&Msg,NULL,0,0 ) > 0) {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
    }
    return (int)Msg.wParam;
}
GradButton_win32.zip


* чтобы кнопку рисовать из картинки, проще использовать стиль MFC, также подготовить
три картинки: кнопка активна (т.е. "Focus"), кнопка неактивна, кнопка нажата.
В дальнейшем (постараюсь) загрузить пример MFC.
0
 Аватар для Shvonder
46 / 35 / 24
Регистрация: 16.03.2015
Сообщений: 179
31.03.2015, 23:19
mh-coder, мне не хотелось бы высказываться (как всегда промолчать, что ли)...
- ведь вас никто не заставляет отвечать, если вам нечего ответить - молчите.
0
 Аватар для Shvonder
46 / 35 / 24
Регистрация: 16.03.2015
Сообщений: 179
01.04.2015, 13:35
Вариант MFC

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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
// AppDlg.cpp : implementation file
//
 
#include "stdafx.h"
#include "App.h"
#include "AppDlg.h"
 
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
 
 
// CAboutDlg dialog used for App About
 
class CAboutDlg : public CDialog
{
public:
    CAboutDlg();
 
// Dialog Data
    enum { IDD = IDD_ABOUTBOX };
 
    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
 
// Implementation
protected:
    CBitmapButton m_BitmapButton;
 
    // Generated message map functions
    //{{AFX_MSG(CAboutDlg)
    virtual BOOL OnInitDialog();
    DECLARE_MESSAGE_MAP()
};
 
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
    if( m_BitmapButton.LoadBitmaps(
        _T("Image1Up"), _T("Image1Down"),_T("Image1Focus")) == FALSE )
    {
        //AfxMessageBox(IDS_PICTURE_UNAVAILABLE);
        ExitProcess(0);
    }
}
 
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
}
 
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()
 
BOOL CAboutDlg::OnInitDialog()
{
    CDialog::OnInitDialog();
 
    // Управление имеет специальные растровые изображения.
    VERIFY(m_BitmapButton.SubclassDlgItem(IDOK, this));
    m_BitmapButton.SizeToContent();
    return TRUE;
}
 
// CAppDlg dialog
 
 
 
 
CAppDlg::CAppDlg(CWnd* pParent /*=NULL*/)
    : CDialog(CAppDlg::IDD, pParent)
{
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
 
void CAppDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
}
 
BEGIN_MESSAGE_MAP(CAppDlg, CDialog)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()
 
 
// CAppDlg message handlers
 
BOOL CAppDlg::OnInitDialog()
{
    CDialog::OnInitDialog();
 
    // Add "About..." menu item to system menu.
 
    // IDM_ABOUTBOX must be in the system command range.
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX < 0xF000);
 
    CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu != NULL)
    {
        CString strAboutMenu;
        strAboutMenu.LoadString(IDS_ABOUTBOX);
        if (!strAboutMenu.IsEmpty())
        {
            pSysMenu->AppendMenu(MF_SEPARATOR);
            pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
        }
    }
 
    // Set the icon for this dialog.  The framework does this automatically
    //  when the application's main window is not a dialog
    SetIcon(m_hIcon, TRUE);         // Set big icon
    SetIcon(m_hIcon, FALSE);        // Set small icon
 
    // TODO: Add extra initialization here
 
    return TRUE;  // return TRUE  unless you set the focus to a control
}
 
void CAppDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
    if ((nID & 0xFFF0) == IDM_ABOUTBOX)
    {
        CAboutDlg dlgAbout;
        dlgAbout.DoModal();
    }
    else
    {
        CDialog::OnSysCommand(nID, lParam);
    }
}
 
// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.
 
void CAppDlg::OnPaint()
{
    if (IsIconic())
    {
        CPaintDC dc(this); // device context for painting
 
        SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
 
        // Center icon in client rectangle
        int cxIcon = GetSystemMetrics(SM_CXICON);
        int cyIcon = GetSystemMetrics(SM_CYICON);
        CRect rect;
        GetClientRect(&rect);
        int x = (rect.Width() - cxIcon + 1) / 2;
        int y = (rect.Height() - cyIcon + 1) / 2;
 
        // Draw the icon
        dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
        CDialog::OnPaint();
    }
}
 
// The system calls this function to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CAppDlg::OnQueryDragIcon()
{
    return static_cast<HCURSOR>(m_hIcon);
}

LoadBitmaps_mfc.zip
0
0 / 0 / 0
Регистрация: 14.04.2013
Сообщений: 180
01.04.2015, 14:46  [ТС]
Спасибо большое, интересные проекты.
Но у меня вопрос. Где вы обрабатываете общие элементы на диалоге, кнопки на пример?
Пробовал создать свою функцию для обработки, но не прокатило.
0
 Аватар для Shvonder
46 / 35 / 24
Регистрация: 16.03.2015
Сообщений: 179
01.04.2015, 20:39
Цитата Сообщение от Леонид Каруна Посмотреть сообщение
Где вы обрабатываете общие элементы на диалоге, кнопки на пример?
Всё как обычно, вот для первого:
C++
1
2
3
4
5
6
7
8
9
10
11
case WM_COMMAND:
        switch( LOWORD(wParam) )
        {
        case IDC_BUTTON1:
            MessageBox(hWnd,L"[нажата] Кнопка #1",GAppname,MB_OK|MB_ICONINFORMATION);
            break;
        case IDC_BUTTON2:
            MessageBox(hWnd,L"[нажата] Кнопка #2",GAppname,MB_OK|MB_ICONINFORMATION);
            break;
        }
        break;
Пример MFC, вообще - лишь пять строк добавлено, где то здесь:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
protected:
    CBitmapButton m_BitmapButton;
 
    virtual BOOL OnInitDialog();
 
//... 
   if( m_BitmapButton.LoadBitmaps(
        _T("Image1Up"), _T("Image1Down"),_T("Image1Focus")) == FALSE )
    {
        ExitProcess(0);
    }
//...
 
//BOOL CAboutDlg::OnInitDialog()
    CDialog::OnInitDialog(); 
    VERIFY(m_BitmapButton.SubclassDlgItem(IDOK, this));
    m_BitmapButton.SizeToContent();
Ах - да, кнопка (MFC) должна быть настроена, OWNER DRAW = TRUE

Та что ничего сложного нет, смотрите в примерах.
0
0 / 0 / 0
Регистрация: 25.09.2018
Сообщений: 36
22.10.2018, 18:04
Как здесь задаются вообще цвета? В шестнадцатеричных числах?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.10.2018, 18:04
Помогаю со студенческими работами здесь

Как изменить цвет оболочки кнопки
Как изменить цвет обводки в button Вот чтобы он из при наводке на него становился не синим, а допустим красным

Как программно изменить цвет у кнопки.
Добрый день! У меня есть List Button. ТО есть все мои кнопки представлены в виде buttons, я хочу сделать, чтобы программно у меня можно...

Как изменить цвет фона кнопки?
Не получается изменить цвет фона buttons. #include &quot;work_project.h&quot; extern HINSTANCE hInst; extern COLORREF clrs; INT_PTR...

Как изменить цвет стандартной кнопки
Всем Здравия. Как изменить цвет кнопки? Нашел следующую информацию: HBRUSH g_hbrBackground = CreateSolidBrush(RGB(0, 0, 255)); ...

Как изменить цвет кнопки при нажатии?
Доброго времени суток. Ребята, подскажите пожалуйста как изменить цвет кнопки при нажатии?


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru