Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/55: Рейтинг темы: голосов - 55, средняя оценка - 4.64
 Аватар для артист
50 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,611

Цвет фона и текста в EDIT не меняется

06.12.2016, 13:55. Показов 10708. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message)
    {
        case WM_CREATE:
        {
            hE[0] = CreateWindowExW(WS_EX_STATICEDGE, WC_STATIC, NULL, WS_CHILD | WS_VISIBLE | WS_DLGFRAME | ES_NUMBER | ES_RIGHT, 10, 10, 463, 80, hWnd, NULL, hInst, NULL);
            break;
        }
        case WM_CTLCOLOREDIT:
        {
            if(hE[0] == (HWND)lParam) // меняем цвета для конкретного эдита
            {
                HDC hdc = (HDC) wParam;
                //SetTextColor(hdc, RGB(255, 10, 10));
                SetBkColor(hdc, RGB(131, 135, 120));
                return 0;
            }
            break;
        }
    }
    return 0;
}
Что тут не так?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.12.2016, 13:55
Ответы с готовыми решениями:

Цвет фона, цвет текста в определённом EDIT и шрифт
Сначала опишу чего добиваюсь: Для всех(кроме 1го, заблокированного от ввода) сделать текст текста серым. У заблокированного EDIT'а...

Как поменять цвет фона кнопки и цвет текста на кнопке?
имеется код: //Кнопка "Выход" CreateWindow(TEXT("button"), TEXT("Выход"), WS_CHILD|WS_VISIBLE|BS_OWNERDRAW, 170, 180, 120, 30, hWnd,...

Как изменить цвет фона в Edit
Здравствуйте! Подскажите, пожалуйста, как изменить цвет фона у Edit? Заранее благодарен!

16
116 / 106 / 51
Регистрация: 29.03.2016
Сообщений: 480
06.12.2016, 14:13
Лучший ответ Сообщение было отмечено артист как решение

Решение

может по аналогии со static:
C++
1
2
3
4
5
6
7
8
9
case WM_CTLCOLORSTATIC:                         // прорисовка окон класса static
    if( (HWND)lparam == GetDlgItem(hwnd, ID_LABEL)) // если в качестве параметра функция получила идентификатор ID_LABEL (типа int) окна класса static
    {
        SetBkMode((HDC) wparam, TRANSPARENT);       // наследуем цвет фона нашего ТЕКСТА от родительского (нижележащего), судя по всему, от цвета фона контекста окна класса static
        SetTextColor((HDC)wparam, RGB(0,0,255));            // устанавливаем цвет текста (в данном случае синий) в контекст нашего окна класса static (событие которого сейчас обрабатываем)
        return (INT_PTR)GetStockObject(NULL_BRUSH); // возвращаем окну класса static предопределенный тип (NULL_BRUSH), который соответствует прозрачному фону
                                  // в итоге имеем три цветовых слоя из которого состоит окно класса static: верхний (текст без фона), средний (фон текста), нижний (фон окна static)
    }
break;
1
 Аватар для артист
50 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,611
06.12.2016, 14:38  [ТС]
C
C++
1
SetBkMode((HDC) wParam, TRANSPARENT);
текст накладывается друг на друга, и не меняется фон.
А без него нормально, но фон только там, где есть текст.



Это здесь нужно создать свой браш?
C++
1
return (INT_PTR)GetStockObject(NULL_BRUSH)
0
 Аватар для артист
50 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,611
07.12.2016, 04:26  [ТС]
Как можно убрать рамку вокруг поля?
0
 Аватар для артист
50 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,611
09.12.2016, 06:11  [ТС]
Нельзя?
Блин как бесит это идиотское окно ввода, неужели по нормальному нельзя сделать...
0
116 / 106 / 51
Регистрация: 29.03.2016
Сообщений: 480
09.12.2016, 07:30
Лучший ответ Сообщение было отмечено артист как решение

Решение

при создании не указывайте WS_BORDER
C++
1
2
3
4
5
6
7
8
9
10
11
12
htxt1 = CreateWindowEx(0, 
              "edit",
              "", 
              WS_CHILD | WS_VISIBLE, // без WS_BORDER
              110, 
              10, 
              90, 
              25, 
              hwndg, 
              (HMENU)ID_TEXTEDIT1, 
              (HINSTANCE) GetWindowLong(hwndg, GWL_HINSTANCE), 
              NULL);
и по предыдущему вопросу если что:
C++
1
2
3
4
5
6
7
case WM_CTLCOLOREDIT:
    if((HWND)lparam == GetDlgItem(hwnd, ID_TEXTEDIT1))
    {
        SetBkMode((HDC) wparam, TRANSPARENT);
        return (INT_PTR)GetStockObject(GRAY_BRUSH);
    }
break;
но там вы все сделали, как я понял
1
 Аватар для артист
50 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,611
10.12.2016, 03:34  [ТС]
О, получилось ))
Сделал фон букв прозрачным, сам объект тоже, нарисовал под ним квадрат.
И блин теперь буквы накладываются, у меня уже было такое, но только с ES_MULTILINE в edit, из-за SetBkMode с TRANSPARENT.
Устанавливаю текст через SetWindowText...



C++
1
2
3
4
5
6
7
8
9
10
11
12
13
hEdit = CreateWindowEx(WS_EX_TRANSPARENT, WC_STATIC, NULL, WS_CHILD | WS_VISIBLE | ES_RIGHT, 7, -15, 455, 110, hWnd, NULL, hInst, NULL);
 
//////////////////
 
case WM_CTLCOLORSTATIC:
{
    if(hEdit == (HWND)lParam)
    {
        SetBkMode((HDC) wParam, TRANSPARENT);
        return (INT_PTR)GetStockObject(NULL_BRUSH);
        }
    break;
}
Из-за чего это может быть?
0
116 / 106 / 51
Регистрация: 29.03.2016
Сообщений: 480
10.12.2016, 09:53
Лучший ответ Сообщение было отмечено артист как решение

Решение

просто при каждом вводе в поле не происходит перерисовывания (если уберете окно за пределы экрана, то отобразится нормально)
попробуйте отлавливать каждый ввод в поле и делать
C++
1
2
EnableWindow(hEdit, FALSE);
EnableWindow(hEdit, TRUE);
ну или в том же WM_CTLCOLOREDIT
1
 Аватар для артист
50 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,611
10.12.2016, 17:22  [ТС]
Не помогло. Ставил и перед, и после изменения окна.

Пробовал ещё:
UpdateWindow(hEdit);
InvalidateRect(hEdit, NULL, TRUE);
InvalidateRect(hEdit, NULL, FALSE);
InvalidateRect(NULL, NULL, TRUE);
InvalidateRect(NULL, NULL, FALSE);

Ещё нашел RedrawWindow, но не понял толком, что она делает...

Добавлено через 5 минут
Когда в WM_CTLCOLORSTATIC возвращается 0, а не GetStockObject(NULL_BRUSH) - то всё нормально отрисовывается(ну и фон окна конечно просто белый)...
Без SetBkMode(hdc, TRANSPARENT) тоже отрисовывается, но у символов фон белый...
0
116 / 106 / 51
Регистрация: 29.03.2016
Сообщений: 480
10.12.2016, 21:05
Цитата Сообщение от Serg_o_Grey Посмотреть сообщение
C++
1
2
EnableWindow(hEdit, FALSE);
EnableWindow(hEdit, TRUE);
чет там я фигню написал какую-то
в общем тут наверное стоит записывать в буфер текст который в edit
C++
1
GetWindowTextA(hEdit, str, 20);
и после ввода очередного символа делать
C++
1
SetWindowText(hEdit, str);
с уже добавленным/удаленным символом

а для этого придется делать обработчик ввода и осваивать callback функции
что-то типа этого:
Кликните здесь для просмотра всего текста
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
LRESULT CALLBACK Edit1Proc(HWND hwnd, UINT Message, WPARAM wparam, LPARAM lparam)
{
    switch(Message)
    {
        case WM_KEYUP:
            memset(str, 0, sizeof(str));
            GetWindowTextA(htxt1, str, 20);
            len = 0; while(true) {if (str[len] != 0) len++; else break;}
            if (len == 1)
            {
                if (!(((wparam > 48) && (wparam < 58)) || (wparam == 8)))
                {
                    if  (!((wparam < 32) || (wparam > 126)));
                    {
                        str[len-1] = 0;
                        SetWindowText(htxt1, str);
                        
                    }
                    len = 0; while(true) {if (str[len] != 0) len++; else break;}
                    SendMessage(htxt1, EM_SETSEL, (WPARAM)len, (LPARAM)len);
                }
            }
            else
            {
                if (len > 1)
                {
                    if (!(((wparam > 47) && (wparam < 58)) || (wparam == 8)))
                    {
                        if  (!((wparam < 32) || (wparam > 126)))
                        {
                            str[len-1] = 0;
                            SetWindowText(htxt1, str);
                        }
                        len = 0; while(true) {if (str[len] != 0) len++; else break;}
                        SendMessage(htxt1, EM_SETSEL, (WPARAM)len, (LPARAM)len);
                    }
                }
                if (len > 2)
                {
                    if (LPCSTRToInt(str) > 500) SetWindowTextA(htxt1, "500");
                    len = 3;
                    SendMessage(htxt1, EM_SETSEL, (WPARAM)len, (LPARAM)len);
                }
                
            }
            len = 0; while(true) {if (str[len] != 0) len++; else break;}
            if (len > 0) 
            {
                flag_txt1 = true;
            }
            else flag_txt1 = false;
            if ((flag_txt1 == true) && (flag_txt2 == true)) EnableWindow(hbtn1, TRUE);
            else EnableWindow(hbtn1, FALSE);
            return 0;
        break;
    }
    return((LRESULT)CallWindowProc((WNDPROC)DefEdit1Proc, hwnd, Message, wparam, lparam));
}


Пример: 2 окна в одном приложении
там как раз такой обработчик реализован
1
 Аватар для артист
50 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,611
10.12.2016, 22:00  [ТС]
У меня поле не редактируется с клавиатуры ))
Это типа экрана калькулятора.
Все с окном и делаю через SetWindowText.

Вот полный код "программы":

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
#include "stdafx.h"
#include "Turns Counter.h"
#include <windowsx.h>
#include <string>
#include <commdlg.h>
#include <commctrl.h>
#include <mmsystem.h>
 
#pragma comment(linker, "/manifestdependency:"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'"")
 
#define MAX_LOADSTRING 100
 
HINSTANCE hInst;
TCHAR szTitle[MAX_LOADSTRING];
TCHAR szWindowClass[MAX_LOADSTRING];
 
ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
HFONT hFont;
HFONT hFont1;
HFONT hFont2;
HBRUSH hBrush;
HBRUSH hBrush1;
HWND hE[7];
INT count = 0;
BOOL score_type = false;
 
int APIENTRY _tWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPTSTR  lpCmdLine, _In_ int   nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);
 
    MSG msg;
    HACCEL hAccelTable;
 
    LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadString(hInstance, IDC_TURNSCOUNTER, szWindowClass, MAX_LOADSTRING);
    MyRegisterClass(hInstance);
 
    if(!InitInstance (hInstance, nCmdShow)) return FALSE;
 
    hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_TURNSCOUNTER));
 
    while(GetMessage(&msg, NULL, 0, 0))
    {
        if(TranslateAccelerator(msg.hwnd, hAccelTable, &msg) != 0) continue;
 
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return (int)msg.wParam;
}
ATOM MyRegisterClass(HINSTANCE hInstance)
{
    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_TURNSCOUNTER));
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW + 1);
    wcex.lpszMenuName   = MAKEINTRESOURCE(IDC_TURNSCOUNTER);
    wcex.lpszClassName  = szWindowClass;
    wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
 
    return RegisterClassEx(&wcex);
}
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
    hInst = hInstance;
 
    hBrush = CreateSolidBrush(RGB(180, 180, 180));
    hBrush1 = CreateSolidBrush(RGB(103, 107, 95));
    //AddFontResource(L"Digiface");
 
    hFont = CreateFontW(16, 0, 0, 0, FW_DONTCARE, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, L"Arial");
 
    RECT resolut; GetWindowRect(GetDesktopWindow(), &resolut);
 
    int x = (resolut.right - 492) / 2;
    int y = (resolut.bottom - 170) / 2;
 
    HWND hWnd = CreateWindowExW(NULL, szWindowClass, szTitle, WS_SYSMENU, x, y, 492, 170, NULL, NULL, hInstance, NULL);
    if(!hWnd) return FALSE;
 
    SendMessageW(hWnd, WM_SETFONT, WPARAM(hFont), TRUE);
 
    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);
 
    return TRUE;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message)
    {
        case WM_CREATE:
        {
            hFont1 = CreateFontW(124, 0, 0, 0, FW_DONTCARE, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, L"Digiface");
            hFont2 = CreateFontW(17, 0, 0, FW_BOLD, FW_DONTCARE, TRUE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, L"Arial");
 
            hE[0] = CreateWindowEx(WS_EX_TRANSPARENT, WC_STATIC, NULL, WS_CHILD | WS_VISIBLE | ES_RIGHT, 7, -15, 455, 110, hWnd, NULL, hInst, NULL);
            hE[1] = CreateWindowEx(WS_EX_CLIENTEDGE, WC_EDIT, NULL, WS_CHILD | WS_VISIBLE | ES_NUMBER | ES_RIGHT, 10, 100, 88, 20, hWnd, NULL, hInst, NULL);
            hE[2] = CreateWindowEx(WS_EX_WINDOWEDGE, WC_BUTTON, L"Установить", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 103, 100, 104, 20, hWnd, (HMENU)1, hInst, NULL);
            hE[3] = CreateWindowEx(WS_EX_WINDOWEDGE, WC_BUTTON, L"Сброс", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 214, 100, 70, 20, hWnd, (HMENU)2, hInst, NULL);
            hE[4] = CreateWindowEx(WS_EX_WINDOWEDGE, WC_BUTTON, L"Прибавлять", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 291, 100, 100, 20, hWnd, (HMENU)3, hInst, NULL);
            hE[5] = CreateWindowEx(WS_EX_WINDOWEDGE, WC_BUTTON, L"-1", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 398, 100, 30, 20, hWnd, (HMENU)4, hInst, NULL);
            hE[6] = CreateWindowEx(WS_EX_WINDOWEDGE, WC_BUTTON, L"+1", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 435, 100, 30, 20, hWnd, (HMENU)5, hInst, NULL);
 
            SendMessage(hE[0], WM_SETFONT, WPARAM (hFont1), TRUE);
            SendMessage(hE[1], WM_SETFONT, WPARAM (hFont2), TRUE);
            SendMessage(hE[2], WM_SETFONT, WPARAM (hFont2), TRUE);
            SendMessage(hE[3], WM_SETFONT, WPARAM (hFont2), TRUE);
            SendMessage(hE[4], WM_SETFONT, WPARAM (hFont2), TRUE);
            SendMessage(hE[5], WM_SETFONT, WPARAM (hFont2), TRUE);
            SendMessage(hE[6], WM_SETFONT, WPARAM (hFont2), TRUE);
 
            SetWindowTextA(hE[0], "0");
            break;
        }
        case WM_COMMAND:
        {
            switch(LOWORD(wParam))
            {
                case 1:
                {
                    if(GetWindowTextLengthW(hE[1]) < 1) break;
                    CHAR buffer[11]; GetWindowTextA(hE[1], buffer, sizeof(buffer));
                    SetWindowTextA(hE[0], buffer);
                    SetWindowTextA(hE[1], "");
                    count = atoi(buffer);
 
                    break;
                }
                case 2:
                {
                    count = 0;
                    SetWindowTextA(hE[0], "0");
                    break;
                }
                case 3:
                {
                    if((score_type = !score_type)) SetWindowTextA(hE[4], "Отнимать");
                    else SetWindowTextA(hE[4], "Прибавлять");
                    break;
                }
                case 4:
                {
                    count--;
                    char buffer[13]; _itoa_s(count, buffer, 10);
                    SetWindowTextA(hE[0], buffer);
                    break;
                }
                case 5:
                {
                    count++;
                    char buffer[13]; _itoa_s(count, buffer, 10);
                    SetWindowTextA(hE[0], buffer);
                    break;
                }
                default: return DefWindowProcW(hWnd, message, wParam, lParam);
            }
            break;
        }
        case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hWnd, &ps);
            RECT r; r.left = 0;  r.right = 492; r.top = 0; r.bottom = 170; 
            FillRect(hdc, &r, hBrush);
            r.left = 10; r.right = 465; r.top = 10; r.bottom = 91;
            FillRect(hdc, &r, hBrush1);
            EndPaint(hWnd, &ps);
            break;
        }
        case WM_CTLCOLORSTATIC:
        {
            if(hE[0] == (HWND)lParam)
            {
                HDC hdc = (HDC)wParam;
                SetBkMode(hdc, TRANSPARENT);
                return (INT_PTR)GetStockObject(NULL_BRUSH);
            }
            break;
        }
        case WM_DESTROY:
        {
            DeleteObject(hBrush);
            DeleteObject(hBrush1);
            DeleteObject(hFont);
            DeleteObject(hFont1);
            DeleteObject(hFont2);
            PostQuitMessage(0);
            break;
        }
        default: return DefWindowProcW(hWnd, message, wParam, lParam);
    }
    return 0;
}
0
116 / 106 / 51
Регистрация: 29.03.2016
Сообщений: 480
11.12.2016, 09:58
тогда так
C++
1
2
3
4
5
6
7
8
9
10
11
12
case 1:
{
    if(GetWindowTextLength(hE[1]) < 1) break;
    CHAR buffer[11]; 
    GetWindowText(hE[1], buffer, sizeof(buffer));
    SetWindowText(hE[0], buffer);
    ShowWindow(hE[0],FALSE);
    ShowWindow(hE[0],TRUE);
    SetWindowText(hE[1], "");
    count = atoi(buffer);
    break;
}
1
 Аватар для артист
50 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,611
11.12.2016, 10:39  [ТС]
Ааа, блин, я местами перепутал, когда пробовал. ))
Спасибо, заработало. ))

Добавлено через 28 минут
Когда часто (3-5 раз в секунду) меняется текст - проскакивает белый фон текста...
А нет ли какого способа просто рисовать текст на окне программы?
С учетом того, что текст выравнивается по правому краю...
0
116 / 106 / 51
Регистрация: 29.03.2016
Сообщений: 480
11.12.2016, 12:50
у меня белый фон не проскакивает
если компилируете в режиме debug то может наблюдаться замедление в работе, но а белому фону все-рано взяться неоткуда

Добавлено через 10 минут
можно порекомендовать установить цвет фона окна сл.образом
wcex.hbrBackground = (HBRUSH)CreateSolidBrush(RGB(180, 180, 180));
вместо FillRect

ну и
C++
1
2
3
4
5
6
7
8
9
case WM_CTLCOLORSTATIC:
{
    if(hE[0] == (HWND)lParam)
    {
        SetBkMode( (HDC)wParam, TRANSPARENT);
        return (INT_PTR)GetStockObject(GRAY_BRUSH);
    }
    break;
}
и убрать вообще WM_PAINT


и на будущее можно делать так
C++
1
2
3
4
5
6
7
8
9
10
11
case WM_CTLCOLORSTATIC:
{
    if(hE[0] == (HWND)lParam)
    {
        HDC hDC = (HDC)wParam;
        SetBkMode(hDC, TRANSPARENT);
        return (INT_PTR)CreateSolidBrush(RGB(250, 0, 0));   // подставляем любой цвет
        // или так (INT_PTR)hBrush1;
    }
    break;
}
1
 Аватар для артист
50 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,611
11.12.2016, 17:21  [ТС]
Цитата Сообщение от Serg_o_Grey Посмотреть сообщение
в режиме debug то может наблюдаться замедление в работе
Спасибо, не знал )))

Цитата Сообщение от Serg_o_Grey Посмотреть сообщение
можно порекомендовать установить цвет фона окна
Да если бы окно нормально работало, то и проблем бы не было ))
У меня в самом окне ввода текст не выравнивается по вертикали, а съезжает вниз.
Вернее выравнивается, но когда шрифт мелкий.
А с увеличением шрифта, растёт и отступ от верха, у меня окно ввода сейчас находится за пределами окна программы:

7, -15, 455, 110. При размере шрифта в 124.
0
116 / 106 / 51
Регистрация: 29.03.2016
Сообщений: 480
11.12.2016, 19:03
Цитата Сообщение от артист Посмотреть сообщение
Да если бы окно нормально работало, то и проблем бы не было ))
У меня в самом окне ввода текст не выравнивается по вертикали, а съезжает вниз.
Вернее выравнивается, но когда шрифт мелкий.
ну с этим проблем нет. используйте стиль SS_CENTERIMAGE для static

Добавлено через 2 минуты
ну и посмотрите какие еще фишки есть. из winuser.h:
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
#define SS_LEFT __MSABI_LONG(0x00000000)
#define SS_CENTER __MSABI_LONG(0x00000001)
#define SS_RIGHT __MSABI_LONG(0x00000002)
#define SS_ICON __MSABI_LONG(0x00000003)
#define SS_BLACKRECT __MSABI_LONG(0x00000004)
#define SS_GRAYRECT __MSABI_LONG(0x00000005)
#define SS_WHITERECT __MSABI_LONG(0x00000006)
#define SS_BLACKFRAME __MSABI_LONG(0x00000007)
#define SS_GRAYFRAME __MSABI_LONG(0x00000008)
#define SS_WHITEFRAME __MSABI_LONG(0x00000009)
#define SS_USERITEM __MSABI_LONG(0x0000000A)
#define SS_SIMPLE __MSABI_LONG(0x0000000B)
#define SS_LEFTNOWORDWRAP __MSABI_LONG(0x0000000C)
#define SS_OWNERDRAW __MSABI_LONG(0x0000000D)
#define SS_BITMAP __MSABI_LONG(0x0000000E)
#define SS_ENHMETAFILE __MSABI_LONG(0x0000000F)
#define SS_ETCHEDHORZ __MSABI_LONG(0x00000010)
#define SS_ETCHEDVERT __MSABI_LONG(0x00000011)
#define SS_ETCHEDFRAME __MSABI_LONG(0x00000012)
#define SS_TYPEMASK __MSABI_LONG(0x0000001F)
#define SS_REALSIZECONTROL __MSABI_LONG(0x00000040)
#define SS_NOPREFIX __MSABI_LONG(0x00000080)
#define SS_NOTIFY __MSABI_LONG(0x00000100)
#define SS_CENTERIMAGE __MSABI_LONG(0x00000200)
#define SS_RIGHTJUST __MSABI_LONG(0x00000400)
#define SS_REALSIZEIMAGE __MSABI_LONG(0x00000800)
#define SS_SUNKEN __MSABI_LONG(0x00001000)
#define SS_EDITCONTROL __MSABI_LONG(0x00002000)
#define SS_ENDELLIPSIS __MSABI_LONG(0x00004000)
#define SS_PATHELLIPSIS __MSABI_LONG(0x00008000)
#define SS_WORDELLIPSIS __MSABI_LONG(0x0000C000)
#define SS_ELLIPSISMASK __MSABI_LONG(0x0000C000)
Добавлено через 5 минут
Цитата Сообщение от Serg_o_Grey Посмотреть сообщение
можно порекомендовать установить цвет фона окна сл.образом
wcex.hbrBackground = (HBRUSH)CreateSolidBrush(RGB(180, 180, 180));
это относилось к стилю окна программы
WM_PAINT не рекомендуется использовать по пустякам
1
 Аватар для артист
50 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,611
11.12.2016, 22:52  [ТС]
Спасибо, всё, теперь всё идеально. ))
Это ещё и сам шрифт косячный был...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.12.2016, 22:52
Помогаю со студенческими работами здесь

Цвет текста и фона ListBox
Господа пытаюсь изменить таким образом,но не получается,как это сделать?Просьба в нет не посылать т.к. не чего особо не понял,вот,что я...

ComboBox - Как поменять цвет фона и текста?
На msdn никаких сообщений не указанно для этих целей (в отличии от других контролов).

Цвет текста в Edit
Есть Edit с WS_DISABLED как мне изменить цвет текста пробывал case WM_CTLCOLOREDIT: SetTextColor((HDC)wParam,RGB(120,128,220)); ...

Check Box - как поменять цвет фона или текста?
Приветствую уважаемые гуру. Подскажите как в обычном чекбоксе (выполненом в виде кнопки pushlike) поменять цвет фона или текста? ...

Как при вводе текста в один Edit загружать те же символы во второй Edit?
помогите есть 2 mdi окна в них эдиты. как при вводе текста в 1 эдит загружать теже символы во второй эдит? как хотя бы получить информацию...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru