Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
 Аватар для andreyananas
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880

Текст и кнопки в основном окне

19.10.2014, 06:36. Показов 3424. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот часть проблемного кода:
C++
1
2
3
4
5
6
7
8
9
10
11
12
    case WM_CREATE:
    {
        RECT rc;
        GetClientRect(hWnd, &rc);
        int indent(15), horizon(130);
        CreateWindow(L"COMBOBOX", L"COMBO_DISK", WS_CHILD | WS_VISIBLE | LBS_STANDARD, 50, 50, 50, 90, hWnd, (HMENU)IDC__MY_CB1, hInst, 0);
        CreateWindow(L"BUTTON", L"Delete", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 380, 50, 50, 22, hWnd, (HMENU)IDC__MY_BTN, hInst, 0);
        CreateWindow(L"LISTBOX", L"LIST1", WS_CHILD | WS_VISIBLE | WS_BORDER, indent, horizon, rc.right - indent*2, rc.bottom - horizon - indent, hWnd, (HMENU)IDC__MY_LB1, hInst, 0);
        CreateWindow(L"CHOOSE_DISK", L"Choose disk:", WS_CHILD | WS_VISIBLE | SS_LEFT, 10, 10, 200, 15, hWnd, NULL, NULL, NULL);
 
        break;
    }
1. Почему статик текст не отображается?
C++
1
CreateWindow(L"CHOOSE_DISK", L"Choose disk:", WS_CHILD | WS_VISIBLE | SS_LEFT, 10, 10, 200, 15, hWnd, NULL, NULL, NULL);
2. Вот создается кнопка Delete
C++
1
CreateWindow(L"BUTTON", L"Delete", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 380, 50, 50, 22, hWnd, (HMENU)IDC__MY_BTN, hInst, 0);
Она квадратная (ну с прямыми углами), как сделать её нормальной как в виндовсе 7 например?
________________________________________ ________________________________________ __

3. Собственно при создании диалогового окна можно "вручную" перетаскивать лист боксы, кнопки и т.д.
Почему при работе в основном окне, нужно это все "прописывать кодом"? Или я что то не знаю?

Добавлено через 28 минут
C++
1
        CreateWindow(L"STATIC", L"Choose disk:", WS_CHILD | WS_VISIBLE | SS_LEFT, 30, 30, 90, 15, hWnd, NULL, NULL, NULL);
Вот так текст вывелся на экран. Но он выводится на сером фоне. Как цвет исправить на белый?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.10.2014, 06:36
Ответы с готовыми решениями:

WM_SIZE и кнопки в диалоговом окне
Всем привет! Создаю диалоговое окно из rc-файла, начальные размеры окна и координаты кнопок заданы. Я правильно понимаю, что, если я хочу...

Нажатие кнопки в диалоговом окне
Добрый день! У меня проблема с нажатием кнопки в диалоговом окне загрузки файла а IE8. Вылазит стандартная форма с тремя кнопками Открыть,...

Дочерние кнопки в дочернем окне
Не могу понять, почему не отображаются кнопки дочернего окна в дочернем окне? Перепроверил стили класса и окна, оконные функции. Вроде...

21
Фрилансер
 Аватар для Black Fregat
3709 / 2082 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
19.10.2014, 08:29
Цитата Сообщение от andreyananas Посмотреть сообщение
Почему статик текст не отображается?
Именно класс окна (первый параметр) определяет, какой именно элемент создается.
У Static text должен быть класс "STATIC", а не тот, что Вы написали
1
 Аватар для andreyananas
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
19.10.2014, 10:53  [ТС]
Цитата Сообщение от Black Fregat Посмотреть сообщение
Именно класс окна (первый параметр) определяет, какой именно элемент создается.
У Static text должен быть класс "STATIC", а не тот, что Вы написали
Так то это я уже понял.
Ответе на второй и третий вопрос плс

Добавлено через 52 минуты
А К Т У А Л Ь Н О !

Добавлено через 1 час 0 минут
Не верится что это сложный вопрос(
0
 Аватар для Izual
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
19.10.2014, 23:57
Цитата Сообщение от andreyananas Посмотреть сообщение
как сделать её нормальной как в виндовсе 7
Это не нормальный, как раз таки, а CreateWindowEx (если мне память не изменяет), а вообще погуглили бы сами, уже давно бы нашли ответ на мсдн в теме про BUTTON
Можно и свои стили, через OwnerDraw, только это сложно.

По поводу STATIC : http://msdn.microsoft.com/en-u... 85%29.aspx
Там либо стиль какой нибудь, типа SS_WHITERECT, либо самому опять же ловить нотифи и заменять процедуру отрисовки, где можно указать background color.
0
567 / 198 / 70
Регистрация: 25.05.2012
Сообщений: 816
20.10.2014, 04:29
Цитата Сообщение от andreyananas Посмотреть сообщение
Она квадратная (ну с прямыми углами), как сделать её нормальной как в виндовсе 7 например?
Добавить манифест. Как это сделать обсуждалось уже много раз.
Изменить вид кнопок
0
 Аватар для andreyananas
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
20.10.2014, 10:28  [ТС]
Цитата Сообщение от dmitry94 Посмотреть сообщение
Добавить манифест. Как это сделать обсуждалось уже много раз.
Вот по этой инструкции написано что манифест у меня уже был добавлен((
http://msdn.microsoft.com/ru-r... 35229.aspx

Добавлено через 43 минуты
Нихера не получается(((

Добавлено через 1 час 6 минут
Цитата Сообщение от Izual Посмотреть сообщение
По поводу STATIC : http://msdn.microsoft.com/en-u... 85%29.aspx
Там либо стиль какой нибудь, типа SS_WHITERECT, либо самому опять же ловить нотифи и заменять процедуру отрисовки, где можно указать background color.
можно по подробней?
0
 Аватар для Izual
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
20.10.2014, 15:06
Цитата Сообщение от andreyananas Посмотреть сообщение
по подробней
http://msdn.microsoft.com/en-u... 85%29.aspx
0
 Аватар для andreyananas
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
20.10.2014, 15:22  [ТС]
Цитата Сообщение от Izual Посмотреть сообщение
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
Не получается, ставлю прозрачный фон, в итоге появляются черные квадраты вместо текста
0
 Аватар для Izual
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
20.10.2014, 16:26
C++
1
2
3
4
5
case WM_CREATE:
        // ...
case WM_CTLCOLORSTATIC:
        SetBkMode((HDC)wParam, TRANSPARENT);
        return (LRESULT)GetStockObject(NULL_BRUSH);
0
 Аватар для andreyananas
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
21.10.2014, 01:59  [ТС]
Цитата Сообщение от Izual Посмотреть сообщение
C++
1
2
3
4
5
case WM_CREATE:
* * * * // ...
case WM_CTLCOLORSTATIC:
* * * * SetBkMode((HDC)wParam, TRANSPARENT);
* * * * return (LRESULT)GetStockObject(NULL_BRUSH);
Так и делал

Добавлено через 2 часа 29 минут
хелп))) Жду ваших соображений...
0
 Аватар для Izual
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
21.10.2014, 14:20
Цитата Сообщение от andreyananas Посмотреть сообщение
Так и делал
У меня работает...
0
 Аватар для andreyananas
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
21.10.2014, 15:20  [ТС]
Цитата Сообщение от Izual Посмотреть сообщение
У меня работает...
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
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
    static HWND hComboDisk, hListFiles;
    static list<wstring> ListPath;
 
    switch (message)
    {
    case WM_CREATE:
    {
        RECT rc;
        GetClientRect(hWnd, &rc);
        int indent(15), horizon(130);
        hComboDisk = CreateWindow(L"COMBOBOX", L"COMBO_DISK", WS_CHILD | WS_VISIBLE | LBS_STANDARD, 50, 50, 50, 90, hWnd, (HMENU)IDC_MY_CB1, hInst, 0);
        hListFiles = CreateWindow(L"LISTBOX", L"LIST1", WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL, indent, horizon, rc.right - indent * 2, rc.bottom - horizon - indent, hWnd, (HMENU)IDC_MY_LB1, hInst, 0);
        CreateWindow(L"BUTTON", L"Delete", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 380, 50, 50, 22, hWnd, (HMENU)IDC_MY_BTN, hInst, 0);
        CreateWindow(L"STATIC", L"Choose disk:", WS_CHILD | WS_VISIBLE | SS_SIMPLE, 30, 30, 90, 15, hWnd, NULL, hInst, 0);
        CreateWindow(L"STATIC", L"Files to delete:", WS_CHILD | WS_VISIBLE | SS_SIMPLE, indent, horizon - 20, 120, 15, hWnd, (HMENU)IDC_MYSTAT1, hInst, 0);
 
#define DRIVES_BUFF_LENGTH 120
        wchar_t sDrives[DRIVES_BUFF_LENGTH], *pStr;
        GetLogicalDriveStrings(DRIVES_BUFF_LENGTH, sDrives); // достаем имена дисков
        // A:\\0C:\\0\0
        {
            pStr = sDrives; // устанавливаем указатель на строку дисков (имена)
            int iDid(0), iId(0);
            wchar_t * pD = L"D:\\";
            while (*pStr != 0) // пока не указывает на ноль
            {
                SendMessage(hComboDisk, CB_ADDSTRING, 0, (LPARAM)pStr); // добавляет строку в лист-бокс комбо-бокса
                if (pStr[0] == 'D') // если указывает на диск D
                {
                    // must be check, if the drive has any files
                    FillFoldersListBox(pD, hListFiles, &ListPath); // заполняем папками листбокс
                    iDid = iId; // сохраняем индекс D диска
                }
                ++iId; // увеличуем индекс дисков
                pStr += 4; // смещаемся на 4 позиции строки
            }
            SendMessage(hComboDisk, CB_SETCURSEL, iDid, 0); // выставить текущее выдиление, указывает индекс строки которую нужно выделить (D)
        }
        break;
    }
    //case WM_CTLCOLORSTATIC:
    //    SetBkColor((HDC)wParam, TRANSPARENT);
    //    return (LRESULT)GetSysColorBrush(COLOR_WINDOW);
    case WM_COMMAND:
        wmId = LOWORD(wParam);
        wmEvent = HIWORD(wParam);
        // Parse the menu selections:
        switch (wmId)
        {
        case IDC_MY_CB1:
            switch (wmEvent)
            {
            case CBN_SELCHANGE: // комбобокс нотиф (посылает сообщение, когда пользователь что то изменяет в листе комбобокса) 
                int iId;
                wchar_t sDLetter[5];
                iId = SendMessage(hComboDisk, CB_GETCURSEL, 0, 0); // получаем индекс текущего элемента
                if (iId != CB_ERR)
                {
                    SendMessage(hComboDisk, CB_GETLBTEXT, iId, (LPARAM)sDLetter); // получаем строку из комбобокса
                    SendMessage(hListFiles, LB_RESETCONTENT, 0, 0); // удаляем предедущий список
                    FillFoldersListBox(sDLetter, hListFiles, &ListPath);
                }
                break;
            }
            break;
        case IDC_MY_BTN:
            DeleteFolders(&ListPath);
            break;
        case IDM_EXIT:
            DestroyWindow(hWnd);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
        break;
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        // TODO: Add any drawing code here...
        EndPaint(hWnd, &ps);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}
Вот моя оконная процедура. Можешь отредактировать что бы было все норм видно?
0
 Аватар для Izual
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
21.10.2014, 16:46
Цитата Сообщение от andreyananas Посмотреть сообщение
было все норм
1: разкоментируй case WM_CTLCOLORSTATIC:
2: дай hwnd статик окнам.
в остальном вроде всё так же.
0
 Аватар для andreyananas
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
21.10.2014, 17:51  [ТС]
Цитата Сообщение от Izual Посмотреть сообщение
2: дай hwnd статик окнам.
А зачем он нужен?
0
 Аватар для Izual
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
22.10.2014, 03:13
Цитата Сообщение от andreyananas Посмотреть сообщение
А зачем он нужен?
Да, не в этом дело.. Тогда не знаю, у меня так же в общем на чистом проэкте.

Добавлено через 8 минут
C++
1
2
SetBkColor((HDC)wParam, TRANSPARENT);
    return (LRESULT)GetSysColorBrush(COLOR_WINDOW);
Я надеюсь это тоже разкоментировал?)
0
 Аватар для andreyananas
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
22.10.2014, 04:52  [ТС]
Цитата Сообщение от Izual Посмотреть сообщение
Я надеюсь это тоже разкоментировал?)
Я это же и писал, оно не работает(

Добавлено через 33 секунды
там где тексты на корявом фоне, появляются черные квадраты
0
 Аватар для Izual
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
22.10.2014, 05:53
Цитата Сообщение от andreyananas Посмотреть сообщение
Так и делал
Нет ты не так делал.
C++
1
2
3
case WM_CTLCOLORSTATIC:
        SetBkMode((HDC)wParam, TRANSPARENT);
        return (LRESULT)GetStockObject(NULL_BRUSH);
Ты зачем кисть выбрал COLOR_WINDOW ?
0
 Аватар для andreyananas
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
22.10.2014, 07:32  [ТС]
Цитата Сообщение от Izual Посмотреть сообщение
Ты зачем кисть выбрал COLOR_WINDOW ?
Та я и так и так писал
0
 Аватар для Izual
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
22.10.2014, 17:15
andreyananas, так слушай, хватит мне мозги пудрить.
Создал новый проэкт с дефалтными настройками.
Добавил:
C++
1
2
3
4
5
6
case WM_CREATE:
        CreateWindow(TEXT("STATIC"), TEXT("TextExample"), WS_CHILD | WS_VISIBLE | SS_LEFT, 200, 5, 100, 20, hWnd, NULL, hInst, NULL);
        break;
    case WM_CTLCOLORSTATIC:
        SetBkMode((HDC)wParam, TRANSPARENT);
        return (LRESULT)GetStockObject(NULL_BRUSH);
И всё работает, background после CTLCOLORSTATIC становится прозрачным/белым. VS2005.
0
 Аватар для andreyananas
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
23.10.2014, 19:29  [ТС]
Неа не работает. VS2013
Что в настройках может быть не так?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.10.2014, 19:29
Помогаю со студенческими работами здесь

Размещение кнопки на STATIC окне
При определенном событии главное окно &quot;скрывается&quot; и создается окно класса Static. .... // Прячем главное окно ...

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

Можно ли рисовать в окне нажатием кнопки?
Попытался осуществить таким образом: case WM_COMMAND: { switch(LOWORD(wParam)) { case...

Текст в окне
Мне уже ТЕПЕРЬ надо сделать кнопку, окно с информацией, что ты на нее нажал, и текст, который будет появлятся при нажатии на кнопку. Куда...

Отслеживание нажатия моей кнопки в чужом окне
Доброго времени суток прошу вашей помощи в некой задаче Вобщем есть приложение через которое я запускаю другое приложение получая его...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
YAFU@home — распределённые вычисления для математики. На CPU
Programma_Boinc 20.01.2026
YAFU@home — распределённые вычисления для математики. На CPU YAFU@home — это BOINC-проект, который занимается факторизацией больших чисел и исследованием aliquot-последовательностей. Звучит. . .
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
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. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru