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

Меню у дочернего окна

28.04.2015, 01:13. Просмотров 825. Ответов 4
Метки нет (Все метки)

Всем привет.Помогите пожалуйста,у меня есть два окна:родительское и дочернее. При создании родительского окна я также создаю для него меню. По кнопке в главном окне я создаю дочернее окно,в котором почему-то появляется меню главного окна.Как убрать это меню из дочернего окна,не могу понять?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2015, 01:13
Ответы с готовыми решениями:

Создание меню у дочернего окна
Добрый день, подскажите, как создать меню у дочернего окна? Этот код не...

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

Закрытие дочернего окна приводит к закрытию основного окна
Суть задания "После нажатия левой кнопки мышки в области окна в левом углу окна...

Закрытие дочернего окна
Есть главное окно, а в нем дочернее. Подскажите пожалуйста как сделать, чтобы...

Создание дочернего окна
Доброго времени суток. У меня есть главное окно с 3 кнопками. Я хочу чтобы...

4
marat_miaki
149 / 138 / 86
Регистрация: 08.04.2013
Сообщений: 558
28.04.2015, 07:09 2
Код свой выложи сначала чтоб ответили как.
Окно дочернее прототип родителя? Создай отдельный класс для дочки
Для дочернего окна свой процедурный файл или родительский? Создай отдельный для дочерней.
0
dan1219
0 / 0 / 0
Регистрация: 09.12.2013
Сообщений: 44
28.04.2015, 22:44  [ТС] 3
Вот код. Вообщем в пункте popup меню вызывается дочернее окно,но тоже с меню. Помогите,пожалуйста
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
#include <windows.h>
#include <stdlib.h>
#include <Windowsx.h>
#include <Strsafe.h>
HWND hwnd1;
HINSTANCE HINST;
LRESULT WINAPI WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT WINAPI WndProc1(HWND, UINT, WPARAM, LPARAM);
void CreateLabel(HWND parent, HMENU hMenu,  int x, int y, int width, int height,LPCTSTR str);
const int K1=201,LAB1=301;
 
 
 
int WINAPI WinMain(HINSTANCE hInst, 
    HINSTANCE hPrev,        
    LPSTR szCmdLine,                
    int nShowCmd)                   
{
    HINST=hInst;
    WNDCLASSEX wcx = {0};
    wcx.cbSize = sizeof(WNDCLASSEX); 
    wcx.style = CS_HREDRAW | CS_VREDRAW  ;
    wcx.lpfnWndProc = WndProc;
    wcx.hInstance = hInst;  
    wcx.hbrBackground = (HBRUSH)(COLOR_WINDOW +2); 
    wcx.lpszClassName = TEXT("MainWindow");
    if ( !RegisterClassEx(&wcx) ) //регистрируем класс для главного окна
        return 1;
 
 
    WNDCLASSEX wcx1 = {0};
    wcx1.cbSize = sizeof(WNDCLASSEX); 
    wcx1.style = CS_HREDRAW | CS_VREDRAW;
    wcx1.lpfnWndProc = WndProc1;
    wcx1.hInstance = hInst; 
    wcx1.hbrBackground = (HBRUSH)(COLOR_WINDOW +2);
    wcx1.lpszClassName = TEXT("ChildWindow");
    if ( !RegisterClassEx(&wcx1) ) //регистрируем класс для дочернего окна
        return 2;
 
    HMENU hmenu1;
    hmenu1 = CreateMenu();
    HMENU wp=CreatePopupMenu();
 
    AppendMenu(hmenu1, MF_STRING | MF_POPUP,  (UINT)wp, "Файл"); 
    AppendMenu(wp, MF_STRING, K1, "Дочернее окно"); 
    
    
    HWND hWnd = CreateWindow( //главное окно
        TEXT("MainWindow"),
        TEXT("Лабораторная работа №3"),
        0,
        0,0,
        600,400,
        0, 
        hmenu1,
        hInst,
        0);
 
    if (!hWnd)    
        return 2;
 
    SetMenu(hWnd, hmenu1);
    ShowWindow(hWnd, nShowCmd);
    UpdateWindow(hWnd);
    
    MSG msg = {0};
    while( GetMessage(&msg,0,0,0))
    {           
        TranslateMessage(&msg); 
        DispatchMessage(&msg);  
    }
    return( (int)msg.wParam );  
}
 
 
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_COMMAND:
if (LOWORD(wParam)==K1){
    hwnd1 = CreateWindow( //дочернее окно
        TEXT("ChildWindow"),
        TEXT("Лабораторная работа №3"),
        WS_CHILDWINDOW, 
        0,0,
        600,400,
        hWnd, 
        0,
        HINST,
        0);
    if (!hwnd1)    
        return 3;
    CreateLabel(hwnd1,(HMENU)LAB1,10,10,210,20,"Дочернее окно");
    ShowWindow(hwnd1, SW_SHOWNORMAL);
    UpdateWindow(hwnd1);
    
break;
}
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
 
 
LRESULT CALLBACK WndProc1(HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_COMMAND:
//обработка событий дочернего окна
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
 
void CreateLabel(HWND parent, HMENU hMenu,  int x, int y, int width, int height,LPCTSTR str){ //Для создания label
    HWND label=CreateWindow("static", str, WS_CHILD | WS_VISIBLE,
        x, y, width, height, parent, hMenu, HINST, NULL);
}
Добавлено через 49 минут
Помогите пожалуйста.
0
marat_miaki
149 / 138 / 86
Регистрация: 08.04.2013
Сообщений: 558
29.04.2015, 00:22 4
Лучший ответ Сообщение было отмечено dan1219 как решение

Решение

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
#include <windows.h>
#include <stdlib.h>
#include <Windowsx.h>
#include <tchar.h>
#include <Strsafe.h>
 
 
HWND hwnd1;
HINSTANCE HINST;
LRESULT WINAPI WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT WINAPI WndProc1(HWND, UINT, WPARAM, LPARAM);
void CreateLabel(HWND parent, HMENU hMenu,  int x, int y, int width, int height,LPCTSTR str);
const int K1=201,LAB1=301;
 
 
 
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine,  int nShowCmd)                   
{
    HINST=hInst;
    WNDCLASSEX wcx = {0};
    wcx.cbSize = sizeof(WNDCLASSEX); 
    wcx.style = CS_HREDRAW | CS_VREDRAW  ;
    wcx.lpfnWndProc = WndProc;
    wcx.hInstance = hInst;  
    wcx.hbrBackground = (HBRUSH)(COLOR_WINDOW +2); 
    wcx.lpszClassName = TEXT("MainWindow");
    if ( !RegisterClassEx(&wcx) ) //регистрируем класс для главного окна
        return 0;
 
 
    WNDCLASSEX wcx1 = {0};
    wcx1.cbSize = sizeof(WNDCLASSEX); 
    wcx1.style = CS_HREDRAW | CS_VREDRAW;
    wcx1.lpfnWndProc = WndProc1;
    wcx1.hInstance = hInst; 
    wcx1.hbrBackground = (HBRUSH)(COLOR_WINDOW +2);
    wcx1.lpszClassName = TEXT("ChildWindow");
    if ( !RegisterClassEx(&wcx1) ) //регистрируем класс для дочернего окна
        return 0;
 
    HMENU hmenu1;
    hmenu1 = CreateMenu();
    HMENU wp=CreatePopupMenu();
 
    AppendMenu(hmenu1, MF_STRING | MF_POPUP,  (UINT)wp, L"Файл"); 
    AppendMenu(wp, MF_STRING, K1, L"Дочернее окно"); 
    
    
    HWND hWnd = CreateWindow( //главное окно
        TEXT("MainWindow"),
        TEXT("Лабораторная работа №3"),
        WS_OVERLAPPEDWINDOW,
        0,0,
        600,400,
        0, 
        hmenu1,
        hInst,
        0);
 
    if (!hWnd)    
        return 2;
 
    SetMenu(hWnd, hmenu1);
    ShowWindow(hWnd, nShowCmd);
    UpdateWindow(hWnd);
    
    MSG msg = {0};
    while( GetMessage(&msg,0,0,0))
    {           
        TranslateMessage(&msg); 
        DispatchMessage(&msg);  
    }
    return( (int)msg.wParam );  
}
 
 
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_COMMAND:
if (LOWORD(wParam)==K1){
    hwnd1 = CreateWindow( //дочернее окно
        TEXT("ChildWindow"),
        TEXT("Лабораторная работа №3"),
        WS_OVERLAPPEDWINDOW |WS_CHILD|WS_DLGFRAME|WS_VISIBLE, 
        0,0,
        600,400,
        hWnd, 
        0,
        HINST,
        0);
    if (!hwnd1)    
        return 0;
    CreateLabel(hwnd1,(HMENU)LAB1,10,10,210,20,L"Дочернее окно");
    ShowWindow(hwnd1, SW_SHOWNORMAL);
    UpdateWindow(hwnd1);
    
break;
}
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
 
 
LRESULT CALLBACK WndProc1(HWND hwnd1, UINT message,
WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_CLOSE:
DestroyWindow(hwnd1);
break;
case WM_COMMAND:
//обработка событий дочернего окна
default:
return DefWindowProc(hwnd1, message, wParam, lParam);
}
return 0;
}
 
void CreateLabel(HWND parent, HMENU hMenu,  int x, int y, int width, int height,LPCTSTR str){ //Для создания label
    HWND label=CreateWindow(L"static", str, WS_CHILD | WS_VISIBLE,
        x, y, width, height, parent, hMenu, HINST, NULL);
}
1
dan1219
0 / 0 / 0
Регистрация: 09.12.2013
Сообщений: 44
29.04.2015, 01:09  [ТС] 5
Спасибо большое)
0
29.04.2015, 01:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.04.2015, 01:09

Отображение дочернего окна
При нажатии лкм должно создаваться дочернее окно, но открывается только главное...

Вывод дочернего окна
Разбираюсь с WinAPI и не могу вывести дочернее окно. Вроде сделал всё как в...

Открытие дочернего окна
Здрасьте. Подскажите что я не так делаю. Хочу открыть окно по нажатию кнопки. Я...


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

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

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