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

ChooseColor() не меняется цвет

17.11.2015, 18:13. Показов 3502. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
По нажатии на кнопку, появляется диалог выбора цвета. После нажатия "OK" цвет остается прежним(черным). Что неверно??

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
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <tchar.h>
#include <windowsx.h>
#include <commdlg.h>
#include <string> 
 
using namespace std;
 
 
#define ID_MYBUTTON 1
 
static TCHAR szWindowClass[] = _T("win32app");
 
static TCHAR szTitle[] = _T("Win32 Guided Tour Application");
 
HINSTANCE hInst;
 
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
 
int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine,
                   int nCmdShow)
{
    WNDCLASSEX wcex;
 
    wcex.cbSize = sizeof(WNDCLASSEX);
    wcex.style          = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = WndProc;
    wcex.cbClsExtra     = 0;
    wcex.cbWndExtra     = 0;
    wcex.hInstance      = hInstance;
    wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName   = NULL;
    wcex.lpszClassName  = szWindowClass;
    wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
    
    if (!RegisterClassEx(&wcex))
    {
        MessageBox(NULL,
            _T("Call to RegisterClassEx failed!"),
            _T("Win32 Guided Tour"),
            NULL);
 
        return 1;
    }
 
    hInst = hInstance; 
 
    HWND hWnd = CreateWindow(
        szWindowClass,
        szTitle,
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT,
        500, 500,
        NULL,
        NULL,
        hInst,
        NULL
    );
 
    if (!hWnd)
    {
        MessageBox(NULL,
            _T("Call to CreateWindow failed!"),
            _T("Win32 Guided Tour"),
            NULL);
 
        return 1;
    }
 
    ShowWindow(hWnd,
        nCmdShow);
    UpdateWindow(hWnd);
 
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
 
    return (int) msg.wParam;
    
                         
}
 
HPEN hPen = NULL;
BOOL fDraw= FALSE;
POINT ptPrevious = {0};
    
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{HDC hdc;
    BOOL bRet = FALSE;
    BOOL bCmd = FALSE;
    int wmId    = LOWORD(wParam); 
    int wmEvent = HIWORD(wParam); 
CHOOSECOLOR cc;
    static DWORD rgbCurrent;
    static COLORREF acrCustClr[16];
 
    rgbCurrent= RGB(0, 0, 0);
                ZeroMemory(&cc, sizeof(cc));
                cc.lStructSize = sizeof(cc);
                cc.hwndOwner = hWnd;
                cc.lpCustColors = (LPDWORD) acrCustClr;
                cc.rgbResult = rgbCurrent;
                cc.Flags = CC_FULLOPEN | CC_RGBINIT;
                cc.Flags=CC_RGBINIT ;
                cc.rgbResult=RGB(255, 0, 255);
    switch (message)
    {
        case WM_CREATE:
   CreateWindow(L"button",L"choose color",WS_CHILD|BS_PUSHBUTTON|WS_VISIBLE, 5,5,100,20,hWnd,(HMENU)ID_MYBUTTON,NULL,NULL);
   return 0;
    case WM_COMMAND:
        bCmd = TRUE;
        bRet = TRUE;
        if (ChooseColor(&cc) == TRUE)
                {
                    
                    hPen = CreatePen(PS_SOLID ,1,cc.rgbResult);
                    rgbCurrent = cc.rgbResult;
                }
        break;
    
    case WM_LBUTTONDOWN: 
        fDraw = TRUE; 
        ptPrevious.x = LOWORD(lParam); 
        ptPrevious.y = HIWORD(lParam); 
        break;
    case WM_LBUTTONUP: 
        if(fDraw) 
        { 
            hdc = GetDC(hWnd); 
            MoveToEx(hdc, ptPrevious.x, ptPrevious.y, NULL); 
            LineTo(hdc, LOWORD(lParam), HIWORD(lParam)); 
            ReleaseDC(hWnd, hdc);
            fDraw = FALSE; 
        } 
        break;
    case WM_MOUSEMOVE: 
        if (fDraw) 
        { 
            hdc = GetDC(hWnd); 
            MoveToEx(hdc, ptPrevious.x, ptPrevious.y, NULL); 
            LineTo  
            (
                hdc, 
                ptPrevious.x = LOWORD(lParam), 
                ptPrevious.y = HIWORD(lParam)
            ); 
            ReleaseDC(hWnd, hdc); 
        } 
        break;
    case WM_QUIT:
    case WM_CLOSE:
    case WM_DESTROY:
        PostQuitMessage(0);
        EndDialog(hWnd, LOWORD(wParam));
        break;
    
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
        break;
    }
 
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.11.2015, 18:13
Ответы с готовыми решениями:

Не меняется цвет круга
PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, &amp;ps); // TODO: Добавьте сюда...

Цвет пирамиды не меняется
// Directx.cpp: определяет точку входа для приложения. // #include &quot;stdafx.h&quot; #include &quot;Pir.h&quot;...

Не меняется цвет у фигуры
Здравствуйте. Пытаюсь написать функцию для программы, которая изменяет цвет фигуры при нажатии на...

Цвет фона и текста в EDIT не меняется
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {...

4
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
17.11.2015, 19:25 2
У вас в каждом вызове оконной процедуры обнуляется rgbCurrent и структуру CHOOSECOLOR незачем так часто инициализировать:
C++
1
2
3
4
5
6
7
8
9
rgbCurrent= RGB(0, 0, 0);
ZeroMemory(&cc, sizeof(cc));
cc.lStructSize = sizeof(cc);
cc.hwndOwner = hWnd;
cc.lpCustColors = (LPDWORD) acrCustClr;
cc.rgbResult = rgbCurrent;
cc.Flags = CC_FULLOPEN | CC_RGBINIT;
cc.Flags=CC_RGBINIT ;
cc.rgbResult=RGB(255, 0, 255);  //и определитесь какой цвет вы передаёте ChooseColor диалогу
Этот код переместите в обработку WM_COMMAND перед вызовом ChooseColor
0
0 / 0 / 0
Регистрация: 04.11.2013
Сообщений: 18
17.11.2015, 19:33  [ТС] 3
Operok, не помогло, все равно цвет не изменяется, как можно отследить, какой цвет в данный момент?
0
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
17.11.2015, 19:47 4
Немало ещё ошибок, вот рабочая оконная процедура:
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
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HDC hdc;
    HGDIOBJ old;
    BOOL bRet = FALSE;
    BOOL bCmd = FALSE;
    int wmId = LOWORD(wParam);
    int wmEvent = HIWORD(wParam);
    static CHOOSECOLOR cc;
    static DWORD rgbCurrent = NULL;
    static COLORREF acrCustClr[16];
    switch (message) {
    case WM_CREATE:
        CreateWindow("button", "choose color", WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE, 5, 5, 100, 20, hWnd, (HMENU)ID_MYBUTTON, NULL, NULL);
        ZeroMemory(&cc, sizeof(cc));
        cc.lStructSize = sizeof(cc);
        cc.hwndOwner = hWnd;
        cc.lpCustColors = (LPDWORD)acrCustClr;
        cc.rgbResult = rgbCurrent;
        cc.Flags = CC_FULLOPEN | CC_RGBINIT;
        break;
    case WM_COMMAND:
        bCmd = TRUE;
        bRet = TRUE;
        cc.rgbResult = rgbCurrent;
        if (ChooseColor(&cc) == TRUE) {
            hPen = CreatePen(PS_SOLID, 1, cc.rgbResult);
            rgbCurrent = cc.rgbResult;
        }
        break;
    case WM_LBUTTONDOWN:
        fDraw = TRUE;
        ptPrevious.x = LOWORD(lParam);
        ptPrevious.y = HIWORD(lParam);
        break;
    case WM_LBUTTONUP:
        if (fDraw) {
            hdc = GetDC(hWnd);
            old = SelectObject(hdc, hPen);
            MoveToEx(hdc, ptPrevious.x, ptPrevious.y, NULL);
            LineTo(hdc, LOWORD(lParam), HIWORD(lParam));
            SelectObject(hdc, old);
            ReleaseDC(hWnd, hdc);
            fDraw = FALSE;
        }
        break;
    case WM_MOUSEMOVE:
        if (fDraw) {
            hdc = GetDC(hWnd);
            old = SelectObject(hdc, hPen);
            MoveToEx(hdc, ptPrevious.x, ptPrevious.y, NULL);
            LineTo(hdc, ptPrevious.x = LOWORD(lParam), ptPrevious.y = HIWORD(lParam));
            SelectObject(hdc, old);
            ReleaseDC(hWnd, hdc);
        }
        break;
    case WM_DESTROY:
        if (hPen)
            DeleteObject(hPen);
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}
0
0 / 0 / 0
Регистрация: 04.11.2013
Сообщений: 18
17.11.2015, 19:52  [ТС] 5
Operok, Спасибо огромное,пойду разбираться.
0
17.11.2015, 19:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.11.2015, 19:52
Помогаю со студенческими работами здесь

Почему при использовании SetConsoleTextAttribute меняется цвет всей консоли?
Когда использую функцию SetConsoleTextAttribute для того что бы задать цвет текста который печатаю,...

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

Не меняется цвет!
Здравствуйте! Есть Базой класс Shape, через который устанавливается цвет фигуры. Классы Circle и...

Не меняется цвет
Люди, не понимаю почему не работает код как надо, а надо чтобы по нажатию Enter загорался красный...


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

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