Форум программистов, компьютерный форум CyberForum.ru

Добавление кнопок в диалоговое окно - C++

Восстановить пароль Регистрация
 
raaawr
0 / 0 / 0
Регистрация: 20.09.2012
Сообщений: 40
25.06.2013, 22:48     Добавление кнопок в диалоговое окно #1
программа: моделирование идеального газа"
Можно ли в проекте Win32 вообще добавить кнопки?
Есть в нем конструктор как в с#?
Нужно поместить 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
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
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
// Идеальный газ.cpp: определяет точку входа для приложения.
//
 
#include "stdafx.h"
#include "Идеальный газ.h"
#include <windows.h>
#include<time.h>
#include<cmath>
 
// --- Описание функции главного окна
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
 
 
// --- Глобальные переменные
HINSTANCE hInst;  
int x0[1000],y00[1000],R[1000],dx[1000],dy[1000];
int N=30;
 
// Дескриптор экземпляра приложения
wchar_t ClassName[]=L"Window";         // Название класса окна
wchar_t AppTitle[]=L"Application Win32";      // Заголовок главного окна
 
WNDPROC OldWndProc;
LRESULT CALLBACK WndProc1(HWND,UINT,WPARAM,LPARAM);
 
 
// --- Функция WinMain
int WINAPI WinMain(
 HINSTANCE hInstance,              // Дескриптор экземпляра приложения
 HINSTANCE hPrevInstance,   // В Win32 всегда равен NULL
 LPSTR lpCmdLine,           // Указатель на командную строку. Он позволяет
                            // приложению получать данные из командной строки.
 int nCmdShow               // Определяет, как приложение первоначально
                            // отображается на дисплее: пиктограммой
                            // (nCmdShow = SW_SHOWMINNOACTIVE)
                            // или в виде открытого окна
                            //(nCmdShow = SW_SHOWNORMAL).
 )
{
 WNDCLASS wc;  // Структура для информации о класса окна
 HWND hWnd;   // Дескриптор главного окна приложения
 MSG msg;     // Структура для хранения сообщения
 
 // Сохраняем дескриптор экземпляра приложения в глобальной переменной,
 // чтобы при необходимости воспользоваться им в функции окна.
 hInst=hInstance;
 srand((unsigned)time(NULL));
 int j=0;
 for(int i=0;i<N;i++)
 {
    x0[i]=(i%10)*65+50;//координаты по x
    y00[i]=j*65+50;    //координаты по y
    if (i%10==0) j++;  //просто так распределяем шары, чтобы изначально, они не были наложены друг на друга
    R[i]=12;//радиусы шаров
    dx[i]=rand()%3+2;//скорости по x
    dy[i]=rand()%3+2;//скорости по y
 }
 
 if((hWnd=FindWindow(ClassName, NULL))!=NULL)
 {
        if(IsIconic(hWnd)) ShowWindow(hWnd, SW_RESTORE);
        SetForegroundWindow(hWnd);
        return FALSE;
 }
 
 
 // --- Работающая копия не найдена - функция WinMain приступает к инициализации.
 // Заполнение структуры WNDCLASS для регистрации класса окна.
 memset(&wc, 0, sizeof(wc));
 wc.lpszClassName=ClassName;                           // Имя класса окон
 wc.lpfnWndProc=(WNDPROC)WndProc;               // Адрес оконной функции
 wc.style=CS_HREDRAW|CS_VREDRAW;                       // Стиль класса окон
 wc.hInstance=hInstance;                               // Экземпляр приложения
 wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);       // Пиктограмма для окон
 wc.hCursor=LoadCursor(NULL,IDC_ARROW);                // Курсор мыши для окон
 wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); // Кисть для окон
 wc.lpszMenuName=NULL;                                 // Ресурс меню окон
 wc.cbClsExtra=0;                               // Дополнительная память
 wc.cbWndExtra=0;                               // Дополнительная память
 
 
 // Pегистрация класса окна.
 RegisterClass(&wc);
 
 
 // Создаем главное окно приложения.
 hWnd=CreateWindow(
        ClassName,                 // Имя класса окон
        AppTitle,                  // Заголовок окна
        WS_OVERLAPPEDWINDOW,              // Стиль окна
        CW_USEDEFAULT,                    // X-координаты
        CW_USEDEFAULT,                    // Y-координаты
        CW_USEDEFAULT,                    // Ширина окна
        CW_USEDEFAULT,                    // Высота окна
        NULL,                      // Дескриптор окна-родителя
        NULL,                      // Дескриптор меню окна
        hInst,                     // Дескриптор экземпляра приложения
        NULL);                     // Дополнительная информация
 if(!hWnd)
 {
        // Окно не создано, выдаем предупреждение.
        MessageBox(NULL,L"Create: error",AppTitle,MB_OK|MB_ICONSTOP);
        return FALSE;
 }
 
 
 // Отображаем окно.
 ShowWindow(hWnd, nCmdShow);
 
 
 // Обновляем содержимое клиентской области окна.
 UpdateWindow(hWnd);
 
 SetTimer(hWnd,1,15,NULL);
 
 // Запускаем цикл обработки очереди сообщений. Функция GetMessage получает
 // сообщение из очереди, выдает false при выборке из очереди сообщения WM_QUIT
 while(GetMessage(&msg, NULL, 0, 0))
 {
        // Преобразование некоторых сообщений, полученных с помощью клавиатуры
        TranslateMessage(&msg);
 
 
        // Отправляем сообщение оконной процедуре
        DispatchMessage(&msg);
 }
KillTimer(hWnd,1);
 
 return msg.wParam;
}
 
LRESULT CALLBACK WndProc1(HWND hWnd,UINT msg, WPARAM wParam,LPARAM lParam)
 {
        switch(msg)
        {
        case WM_LBUTTONDOWN:{SetWindowText(hWnd,L"");
                         };
               default: return CallWindowProc(OldWndProc,hWnd,msg,wParam,lParam);
        }
        return 0l;
 }
// --- Функция окна
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
 switch(msg)
 {
        // Необходимо обновить содержимое клиентской области окна.
        case WM_TIMER:
        {   
            //если два шара столкнулись сделать то же что и со столкновением со стенкой поменять скорость
            HDC hDC[1000];
            RECT u;
            GetClientRect(hWnd,&u);//получаем размеры окна - структуру u с полями право, лево...
            int X=u.right-u.left;//ширина окна
            int Y=u.bottom-u.top;//высота окна
            HBRUSH WHITEBrush[1000];
            HBRUSH OldBrush[1000];
            HPEN WhitePen[1000];
            HPEN OldPen[1000];
            HBRUSH REDBrush[1000];
            HPEN REDPen[1000];
 
 
            for(int i=0;i<N;i++)//проверка столкновений со стенами
            {
                if ((X<=x0[i]+(R[i]+dx[i])) || (x0[i]-(R[i]-dx[i])<=0))
                {
                    dx[i]=-dx[i];
                }
                if((Y<=y00[i]+(R[i]+dy[i])) || (y00[i]-(R[i]-dy[i])<=0))
                {
                    dy[i]=-dy[i];
                }
 
                hDC[i]=GetDC(hWnd);     //получаем хэндл окна
    //-----     
                WHITEBrush[i]=CreateSolidBrush(RGB(255,255,255));   OldBrush[i]=(HBRUSH)SelectObject(hDC[i],WHITEBrush);//создаем белую кисть
                WhitePen[i]=CreatePen(PS_SOLID,1,RGB(255,255,255)); OldPen[i]=(HPEN)SelectObject(hDC[i],WhitePen[i]);//создаем белый карандаш
 
                Ellipse(hDC[i],x0[i]-R[i],y00[i]-R[i],x0[i]+R[i],y00[i]+R[i]);//рисуем шарик на месте старого зеленого шарика
 
                SelectObject(hDC[i],OldBrush[i]); 
                SelectObject(hDC[i],OldPen[i]); 
                DeleteObject(WHITEBrush[i]);//Удаляем белую кисть (которой стираем зеленый карандаш)    
                DeleteObject(WhitePen[i]);  //Удаляем белый карандаш (которым стираем красный карандаш)
 
                REDBrush[i]=CreateSolidBrush(RGB(0,255,0));   OldBrush[i]=(HBRUSH)SelectObject(hDC[i],REDBrush[i]); //создаем зеленую кисть
                REDPen[i]=CreatePen(PS_SOLID,1,RGB(0,255,0)); OldPen[i]=(HPEN)SelectObject(hDC[i],REDPen[i]);//создаем зеленый карандаш
            
                x0[i]=x0[i]+dx[i];  //передвигаемся на скорость (на dx) по оси x
                y00[i]=y00[i]+dy[i];//передвигаемся на скорость (на dy) по оси y
                Ellipse(hDC[i],x0[i]-R[i],y00[i]-R[i],x0[i]+R[i],y00[i]+R[i]); //рисуем окружность (эллипс с одинаковыми радиусами)
                SelectObject(hDC[i],OldBrush[i]); //удаляем с экрана шарик
                SelectObject(hDC[i],OldPen[i]);   //удаляем с экрана шарик
                DeleteObject(REDBrush[i]);        //удаляем с экрана шарик
                DeleteObject(REDPen[i]);          //удаляем с экрана шарик
                ReleaseDC(hWnd,hDC[i]);//освобождаем хэндл окна
            }
 
            for(int i=0;i<N;i++)//проверка столкновений между шарами 
            {
                for(int j=0;j<N;j++)
                {
                    if(i==j) continue;
                    if (sqrt((double)(x0[i]-x0[j])*(x0[i]-x0[j])+(y00[i]-y00[j])*(y00[i]-y00[j]))<=R[j]+R[i]- 1)
                    {
                        dx[i]=-dx[i];
                        dy[i]=-dy[i];
                    }
                }
            }
 
 
        };break;
 
     
        case WM_COMMAND:
 {      UINT idCtrl=LOWORD(wParam); // идентификатор дочер. окна
        UINT code=HIWORD(wParam);  // код уведомления
        HWND hChild=(HWND)lParam;  // дескриптор дочер. окна
        if(idCtrl==1 && code==EN_CHANGE)
        {
              //MessageBoxA(hWnd, "chang", "Window",MB_OK|MB_ICONINFORMATION);
       
        }
 }; return 0;
 
        // Пользователь удалил окно.
        case WM_DESTROY:
        {
               // Если данная функция является оконной функцией главного окна, то
               // следует в очередь сообщений приложения послать сообщение WM_QUIT
               PostQuitMessage(0);
        }; break;
 
 
        // Необработанные сообщения передаем в стандартную
        // функцию обработки сообщений по умолчанию.
        default: return DefWindowProc(hWnd, msg, wParam, lParam);
 }
 return 0l;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.06.2013, 22:48     Добавление кнопок в диалоговое окно
Посмотрите здесь:

Диалоговое окно при выходе из программы C++
C++ Как импортировать ресурс "диалоговое окно" из другого проекта?
C++ Диалоговое окно, переполнение стека
C++ Как сделать, чтобы диалоговое окно не закрывалось при нажатии клавиши ENTER?
C++ Win32 VS 10 и простейшее диалоговое окно
Не появляется диалоговое окно C++
C++ открыть диалоговое окно с помошью меню
C++ Диалоговое окно "ОК"/"Отмена"

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Игорь с++
 Аватар для Игорь с++
429 / 452 / 15
Регистрация: 26.01.2011
Сообщений: 2,029
25.06.2013, 23:11     Добавление кнопок в диалоговое окно #2
Цитата Сообщение от raaawr Посмотреть сообщение
Можно ли в проекте Win32 вообще добавить кнопки?
Конечно , можно . А как ты думаешь шарп их добавляет , когда ты их мышкой нарисовал ?
C++
1
2
3
4
5
#define BTN 0x0000012
hButton = CreateWindow("button", "Какой то там глаз",
                                WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON,
                                5, 5, 175, 75, hwnd, (HMENU)BTN, 
                                hInstance, NULL);
raaawr
0 / 0 / 0
Регистрация: 20.09.2012
Сообщений: 40
25.06.2013, 23:29  [ТС]     Добавление кнопок в диалоговое окно #3
вообщем чтобы подключить конструктор,как я понял, нужно при создании проекта Win32 сделать следующее:

В узле Visual C++ области Типы проектов выберите пункт CLR, а затем в области Установленные шаблоны Visual Studio выберите пункт Библиотека элементов управления Windows Forms.
НО я в упор не вижу библиотеку элементов винд формс

Добавлено через 1 минуту
я дебил,нашел все

Добавлено через 1 минуту
хотя нет, не нашел
Yandex
Объявления
25.06.2013, 23:29     Добавление кнопок в диалоговое окно
Ответ Создать тему
Опции темы

Текущее время: 03:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru