0 / 0 / 0
Регистрация: 14.11.2012
Сообщений: 89
1

Создание простого родительского и дочернего окна в нем

28.11.2012, 23:49. Показов 4544. Ответов 5
Метки нет (Все метки)

Подскажите в чем ошибка? Появляется только родительское окно. Дочернее окно должно быть в родительском. Заранее спасибо.
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
#include <Windows.h>
#include <tchar.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); //прототип функции
 
int APIENTRY _tWinMain (HINSTANCE hInstance,        //дискриптор приложения
            HINSTANCE hPrevInstance,    //дискриптор предыдущей запущенной копии, NULL
            LPTSTR szCmdLine,           //указатель на командную строку
            int iCmdShow)                   
{
    WNDCLASSEX wndclass;                            //сведения о регестрируемом классе
 
    wndclass.cbSize         =           sizeof(wndclass);
    wndclass.style          =           CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc    =               WndProc;
    wndclass.cbClsExtra     =           0;
    wndclass.cbWndExtra     =           0;
    wndclass.hInstance      =           hInstance;
    wndclass.hIcon          =           LoadIcon (NULL, IDI_APPLICATION);
    wndclass.hCursor        =           LoadCursor(NULL, IDC_CROSS);
    wndclass.hbrBackground  =               (HBRUSH) GetStockObject (WHITE_BRUSH);
    wndclass.lpszMenuName   =               NULL;
    wndclass.lpszClassName  =               L"HelloWin";
    wndclass.hIconSm        =           LoadIcon (NULL, IDI_APPLICATION);
 
    RegisterClassEx(&wndclass);             //регистрируем класс окна
 
    HWND hWnd, hW;                  //дескриптор главного и дочернего окна
 
    
hWnd = CreateWindowEx (WS_EX_TOPMOST,                                               
                            L"HelloWin",
                            L"First Application",
                            WS_OVERLAPPEDWINDOW,    //комбинированный стиль окна
                            200,200,
                            500,500,
                            NULL,
                            NULL,
                            hInstance,
                            NULL);
 
    hW = CreateWindowEx                     (WS_EX_TOPMOST,                     
                            L"HelloWin",
                            L"2nd Application",
                            WS_CHILD,   
                            100,100,
                            200,200,
                            hWnd,
                            NULL,
                            hInstance,
                            NULL);
    if (!hWnd){
        return -1;
    }
    
    ShowWindow(hWnd, SW_NORMAL);
    UpdateWindow(hWnd);
        
    MSG msg;
    
        while (GetMessage(&msg, hWnd, 0, 0)!=NULL){
        DispatchMessage(&msg);
    }
    return 0;
}
 
 
LRESULT CALLBACK WndProc(   HWND hwnd,UINT iMsg,    WPARAM wParam,                  LPARAM lParam)
{
    switch(iMsg){
    case WM_CREATE: 
            for (int i=0; i<100; i++){
                MessageBeep(700);}
            return true;
 
        default: return DefWindowProc(hwnd, iMsg, wParam, lParam);
    
    }
}
Добавлено через 7 часов 33 минуты
Подскажите хоть в каком моменте ошибка а то совсем запутался..
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.11.2012, 23:49
Ответы с готовыми решениями:

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

Как изменять размеры дочернего окна при изменении размеров родительского?
Есть главное окно и внутри него прорисовано дочернее(благодаря стилю WS_BORDER), которое разделяет...

Как при создании дочернего окна передать ему указатель на static-переменную в оконной процедуре родительского?
Есть оконная процедура родительского окна, в ней есть static-переменная, например, static...

Как избавится от родительского консольного окна при создание WinAPI окна
добрый день. использую DEV-C++, но так понимаю разницы нет, какая у нас IDE. создаём просто...

5
Исследователь
318 / 317 / 24
Регистрация: 06.04.2011
Сообщений: 872
29.11.2012, 04:24 2
Скорее всего, причина в том, что вы просто не сделали ShowWindow() для дочернего окна. Вообще можно этого не делать, а просто указать стиль WS_CHILD для каждого окна, чтобы не "мучаться".
0
быдлокодер
1722 / 909 / 106
Регистрация: 04.06.2008
Сообщений: 5,655
29.11.2012, 08:33 3
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
#include <Windows.h>
#include <tchar.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); //прототип функции
 
int APIENTRY _tWinMain (HINSTANCE hInstance,        //дискриптор приложения
            HINSTANCE hPrevInstance,    //дискриптор предыдущей запущенной копии, NULL
            LPTSTR szCmdLine,           //указатель на командную строку
            int iCmdShow)                   
{
    WNDCLASSEX wndclass;                            //сведения о регестрируемом классе
 
    wndclass.cbSize         =           sizeof(wndclass);
    wndclass.style          =           CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc    =               WndProc;
    wndclass.cbClsExtra     =           0;
    wndclass.cbWndExtra     =           0;
    wndclass.hInstance      =           hInstance;
    wndclass.hIcon          =           LoadIcon (NULL, IDI_APPLICATION);
    wndclass.hCursor        =           LoadCursor(NULL, IDC_CROSS);
    wndclass.hbrBackground  =               (HBRUSH) GetStockObject (WHITE_BRUSH);
    wndclass.lpszMenuName   =               NULL;
    wndclass.lpszClassName  =               "HelloWin";
    wndclass.hIconSm        =           LoadIcon (NULL, IDI_APPLICATION);
 
    RegisterClassEx(&wndclass);             //регистрируем класс окна
 
    HWND hWnd, hW;                  //дескриптор главного и дочернего окна
 
    
hWnd = CreateWindowEx (WS_EX_TOPMOST,                                               
                            "HelloWin",
                            "First Application",
                            WS_OVERLAPPEDWINDOW,    //комбинированный стиль окна
                            200,200,
                            500,500,
                            NULL,
                            NULL,
                            hInstance,
                            NULL);
 
    hW = CreateWindowEx                     (WS_EX_TOPMOST,                     
                            "HelloWin",
                            "2nd Application",
                            WS_CHILD|WS_OVERLAPPEDWINDOW,   
                            100,100,
                            200,200,
                            hWnd,
                            NULL,
                            hInstance,
                            NULL);
    if (!hWnd){
        return -1;
    }
    
    ShowWindow(hWnd, SW_NORMAL);
    UpdateWindow(hWnd);
 
    ShowWindow(hW, SW_NORMAL);
    UpdateWindow(hW);
 
        
    MSG msg;
    
        while (GetMessage(&msg, hWnd, 0, 0)){
        DispatchMessage(&msg);
    }
    return 0;
}
 
 
LRESULT CALLBACK WndProc(   HWND hw,UINT iMsg,    WPARAM wParam,                  LPARAM lParam)
{
    switch(iMsg){
    case WM_CREATE: 
            for (int i=0; i<100; i++){
                MessageBeep(700);}
            return true;
 
        default: return DefWindowProc(hw, iMsg, wParam, lParam);
    
    }
}
угадал, по-моему, хотя это мало что даст

Добавлено через 21 минуту
тут
#include <Windows.h>
#include <tchar.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); //прототип функции

int APIENTRY _tWinMain (HINSTANCE hInstance, //дискриптор приложения
HINSTANCE hPrevInstance, //дискриптор предыдущей запущенной копии, NULL
LPTSTR szCmdLine, //указатель на командную строку
int iCmdShow)
{
WNDCLASSEX wndclass; //сведения о регестрируемом классе

wndclass.cbSize = sizeof(wndclass);
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_CROSS);
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = "HelloWin";
wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION);

RegisterClassEx(&wndclass); //регистрируем класс окна

HWND hWnd, hW; //дескриптор главного и дочернего окна


hWnd = CreateWindowEx (WS_EX_TOPMOST,
"HelloWin",
"First Application",
WS_OVERLAPPEDWINDOW, //комбинированный стиль окна
200,200,
500,500,
NULL,
NULL,
hInstance,
NULL);

hW = CreateWindowEx (WS_EX_TOPMOST,
"HelloWin",
"2nd Application",
WS_CHILD|WS_OVERLAPPEDWINDOW,
100,100,
200,200,
hWnd,
NULL,
hInstance,
NULL);
if (!hWnd){
return -1;
}

ShowWindow(hWnd, SW_NORMAL);
UpdateWindow(hWnd);

ShowWindow(hW, SW_NORMAL);
UpdateWindow(hW);


MSG msg;

while (GetMessage(&msg, hWnd, 0, 0)){
DispatchMessage(&msg);
}
return 0;
}


LRESULT CALLBACK WndProc( HWND hw,UINT iMsg, WPARAM wParam, LPARAM lParam)
{
switch(iMsg){
case WM_CREATE:
for (int i=0; i<100; i++){
MessageBeep(700);}
return true;

default: return DefWindowProc(hw, iMsg, wParam, lParam);

}
}


Добавлено через 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
#include <Windows.h>
#include <tchar.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); //прототип функции
 
int APIENTRY _tWinMain (HINSTANCE hInstance,        //дискриптор приложения
            HINSTANCE hPrevInstance,    //дискриптор предыдущей запущенной копии, NULL
            LPTSTR szCmdLine,           //указатель на командную строку
            int iCmdShow)                   
{
    WNDCLASSEX wndclass;                            //сведения о регестрируемом классе
 
    wndclass.cbSize         =           sizeof(wndclass);
    wndclass.style          =           CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc    =               WndProc;
    wndclass.cbClsExtra     =           0;
    wndclass.cbWndExtra     =           0;
    wndclass.hInstance      =           hInstance;
    wndclass.hIcon          =           LoadIcon (NULL, IDI_APPLICATION);
    wndclass.hCursor        =           LoadCursor(NULL, IDC_CROSS);
    wndclass.hbrBackground  =               (HBRUSH) GetStockObject (WHITE_BRUSH);
    wndclass.lpszMenuName   =               NULL;
    wndclass.lpszClassName  =               "HelloWin";
    wndclass.hIconSm        =           LoadIcon (NULL, IDI_APPLICATION);
 
    RegisterClassEx(&wndclass);             //регистрируем класс окна
 
    HWND hWnd, hW;                  //дескриптор главного и дочернего окна
 
    
hWnd = CreateWindowEx (WS_EX_TOPMOST,                                               
                            "HelloWin",
                            "First Application",
                            WS_OVERLAPPEDWINDOW,    //комбинированный стиль окна
                            200,200,
                            500,500,
                            NULL,
                            NULL,
                            hInstance,
                            NULL);
 
    hW = CreateWindowEx                     (WS_EX_TOPMOST,                     
                            "HelloWin",
                            "2nd Application",
                            WS_CHILD|WS_OVERLAPPEDWINDOW,   
                            100,100,
                            200,200,
                            hWnd,
                            NULL,
                            hInstance,
                            NULL);
    if (!hWnd){
        return -1;
    }
    
    ShowWindow(hWnd, SW_NORMAL);
    UpdateWindow(hWnd);
 
    ShowWindow(hW, SW_NORMAL);
    UpdateWindow(hW);
 
        
    MSG msg;
    
        while (GetMessage(&msg, hWnd, 0, 0)){
        DispatchMessage(&msg);
    }
    return 0;
}
 
 
LRESULT CALLBACK WndProc(   HWND hw,UINT iMsg,    WPARAM wParam,                  LPARAM lParam)
{
    switch(iMsg){
    case WM_CREATE: 
            for (int i=0; i<100; i++){
                MessageBeep(700);}
            return true;
 
        default: return DefWindowProc(hw, iMsg, wParam, lParam);
    
    }
}
0
Исследователь
318 / 317 / 24
Регистрация: 06.04.2011
Сообщений: 872
29.11.2012, 08:42 4
Цитата Сообщение от kravam Посмотреть сообщение
C++
1
2
3
4
MSG msg;
while (GetMessage(&msg, hWnd, 0, 0)){
* * * * DispatchMessage(&msg);
* * }
А где TranslateMessage()? Это первое.
Второе: если ставится целью создать MDI-приложение, то в коде еще куча ошибок, иначе вы получаете просто окно с дочерним по отношению к нему другим окном. Это все равно, что на главной форме расположить, например, текстовый редактор. Примеры обоих приложений в прикрепленном файле.
Вложения
Тип файла: zip sample.zip (14.4 Кб, 117 просмотров)
0
быдлокодер
1722 / 909 / 106
Регистрация: 04.06.2008
Сообщений: 5,655
29.11.2012, 09:27 5
Да я сам знаю что всё плохо, пусть разбирается чё ему там надо
0
0 / 0 / 0
Регистрация: 14.11.2012
Сообщений: 89
29.11.2012, 10:07  [ТС] 6
Спасибо, навели на мысль. Все получилось
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.11.2012, 10:07
Помогаю со студенческими работами здесь

Создание дочернего окна
Доброго времени суток. Нужно создать дочернее окно: #include &lt;windows.h&gt; LRESULT CALLBACK...

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

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

Создание дочернего окна в MVP
Продолжаю разбираться с MVP. Не знаю, как правильно в данном шаблоне сделать работу с дочерним...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru