Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.68/19: Рейтинг темы: голосов - 19, средняя оценка - 4.68
 Аватар для MuslimPalit
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508

Разработать меню состояния для окна

13.10.2016, 20:10. Показов 3820. Ответов 27
Метки нет (Все метки)

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

Как называется функция для получения текущего состояния окна?
Как называется функция для получения текущего состояния окна? По сути дела она является обратной к ShowWindow Добавлено через 13 минут...

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

Меню для мониторинга состояния объектов
Друзья, Товарищи!!! Здравствуйте. Никак не определюсь, подскажите-покажите:) Имеется xml файл, допустим его узлы это текущее состояние...

27
 Аватар для casper007
71 / 71 / 58
Регистрация: 12.12.2013
Сообщений: 420
13.10.2016, 20:43
Наработка уже есть?
0
 Аватар для MuslimPalit
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508
13.10.2016, 23:13  [ТС]
casper007, ммм, вообще ничего нет! Я только приступил к изучению, но задание надо выполнить. В меню можно задать изменение стиля, размера, цвета, ну не особо усложнять. Целью стоит ознакомление с инструментарием который позволяет это делать. Знания в создании окон, кнопок, меню и т.д. присутствуют. Только с совместным их использованием проблема. WinAPI нагрянул неожиданно, вообще на него времени нет, занимаюсь изучением других инструментов и языков в том числе (ассемблер, хаскел и т.п.), аж бывает на ЭВМ симуляторе регистры заполняю - по учебе достают, вот и лезу туда сюда и нигде не успею. То что WinAPI не трудно понимаю, но слишком много читать, эксеперементировать, константы запоминать, да и не думаю что программировать в будущем придется на WinAPI.

Добавлено через 43 минуты
casper007, идеи есть?

Добавлено через 20 секунд
casper007, идеи есть?

Добавлено через 2 минуты
Меню для главного окна, могу создать еще одно окно, но как организовать связь?
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
#include <windows.h>
#include <CommCtrl.h>
 
#pragma comment(lib, "ComCtl32.lib")
 
TCHAR czClassName[] = L"myClass";
TCHAR czFormName[] = L"Это мое окно";
HWND hwndA;
 
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message)
    {
    case WM_DESTROY: PostQuitMessage(0); break;
 
    default: return DefWindowProc(hwnd, message, wParam, lParam); break;
    }
}
 
ATOM myRegistryClass(HINSTANCE hInst, int cmdMode)
    {
        WNDCLASS cw;
 
        cw.style = CS_VREDRAW | CS_HREDRAW;
        cw.cbClsExtra = 0;
        cw.cbWndExtra = 0;
        cw.hbrBackground = (HBRUSH)(COLOR_WINDOW +2);
        cw.hCursor = LoadCursor(NULL, IDC_ARROW);
        cw.hIcon = LoadIcon(NULL, IDI_APPLICATION);
        cw.hInstance = hInst;
        cw.lpfnWndProc = WndProc;
        cw.lpszClassName = czClassName;
        cw.lpszMenuName = NULL;
 
        RegisterClass(&cw);
        
        return 0;
    }
 
 
    BOOL InitInstance(HINSTANCE hInst, int Mode)
    {
 
        
        hwndA = CreateWindow(
            czClassName, 
            czFormName,
            WS_OVERLAPPEDWINDOW,
            CW_USEDEFAULT, 
            CW_USEDEFAULT,
            CW_USEDEFAULT,
            CW_USEDEFAULT,
            NULL,
            NULL,
            hInst,
            NULL);
        
        ShowWindow(hwndA, Mode);
        UpdateWindow(hwndA);
 
        return TRUE;
    }
 
 
/*Главная функция*/
int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR IpszCmdParam, int cmdShow)
{
    MSG msg;
 
    myRegistryClass(hInst, cmdShow);
    InitInstance(hInst, cmdShow);
 
    InitCommonControls();
 
    /*Создание строки состояния*/
    HWND hStatusWindow = CreateStatusWindow (WS_CHILD | WS_VISIBLE, L"", hwndA, 5000); 
 
    HMENU hmenu1;
    hmenu1 = CreateMenu();
 
    AppendMenu(hmenu1, MF_STRING, 0, L"&File"); 
    AppendMenu(hmenu1, MF_STRING, 0, L"&Edit"); 
    AppendMenu(hmenu1, MF_STRING, 0, L"&Help"); 
 
    SetMenu(hwndA, hmenu1);
 
 
    while (GetMessage (&msg, NULL, 0, 0))
    {
        TranslateMessage (&msg);
        DispatchMessage (&msg);
    }
 
    return 0;
}
0
 Аватар для casper007
71 / 71 / 58
Регистрация: 12.12.2013
Сообщений: 420
14.10.2016, 10:53
Цитата Сообщение от MuslimPalit Посмотреть сообщение
могу создать еще одно окно
не вижу создания второго окна.
Для создания нового окна необходимо зарегистрировать новый класс WNDCLASS, написать для окна свою функцию управления, и непосредственно его создать.
А взаимодействовать можно посредствам глобальных переменных, отправкой сообщений.
1
 Аватар для MuslimPalit
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508
14.10.2016, 21:45  [ТС]
casper007, окей

Добавлено через 30 секунд
casper007, но как сообщения отправлять?

Добавлено через 6 часов 43 минуты
Так как быть с меню, я не могу сделать подменю, не могу их связать, как это сделать вот мой код
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
#include <windows.h>
#include <CommCtrl.h>
 
#pragma comment(lib, "ComCtl32.lib")
 
TCHAR czClassName[] = L"myClassOne";
TCHAR czClassNameTwo[] = L"myClassTwo";
TCHAR czFormName[] = L"Главное окно";
TCHAR czFormNameTwo[] = L"Редактор окна";
HWND hwndA;
HWND hwndB;
 
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_DESTROY: PostQuitMessage(0); break;
 
    default: return DefWindowProc(hwnd, message, wParam, lParam); break;
    }
}
 
ATOM myRegistryClass(HINSTANCE hInst, int cmdMode)
{
    WNDCLASS cw;
 
    cw.style = CS_VREDRAW | CS_HREDRAW;
    cw.cbClsExtra = 0;
    cw.cbWndExtra = 0;
    cw.hbrBackground = (HBRUSH)(COLOR_WINDOW + 2);
    cw.hCursor = LoadCursor(NULL, IDC_ARROW);
    cw.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    cw.hInstance = hInst;
    cw.lpfnWndProc = WndProc;
    cw.lpszClassName = czClassName;
    cw.lpszMenuName = NULL;
 
    RegisterClass(&cw);
 
    return 0;
}
 
 
ATOM myRegistryClassTwo(HINSTANCE hInst, int cmdMode)
{
    WNDCLASS cwTwo;
 
    cwTwo.style = CS_VREDRAW | CS_HREDRAW;
    cwTwo.cbClsExtra = 0;
    cwTwo.cbWndExtra = 0;
    cwTwo.hbrBackground = (HBRUSH)(COLOR_WINDOW + 2);
    cwTwo.hCursor = LoadCursor(NULL, IDC_ARROW);
    cwTwo.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    cwTwo.hInstance = hInst;
    cwTwo.lpfnWndProc = WndProc;
    cwTwo.lpszClassName = czClassNameTwo;
    cwTwo.lpszMenuName = NULL;
 
    RegisterClass(&cwTwo);
 
    return 0;
}
 
 
BOOL InitInstance(HINSTANCE hInst, int Mode)
{
 
 
    hwndA = CreateWindow(
        czClassName,
        czFormName,
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        NULL,
        NULL,
        hInst,
        NULL);
 
    ShowWindow(hwndA, Mode);
    UpdateWindow(hwndA);
 
    return TRUE;
}
 
BOOL InitInstanceTwo(HINSTANCE hInst, int Mode)
{
 
 
    hwndB = CreateWindow(
        czClassNameTwo,
        czFormNameTwo,
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        NULL,
        NULL,
        hInst,
        NULL);
 
    ShowWindow(hwndB, Mode);
    UpdateWindow(hwndB);
 
    return TRUE;
}
 
