Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Razor32
0 / 0 / 1
Регистрация: 15.12.2010
Сообщений: 22
1

Использование фильтра выбора цвета

21.04.2013, 11:18. Просмотров 910. Ответов 3
Метки нет (Все метки)

Здравствуйте! Не могу понять, как надо использовать фильтр цвета. Мне надо, чтобы при нажатии кнопки ОК была проверка выбранного цвета и если он не удовлетворяет выбранному условию, то вывести окно с предупреждением. Не могу понять в чем дело. Вот код фильтра:
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
UINT CALLBACK ColorHook(HWND hDlg, UINT nMsg, WPARAM wP, LPARAM lP) 
{ 
    switch(nMsg) 
    { 
    
    case WM_COMMAND:
        {   
            switch(LOWORD(wP))
            {   
                case IDOK:
                {
                    if(cc.rgbResult > RGB(100,100,100)
                    {
                        rgbCurrent = cc.rgbResult;
                        return FALSE;
                    }
                    else 
                    {
                        MessageBox(NULL,"Create: error","MyTitle",MB_OK|MB_ICONSTOP);
                        return TRUE;
                    }
                }
                return FALSE; 
            }
        }; break;
 
    } return FALSE;
}
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.04.2013, 11:18
Ответы с готовыми решениями:

Окно выбора цвета
Здравствуйте! Подскажите, есть ли в WinApi стандортное окно выбора цвета и как им воспользоваться?

Стандартное окно выбора цвета
есть у кого нибудь исходник этого ? Буду очень признателен.

Ганеев. Панель выбора цвета
Выскакивают ошибки которые вроде как не должны выскакивать... Избавиться от них можно удалив первую...

Использование окна выбора цвета (Color)
Подскажите пожалуйста если кто использовал такую опцию! Я хочу применить диалоговое (модальное...

Диалоги выбора цвета и шрифта - получение результата выбора
Имеем функцию Function FUN_OPEN_FONT() As String ' диалог выбора ЦВЕТА '...

3
ssXXss
266 / 188 / 33
Регистрация: 15.01.2011
Сообщений: 681
21.04.2013, 20:10 2
если ColorHook это хук процедура то она описывается так -
LRESULT CALLBACK FilterFunc(int nCode, WPARAM wParam, LPARAM lParam);
если это CALLBACK окна или диалога то тогда что такое cc.rgbResult , ты наверное не весь код привел поэтому xz что там у тебя может быть.
1
Razor32
0 / 0 / 1
Регистрация: 15.12.2010
Сообщений: 22
21.04.2013, 22:38  [ТС] 3
Вот полный код процедур:
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
//LPCCHOOKPROC CCHookProc;
UINT CALLBACK ColorHook(HWND hDlg, UINT nMsg, WPARAM wP, LPARAM lP) 
{ 
    switch(nMsg) 
    { 
 
    case WM_COMMAND:
        {   
            switch(LOWORD(wP))
            {   
                case IDOK:
                {
                    if(cc.rgbResult > RGB(100,100,100))
                    {
                        rgbCurrent = cc.rgbResult;
                        return FALSE;
                    }
                    else 
                    {
                        MessageBox(NULL,"Create: error","MyTitle",MB_OK|MB_ICONSTOP);
                        return TRUE;
                    }
                }
                return FALSE; 
                    // обработка сообщений от других элементов управления
            }
        }; break;
 
    } return FALSE;
}
 
 
BOOL CALLBACK DlgProc(HWND hDlg,UINT message, WPARAM wParam,LPARAM lParam)
{   
    static COLORREF acrCustClr[16]; // массив цветов
    HBRUSH hbrush;                  // дескриптор кисти
 
    switch(message)
    {
        case WM_INITDIALOG:
        {   // различные инициализации
 
            ZeroMemory(&cc, sizeof(cc));
            cc.lStructSize = sizeof(cc);
            cc.hwndOwner = hDlg;
            cc.lpfnHook=ColorHook;
            cc.lpCustColors = (LPDWORD) acrCustClr;
            cc.rgbResult = rgbCurrent;
            cc.Flags = CC_FULLOPEN | CC_RGBINIT | CC_ENABLEHOOK;
            KillTimer(hWndMain, nTimer);
                // приложение само может установить фокус ввода на нужный 
                // элемент управления (SetFocus), тогда возвращают FALSE.
                // Для предоставления Windows возможности установки фокуса ввода следует возвратить TRUE.
            return TRUE;
        };
 
        case WM_COMMAND:
        {   
            switch(LOWORD(wParam))
            {
                case IDCANCEL:
                    // нажаты или ESC, илиCtrl+Break, или пункт 
                    // меню IDCANCEL, или кнопка IDCANCEL
                    EndDialog(hDlg, IDCANCEL); 
                return TRUE; 
 
                case IDC_COLOR:
                {
                    // Заполняем CHOOSECOLOR
                    if (ChooseColor(&cc)==TRUE)
                    {
                        hbrush = CreateSolidBrush(cc.rgbResult);
                        rgbCurrent = cc.rgbResult;
                    }
 
 
                }
                return TRUE;
            
                case IDOK:
                {
                    size=GetDlgItemInt(hDlg,IDC_SIZE,NULL,NULL);
                    pos_x=GetDlgItemInt(hDlg,IDC_POS_X,NULL,NULL);
                    pos_y=GetDlgItemInt(hDlg,IDC_POS_Y,NULL,NULL);
                    timer=GetDlgItemInt(hDlg,IDC_TIMER,NULL,NULL);
 
                    EndDialog(hDlg, IDOK); 
                }
                return TRUE; 
                    // обработка сообщений от других элементов управления
            }
        }; break;
        
        case WM_CLOSE: // закрытие окна при помощи системного меню 
        {   // моделирование отказа от работы с панелью
            PostMessage(hDlg, WM_COMMAND, IDCANCEL, 0L);
        }; return TRUE;
    }
    return FALSE;
}
Добавлено через 2 часа 22 минуты
C++
1
2
static DWORD rgbCurrent=RGB(0,0,0);        // изначальный цвет
CHOOSECOLOR cc;                 // структура для выбора цвета
Немного недобавил
0
maksim32
68 / 46 / 26
Регистрация: 30.08.2012
Сообщений: 132
22.04.2016, 14:24 4
Фильтр-процедура цвета (CCHookProc)
0
22.04.2016, 14:24
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2016, 14:24

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Нужна задачка выбора названия цвета в ComboBox и последующего появления самого цвета в другом окне
Выбираешь название цвета (red,black и т.д) в ComboBox и чтобы сам цвет появлялся в другом окне....

ContextMenu изменение цвета выбора и цвета текста
Добрый день подскажите как сделать так что бы после выбора пункта меню цвет текста менялся обратно...

Как создать диалог выбора шрифта и диалог выбора цвета
как создать диалог выбора шрифта и диалог выбора цвета в wpf


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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