Форум программистов, компьютерный форум, киберфорум
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.72/57: Рейтинг темы: голосов - 57, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 06.09.2010
Сообщений: 45
1

Создание дочернего окна

12.10.2013, 23:54. Просмотров 10426. Ответов 1
Метки нет (Все метки)


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

Проблема в том что при нажатие на кнопку , дочернее окно работает не правильно. При закрытие дочернего окна закрывается вся программа и при нажатие на окно просвечиваются кнопки из главного окна. Язык C++.

Вот код:

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
#include <windows.h>
 
/*  Declare Windows procedure  */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK ChildProc(HWND, UINT, WPARAM, LPARAM);
#define ID_MYBUTTON 1
#define ID_FIRSTCHILD   100
/*  Make the class name into a global variable  */
char szClassName[ ] = "WindowsApp";
HWND child;
int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)
 
{
    HWND hwnd;
    //    HWND hwnd_button;  /* This is the handle for our window */
    MSG messages;            /* Here messages to the application are saved */
    WNDCLASSEX wincl;        /* Data structure for the windowclass */
 
    /* The Window structure */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
    wincl.cbSize = sizeof (WNDCLASSEX);
 
    /* Use default icon and mouse-pointer */
    wincl.hIcon = LoadIcon (NULL, IDI_QUESTION);
    wincl.hIconSm = LoadIcon (NULL, IDI_EXCLAMATION     );
    wincl.hCursor = LoadCursor (NULL, IDC_CROSS);
    wincl.lpszMenuName = NULL;                 /* No menu */
    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
    wincl.cbWndExtra = 0;                      /* structure or the window instance */
    /* Use Windows's default color as the background of the window */
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
 
 
 
    /* Register the window class, and if it fails quit the program */
    if (!RegisterClassEx (&wincl))
        return 0;
 
    /* The class is registered, let's create the program*/
    hwnd = CreateWindowEx (
        0,                   /* Extended possibilites for variation */
        szClassName,         /* Classname */
        "Windows App",       /* Title Text */
        WS_OVERLAPPEDWINDOW, /* default window */
        CW_USEDEFAULT,       /* Windows decides the position */
        CW_USEDEFAULT,       /* where the window ends up on the screen */
        250,                 /* The programs width */
        300,                 /* and height in pixels */
        HWND_DESKTOP,        /* The window is a child-window to desktop */
        NULL,                /* No menu */
        hThisInstance,       /* Program Instance handler */
        NULL                 /* No Window Creation data */
        );
 
 
 
 
 
    HWND button = CreateWindow(
        "BUTTON", /* this makes a "button" */
        "Логические диски", /* this is the text which will appear in the button */
        WS_VISIBLE | WS_CHILD,
        20, /* these four lines are the position and dimensions of the button */
        10,
        200,
        20,
        hwnd, /* this is the buttons parent window */
        (HMENU)100, /* these next two lines pretty much tell windows what to do when the button is pressed */
        (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE),
        NULL);
         HWND button2 = CreateWindow(
        "BUTTON", /* this makes a "button" */
        "B", /* this is the text which will appear in the button */
        WS_VISIBLE | WS_CHILD,
        20, /* these four lines are the position and dimensions of the button */
        40,
        200,
        20,
        hwnd, /* this is the buttons parent window */
        (HMENU)100, /* these next two lines pretty much tell windows what to do when the button is pressed */
        (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE),
        NULL);
         HWND button3 = CreateWindow(
        "BUTTON", /* this makes a "button" */
        "Выход", /* this is the text which will appear in the button */
        WS_VISIBLE | WS_CHILD,
        20, /* these four lines are the position and dimensions of the button */
        70,
        200,
        20,
        hwnd, /* this is the buttons parent window */
        (HMENU)ID_MYBUTTON, /* these next two lines pretty much tell windows what to do when the button is pressed */
        (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE),
        NULL);
 
 
 
    ShowWindow(hwnd, SW_SHOWDEFAULT);
    UpdateWindow(hwnd);
 
    /* Run the message loop. It will run until GetMessage() returns 0 */
    while (GetMessage (&messages, NULL, 0, 0))
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&messages);
    }
 
    /* The program return-value is 0 - The value that PostQuitMessage() gave */
    return messages.wParam;
}
 
 
/*  This function is called by the Windows function DispatchMessage()  */
 
 
 
 
 
 
 
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)                  /* handle the messages */
    {
 
  case WM_COMMAND:
   if ((HIWORD(wParam)==0) && (LOWORD(wParam)==ID_MYBUTTON))
   {   child = CreateWindowEx(0, szClassName,"Список дисков",
                                WS_CHILD | WS_VISIBLE  | WS_OVERLAPPEDWINDOW | WS_CAPTION | WS_VSCROLL | WS_CLIPCHILDREN ,
                                100, 75, 180, 180, hwnd, (HMENU)ID_MYBUTTON,
                                0,
                                NULL);
   }
 
 
   return 0;
 
    case WM_DESTROY:
        PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
        break;
    default:
 
        return DefWindowProc (hwnd, message, wParam, lParam);
    }
 
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.10.2013, 23:54
Ответы с готовыми решениями:

Создание дочернего окна в консоли
Интересует вопрос... Посмотрим на картинку, так вот как создать дочернее окно в коносоли? это...

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

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

Создание простого родительского и дочернего окна в нем
Подскажите в чем ошибка? Появляется только родительское окно. Дочернее окно должно быть в...

1
шКодер самоучка
2127 / 1843 / 902
Регистрация: 09.10.2013
Сообщений: 4,029
Записей в блоге: 7
13.10.2013, 01:33 2
Для дочернего окна нужно зарегистрировать отдельный класс с отдельным обработчиком
Иначе получается просто вторая копия главного окна
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.10.2013, 01:33

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

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

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

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

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


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

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

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