/*Главная функция*/
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR IpszCmdParam, int cmdShow)
{
    MSG msg;
 
    myRegistryClass(hInst, cmdShow);
    InitInstance(hInst, cmdShow);
 
    myRegistryClassTwo(hInst, cmdShow);
    InitInstanceTwo(hInst, cmdShow);
 
    InitCommonControls();
 
    /*Создание строки состояния*/
    HWND hStatusWindow = CreateStatusWindow(WS_CHILD | WS_VISIBLE, L"", hwndB, 5000);
 
    HMENU hmenu1;
    hmenu1 = CreateMenu();
 
    AppendMenu(hmenu1, MF_STRING, 0, L"&Style");
    AppendMenu(hmenu1, MF_STRING, 0, L"&Size");
    AppendMenu(hmenu1, MF_STRING, 0, L"&Color");
 
    SetMenu(hwndB, hmenu1);
 
 
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
 
    return 0;
}
редактор окна, должен изменять первое окно по пунктам в подменю которого нет, как все это осуществить
0
 Аватар для casper007
71 / 71 / 58
Регистрация: 12.12.2013
Сообщений: 420
14.10.2016, 22:08
Цитата Сообщение от MuslimPalit Посмотреть сообщение
я не могу сделать подменю
меню лучше прописать в файле ресурсов
C++
1
2
3
4
5
6
7
8
9
MyMenu MENU
{
POPUP "File" //элемент меню первого уровня (выпадающий список)
{
MENUITEM "Open" 0x01 //Элемент меню
MENUITEM "Close" 0x02
}
MENUITEM "Delete" 0x03
}
Цитата Сообщение от MuslimPalit Посмотреть сообщение
но как сообщения отправлять?
SendMessage


Я не вижу у вас оконную процедуру для второго окна. Вы только класс регистрируете.
1
 Аватар для MuslimPalit
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508
14.10.2016, 22:11  [ТС]
casper007, я пробовал в VS 2013 написать ресурс не вышло, как сделать?
0
 Аватар для casper007
71 / 71 / 58
Регистрация: 12.12.2013
Сообщений: 420
14.10.2016, 22:25
Цитата Сообщение от MuslimPalit Посмотреть сообщение
как сделать?
Добавить файл ресурсов, (правой кнопкой) посмотреть код . Вычищаете содержимое и пишете свое.
После в соответствующем поле WNDCLASS того окна, для которого и писалось меню (cw.lpszMenuName) вписываете имя меню (в данном случае cw.lpszMenuName = "MyMenu")
1
 Аватар для MuslimPalit
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508
14.10.2016, 22:50  [ТС]
casper007, код не появляется в меню

Добавлено через 3 минуты
casper007, не понятно где код писать, я в инете смотрел на старых версиях есть, у меня нет такой функции

Добавлено через 15 минут
casper007, если меню находится в resource.rc, может код надо писать в resource.h другого выбора нет здесь
0
 Аватар для casper007
71 / 71 / 58
Регистрация: 12.12.2013
Сообщений: 420
14.10.2016, 22:50
Лучший ответ Сообщение было отмечено MuslimPalit как решение

Решение

Цитата Сообщение от MuslimPalit Посмотреть сообщение
не понятно где код писать
"Solution Explorer" - Папка "Resource Files" - Ctrl + Shift + A - Выпадающий список "Visual C++" - "Resource" - "Resource File(.rc)" - (Обзываем как-нибудь файл). - кнопка "Add".

Далее снова переходим на вкладку "Solution Explorer" - папка "Resource Files". В выпадающем списке увидим наш созданный файл. Нажимаем правой кнопкой и выбираем пункт "View Code" ("Посмотреть код"). Может что-то запросить, на что соглашаемся. Вот и все. Там будет много когда не по делу. Удаляем и копируем код выше.
1
 Аватар для MuslimPalit
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508
14.10.2016, 23:06  [ТС]
casper007, получилось, спасибо попробую связать
0
 Аватар для casper007
71 / 71 / 58
Регистрация: 12.12.2013
Сообщений: 420
14.10.2016, 23:34
Цитата Сообщение от MuslimPalit Посмотреть сообщение
Разработать двухоконное приложение, в котором одно окно рабочее, а другое управляет его внешним видом.
Цитата Сообщение от MuslimPalit Посмотреть сообщение
попробую связать
Не знаю что вы хотите сделать, но вы можете (повторюсь) просто менять общие данные (глобальные) координаты/размеры/фон/рисунок..., и из окна управления отправлять второму сообщения через SendMessage (!ждет обработки сообщения) (PostMessage (!помещает в очередь сообщений)) на прорисовку/изменение размера/выполнить заливку и т.п.
0
 Аватар для MuslimPalit
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508
26.10.2016, 18:03  [ТС]
casper007, совершенно непонятно, как работать с обработчиком событий меню

Добавлено через 11 минут
Вот исходник с меню, как сделать обработчик? Есть определенные константы?
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
#include <windows.h>
#include <CommCtrl.h>
 
#pragma comment(lib, "ComCtl32.lib")
 
 
//global veriable
 
#define IDC_BUTTON1 100
 
auto STYLEWINDOW = WS_OVERLAPPEDWINDOW;
auto WidthWINDOW = 300;
auto HeightWINDOW = 300;
 
TCHAR czClassName[] = L"myClassOne";
TCHAR czClassNameTwo[] = L"myClassTwo";
TCHAR czFormName[] = L"Главное окно";
TCHAR czFormNameTwo[] = L"Редактор окна";
char czForm[] = "Главное окно";
HWND hwndA;
HWND hwndB;
HWND button1;
 
 
 
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_DESTROY: PostQuitMessage(0); break;
 
    default: return DefWindowProc(hwnd, message, wParam, lParam); break;
    }
}
 
LRESULT CALLBACK WndProcTwo(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_DESTROY: PostQuitMessage(0); break;
    
    default: return DefWindowProc(hwnd, message, wParam, lParam); break;
    }
}
 
 
ATOM myRegistryClass(HINSTANCE hInst, int cmdMode)
{
    WNDCLASS cw;
 
    cw.style = CS_VREDRAW | CS_HREDRAW;
    cw.cbClsExtra = 0;
    cw.cbWndExtra = 0;
    cw.hbrBackground = (HBRUSH)(COLOR_WINDOW + 2);
    cw.hCursor = LoadCursor(NULL, IDC_ARROW);
    cw.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    cw.hInstance = hInst;
    cw.lpfnWndProc = WndProc;
    cw.lpszClassName = czClassName;
    cw.lpszMenuName = NULL;
 
    RegisterClass(&cw);
 
    return 0;
}
 
 
ATOM myRegistryClassTwo(HINSTANCE hInst, int cmdMode)
{
    WNDCLASS cwTwo;
 
    cwTwo.style = CS_VREDRAW | CS_HREDRAW;
    cwTwo.cbClsExtra = 0;
    cwTwo.cbWndExtra = 0;
    cwTwo.hbrBackground = (HBRUSH)(COLOR_WINDOW + 2);
    cwTwo.hCursor = LoadCursor(NULL, IDC_ARROW);
    cwTwo.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    cwTwo.hInstance = hInst;
    cwTwo.lpfnWndProc = WndProcTwo;
    cwTwo.lpszClassName = czClassNameTwo;
    cwTwo.lpszMenuName = L"MyMenu";
 
    RegisterClass(&cwTwo);
 
    return 0;
}
 
 
BOOL InitInstance(HINSTANCE hInst, int Mode)
{
 
 
    hwndA = CreateWindow(
        czClassName,
        czFormName,
        STYLEWINDOW,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        WidthWINDOW,
        HeightWINDOW,
        NULL,
        NULL,
        hInst,
        NULL);
 
    ShowWindow(hwndA, Mode);
    UpdateWindow(hwndA);
 
    return TRUE;
}
 
BOOL InitInstanceTwo(HINSTANCE hInst, int Mode)
{
 
 
    hwndB = CreateWindow(
        czClassNameTwo,
        czFormNameTwo,
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        NULL,
        NULL,
        hInst,
        NULL);
 
 
    ShowWindow(hwndB, Mode);
    UpdateWindow(hwndB);
 
    return TRUE;
}
 
/*Главная функция*/
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR IpszCmdParam, int cmdShow)
{
    MSG msg;
 
    myRegistryClass(hInst, cmdShow);
    InitInstance(hInst, cmdShow);
 
    myRegistryClassTwo(hInst, cmdShow);
    InitInstanceTwo(hInst, cmdShow);
 
    InitCommonControls();
 
    /*Создание строки состояния*/
    HWND hStatusWindow = CreateStatusWindow(WS_CHILD | WS_VISIBLE, L"", hwndB, 5000);
 
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
 
    return 0;
}
0
 Аватар для casper007
71 / 71 / 58
Регистрация: 12.12.2013
Сообщений: 420
26.10.2016, 20:19
Цитата Сообщение от casper007 Посмотреть сообщение
MENUITEM "Open" 0x01 //Элемент меню
0x01 - идентификатор объекта.
WM_COMMAND - приходит, когда выбирается командный пункт меню
C++
1
2
3
4
5
6
7
8
9
10
11
12
...
case WM_COMMAND:
{
switch(LOWORD(wParam))
{
case 0x01:
{
....
break;}
}
break;}
...
0
 Аватар для MuslimPalit
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508
26.10.2016, 20:28  [ТС]
casper007, я делал так, он не сработал, может не тот обработчик, в каком обработчике?
0
 Аватар для casper007
71 / 71 / 58
Регистрация: 12.12.2013
Сообщений: 420
26.10.2016, 20:40
Цитата Сообщение от MuslimPalit Посмотреть сообщение
я делал так, он не сработал
а само меню появляется?

Добавлено через 10 минут
main.cpp
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
#include <windows.h>
#include <CommCtrl.h>
 
#pragma comment(lib, "ComCtl32.lib")
 
 
//global veriable
 
#define IDC_BUTTON1 100
 
auto STYLEWINDOW = WS_OVERLAPPEDWINDOW;
auto WidthWINDOW = 300;
auto HeightWINDOW = 300;
 
TCHAR czClassName[] = L"myClassOne";
TCHAR czClassNameTwo[] = L"myClassTwo";
TCHAR czFormName[] = L"Главное окно";
TCHAR czFormNameTwo[] = L"Редактор окна";
char czForm[] = "Главное окно";
HWND hwndA;
HWND hwndB;
HWND button1;
 
 
 
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_DESTROY: PostQuitMessage(0); break;
 
    default: return DefWindowProc(hwnd, message, wParam, lParam); break;
    }
}
 
LRESULT CALLBACK WndProcTwo(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_DESTROY: PostQuitMessage(0); break;
    case WM_COMMAND:
        {
            switch(LOWORD(wParam))
                {
                    case 0x01:
                     {
                       MessageBox(hwnd,L"Pushed", L"Ok", MB_OK);
                    break;}
                }
    break;}
    
    default: return DefWindowProc(hwnd, message, wParam, lParam); break;
    }
}
 
 
ATOM myRegistryClass(HINSTANCE hInst, int cmdMode)
{
    WNDCLASS cw;
 
    cw.style = CS_VREDRAW | CS_HREDRAW;
    cw.cbClsExtra = 0;
    cw.cbWndExtra = 0;
    cw.hbrBackground = (HBRUSH)(COLOR_WINDOW + 2);
    cw.hCursor = LoadCursor(NULL, IDC_ARROW);
    cw.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    cw.hInstance = hInst;
    cw.lpfnWndProc = WndProc;
    cw.lpszClassName = czClassName;
    cw.lpszMenuName = NULL;
 
    RegisterClass(&cw);
 
    return 0;
}
 
 
ATOM myRegistryClassTwo(HINSTANCE hInst, int cmdMode)
{
    WNDCLASS cwTwo;
 
    cwTwo.style = CS_VREDRAW | CS_HREDRAW;
    cwTwo.cbClsExtra = 0;
    cwTwo.cbWndExtra = 0;
    cwTwo.hbrBackground = (HBRUSH)(COLOR_WINDOW + 2);
    cwTwo.hCursor = LoadCursor(NULL, IDC_ARROW);
    cwTwo.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    cwTwo.hInstance = hInst;
    cwTwo.lpfnWndProc = WndProcTwo;
    cwTwo.lpszClassName = czClassNameTwo;
    cwTwo.lpszMenuName = L"MyMenu";
 
    RegisterClass(&cwTwo);
 
    return 0;
}
 
 
BOOL InitInstance(HINSTANCE hInst, int Mode)
{
 
 
    hwndA = CreateWindow(
        czClassName,
        czFormName,
        STYLEWINDOW,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        WidthWINDOW,
        HeightWINDOW,
        NULL,
        NULL,
        hInst,
        NULL);
 
    ShowWindow(hwndA, Mode);
    UpdateWindow(hwndA);
 
    return TRUE;
}
 
BOOL InitInstanceTwo(HINSTANCE hInst, int Mode)
{
 
 
    hwndB = CreateWindow(
        czClassNameTwo,
        czFormNameTwo,
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        NULL,
        NULL,
        hInst,
        NULL);
 
 
    ShowWindow(hwndB, Mode);
    UpdateWindow(hwndB);
 
    return TRUE;
}
 
/*Главная функция*/
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR IpszCmdParam, int cmdShow)
{
    MSG msg;
 
    myRegistryClass(hInst, cmdShow);
    InitInstance(hInst, cmdShow);
 
    myRegistryClassTwo(hInst, cmdShow);
    InitInstanceTwo(hInst, cmdShow);
 
    InitCommonControls();
 
    /*Создание строки состояния*/
    HWND hStatusWindow = CreateStatusWindow(WS_CHILD | WS_VISIBLE, L"", hwndB, 5000);
 
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
 
    return 0;
}
resource.rc
C++
1
2
3
4
5
6
7
8
9
MyMenu MENU
{
POPUP "File" //элемент меню первого уровня (выпадающий список)
{
MENUITEM "Open" 0x01 //Элемент меню
MENUITEM "Close" 0x02
}
MENUITEM "Delete" 0x03
}
Идентификаторы меню должны совпадать с теми, что в обработчике.
0
 Аватар для MuslimPalit
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508
26.10.2016, 20:46  [ТС]
casper007, меню все правильно, обработка не проходит, сейчас это посмотрю. Я простую обработку клика мыша обрабатывал с одного окна в другую тоже не сработало, тоже что и ты посоветовал. Я думал глобальную переменную неправильно использую
0
 Аватар для casper007
71 / 71 / 58
Регистрация: 12.12.2013
Сообщений: 420
26.10.2016, 20:51
Цитата Сообщение от MuslimPalit Посмотреть сообщение
Я простую обработку клика мыша обрабатывал с одного окна в другую тоже не сработало
в вашем исходнике это не наблюдается
0
 Аватар для MuslimPalit
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508
26.10.2016, 21:00  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
case WM_COMMAND:
        {
            switch(LOWORD(wParam))
                {
                    case 0x01:
                     {
                       MessageBox(hwnd,L"Pushed", L"Ok", MB_OK);
                    break;}
                }
    break;}
Код типа такого я выводил, сработал но как с глобальной переменной работать? я делал так:
C++
1
2
3
4
5
6
7
8
9
10
case WM_COMMAND:
    {
        switch (LOWORD(wParam))
        {
        case 0x01: { STYLEWINDOW = WS_HSCROLL; break; }
        case 0x02: { STYLEWINDOW = WS_VSCROLL; break; }
        case 0x03: { STYLEWINDOW = WS_HSCROLL | WS_VSCROLL; break; }
        }
    break;
    }
вот меню
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
MyMenu MENU
{
    POPUP "Style" //элемент меню первого уровня (выпадающий список)
    {
        MENUITEM "HSCROLL" 0x01 //Элемент меню
        MENUITEM "VSCROLL" 0x02
        MENUITEM "HSCROLL | VSCROLL" 0x03
    }
    POPUP "Size" //элемент меню первого уровня (выпадающий список)
    {
        MENUITEM "100x100" 0x04 //Элемент меню
        MENUITEM "200x150" 0x05
        MENUITEM "300x200" 0x07
        MENUITEM "400x300" 0x08
        MENUITEM "500x600" 0x09
        MENUITEM "700x700" 0x0A
    }
    POPUP "Color" //элемент меню первого уровня (выпадающий список)
    {
        MENUITEM "COLOR_ACTIVEBORDER" 0x0B
        MENUITEM "COLOR_ACTIVECAPTION" 0x0C
        MENUITEM "COLOR_APPWORKSPACE" 0x0D
        MENUITEM "COLOR_BACKGROUND" 0x0E
        MENUITEM "COLOR_BTNFACE" 0x0F
        MENUITEM "COLOR_BTNSHADOW" 0x11
        MENUITEM "COLOR_BTNTEXT" 0x12
        MENUITEM "COLOR_CAPTIONTEXT" 0x13
        MENUITEM "COLOR_GRAYTEXT" 0x14
        MENUITEM "COLOR_HIGHLIGHT" 0x15
        MENUITEM "COLOR_HIGHLIGHTTEXT" 0x16
        MENUITEM "COLOR_INACTIVEBORDER" 0x17
        MENUITEM "COLOR_INACTIVECAPTION" 0x18
        MENUITEM "COLOR_MENU" 0x19
        MENUITEM "COLOR_MENUTEXT" 0x1A
        MENUITEM "COLOR_SCROLLBAR" 0x1B
        MENUITEM "COLOR_WINDOW" 0x1C
        MENUITEM "COLOR_WINDOWFRAME" 0x1D
        MENUITEM "COLOR_WINDOWTEXT" 0x1E
 
    }
    POPUP "Location" //элемент меню первого уровня (выпадающий список)
    {
        MENUITEM "AngleUp: Left|Right" 0x1F //Элемент меню
        MENUITEM "AngleDown: Left|Right" 0x21
    }
    MENUITEM "Exit" 0x22
}
Добавлено через 2 минуты
casper007, в исходнике нет, так как я уже неделю пару раз заходил и методом проб и ошибок пробовал, не сработало, вот ваш вариант просто вывода текста работает, да он откликается но не изменяет вид с помощью глобальной переменной, может я неправильно делаю?

Добавлено через 4 минуты
casper007, может я слишком многого требую от глобальных переменных, мне ведь надо изменить состояние одного окна с помощью меню из второго окна
0
 Аватар для casper007
71 / 71 / 58
Регистрация: 12.12.2013
Сообщений: 420
26.10.2016, 21:03
Цитата Сообщение от MuslimPalit Посмотреть сообщение
но как с глобальной переменной работать?
Так же как и с локальной. Только первую "видно" отовсюду. Я не знаю что вам надо, и почему у вас вдруг появились идентификаторы скроллов. Все в ваших руках.

Цитата Сообщение от MuslimPalit Посмотреть сообщение
вот ваш вариант просто вывода текста работает, да он откликается но не изменяет вид с помощью глобальной переменной
Я писал что это как способ взаимодействия. А чтобы что-то изменялось - нужно написать какую-то инструкцию на событие. Допустим, в одном окне вводится текст, и когда нажимается кнопка "Ок", то весь текст сохраняется в глобальную переменную (char *buf), а потом отправляется сообщение второму окну(либо именно такое сообщение отправить, для которого написан обработчик, либо сообщение на прорисовку), чтобы это сообщение отобразилось в нем (при этом считывает глобальную переменную(buf))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.10.2016, 21:03
Помогаю со студенческими работами здесь

Модуль CRT: Разработать программу для вывода меню

Получение состояния окна JInternalFrame
Доброго времени суток. Мне необходимо получить информацию о состоянии окна. Если конкретно, то свернуто оно или нет. Получаю окно следующим...

Сохранение актуального состояния окна.
Доброго времени суток, помогите разобраться с сериализацией. Имеется класс главного окна(унаследован от QObject), от которого унаследованы...

Как сделать меню для окна в файле ресурсов?
Добрый вечер! Как сделать меню для окна в файле ресурсов? Целый день бьюсь, ничего не выходит...

Ошибка вызова строки состояния окна
Создавая очередной проект на Win32 API в VC++ 2005 столкнулся с ошибкой вызова строки состояния окна Statusbar. Подключен #include...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
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, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru