Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
13 / 13 / 0
Регистрация: 09.03.2012
Сообщений: 112

Изменение размеров изображения

25.06.2012, 17:56. Показов 1059. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте уважаемые программисты! Вот начал изучать директикс С++ и делаю простенькие примеры из книг, рисую треугольники, вывожу текст на экран, картинки. Вот возникает такая беда, когда меняю размеры окна, то пропорционально меняются размеры всех объектов, которые отображаются в этом окне. Возможно ли (как) сделать так, чтоб при изменении размеров окна, размеры текста, изображения и рисунков оставались неизменными?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.06.2012, 17:56
Ответы с готовыми решениями:

Изменение размеров окна
Народ! Помогите, пожалуйста, кто чем сможет :) Простейший вариант: мне нужно, чтобы при нажатии на кнопку (к примеру, ОК) изменялись...

Автоматическое изменение размеров и положения кнопок
Привет народ. Нужно мне написать небольшую прогу аля-викторина. Вот вопрос: как установить свойства кнопок так, чтобы при изменение...

Изменение размеров изображения
Здравствуйте уважаемые программисты! Вот начал изучать директикс С++ и делаю простенькие примеры из книг, рисую треугольники, вывожу текст...

3
32 / 30 / 6
Регистрация: 21.06.2012
Сообщений: 91
27.06.2012, 15:23
Если я все правильно понял, то они не могут изменяться сами. Это лишь говорит о том, что рисуемые объекты зависят от размеров окна. Кусочек кода в студию, пожалуйста =))
0
13 / 13 / 0
Регистрация: 09.03.2012
Сообщений: 112
27.06.2012, 17:29  [ТС]
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
//-----------------------------------------------------------------------------------
// Treugolnik.CPP 
// Рисуем треугольник
//-----------------------------------------------------------------------------------
 
#include <windows.h>         // Подключаем заголовочный файл Windows
#include <d3d9.h>            // Подключаем заголовочный файл DirectX 9 SDK
 
//-----------------------------------------------------------------------------------
// Глобальные переменные
//-----------------------------------------------------------------------------------
 
LPDIRECT3D9                 pDirect3D          = NULL;      // Direct3D объект
LPDIRECT3DDEVICE9           pDirect3DDevice    = NULL;      // Устройство 
LPDIRECT3DVERTEXBUFFER9     pBufferVershin     = NULL;      // Буфер вершин
 
struct CUSTOMVERTEX     //  Структура задающая формат вершин
{
    FLOAT x, y, z, rhw; //кординаты 
    DWORD color;        //цвет вершин
};
 
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)
 
//-----------------------------------------------------------------------------------
// Функция
// InitialDirect3D()
// Инициализация Direct3D
//-----------------------------------------------------------------------------------
 
HRESULT InitialDirect3D( HWND hwnd )
{
    
    if( NULL == ( pDirect3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
        return E_FAIL;
 
    D3DDISPLAYMODE Display;
    if( FAILED( pDirect3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &Display ) ) )
        return E_FAIL;
 
    D3DPRESENT_PARAMETERS Direct3DParametr; 
    ZeroMemory( &Direct3DParametr, sizeof(Direct3DParametr) );
    Direct3DParametr.Windowed         = TRUE;
    Direct3DParametr.SwapEffect       = D3DSWAPEFFECT_DISCARD;
    Direct3DParametr.BackBufferFormat = Display.Format;
 
    if( FAILED( pDirect3D -> CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd,
                                      D3DCREATE_HARDWARE_VERTEXPROCESSING,
                                      &Direct3DParametr, &pDirect3DDevice ) ) )
    {
        return E_FAIL;
    }
 
    return S_OK;
}
//---------------------------------------------------------------------------------------
// Функция
// InitialBufferVershin()
// Иннициализирует вершины
//---------------------------------------------------------------------------------------
 
HRESULT InitialBufferVershin()
{
   
    CUSTOMVERTEX Vershin[] =
    {
        { 300.0f, 300.0f, 0.5f, 1.0f, 0x00000fff, },  // А
        { 150.0f, 300.0f, 0.5f, 1.0f, 0x00000fff, },  // В
        { 150.0f, 150.0f, 0.5f, 1.0f, 0x00000fff, },  // С
        //  x       y      z    rhw      цвет
 
    };
 
    if( FAILED( pDirect3DDevice->CreateVertexBuffer( 3*sizeof(CUSTOMVERTEX),
                                                  0, D3DFVF_CUSTOMVERTEX,
                                                  D3DPOOL_DEFAULT, &pBufferVershin, NULL ) ) )
    {
        return E_FAIL;
    }
    //Блокируем
    VOID* pBV;
    if( FAILED( pBufferVershin->Lock( 0, sizeof(Vershin), (void**)&pBV, 0 ) ) ) 
        return E_FAIL;
    //Копируем
    memcpy( pBV, Vershin, sizeof(Vershin) );
    // Разблокируем
    pBufferVershin->Unlock();                
 
    return S_OK;
}
 
//-----------------------------------------------------------------------------------
//  Функция
//  RenderingDirect3D()
//  Рисуем
//-----------------------------------------------------------------------------------
 
VOID RenderingDirect3D()
{
    
    if(pDirect3DDevice == NULL)        // Проверяем ошибки
        return;
    
    pDirect3DDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(255,255,0), 1.0f, 0 );
    // Начало сцены
    pDirect3DDevice->BeginScene();     
 
    //  Здесь происходит прорисовка сцены
    pDirect3DDevice->SetStreamSource( 0, pBufferVershin, 0, sizeof(CUSTOMVERTEX) );
    pDirect3DDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
    pDirect3DDevice->DrawPrimitive( D3DPT_TRIANGLELIST , 0, 1 );
    //Конец сцены
    pDirect3DDevice->EndScene();       
    
    pDirect3DDevice->Present( NULL, NULL, NULL, NULL );
      
}
 
//-----------------------------------------------------------------------------------
//  Функция
//  DeleteDirect3D()
//  Освобождает захваченные ресурсы
//-----------------------------------------------------------------------------------
 
VOID DeleteDirect3D()
{
 
    if( pBufferVershin  != NULL)
        pBufferVershin->Release(); 
 
    if( pDirect3DDevice != NULL) 
        pDirect3DDevice->Release();
 
    if( pDirect3D != NULL)
        pDirect3D->Release();
}
 
//-----------------------------------------------------------------------------------
// Функция
// MainWinProc()
// Здесь происходит обработка сообщений
//-----------------------------------------------------------------------------------
 
LRESULT CALLBACK MainWinProc(HWND   hwnd,            
                            UINT    msg,              
                            WPARAM  wparam,           
                            LPARAM  lparam)          
{
 
switch(msg)
    {   
    
     case WM_DESTROY: 
        {
        DeleteDirect3D();
        PostQuitMessage(0);
        return(0);
        } 
    } 
 
  
return DefWindowProc(hwnd, msg, wparam, lparam);
 
} 
 
//-----------------------------------------------------------------------------------
// Функция
// WinMain
// Входная точка приложения
//-----------------------------------------------------------------------------------
 
int WINAPI WinMain( HINSTANCE hinstance,
                    HINSTANCE hprevinstance,
                    LPSTR lpcmdline,
                    int ncmdshow)
{
 
WNDCLASSEX windowsclass;  // Создаем класс
HWND       hwnd;          // Создаем дескриптор окна
MSG        msg;           // Идентификатор сообщения
 
// Определим класс окна WNDCLASSEX
windowsclass.cbSize         = sizeof(WNDCLASSEX);
windowsclass.style          = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
windowsclass.lpfnWndProc    = MainWinProc;
windowsclass.cbClsExtra     = 0;
windowsclass.cbWndExtra     = 0;
windowsclass.hInstance      = hinstance;
windowsclass.hIcon          = LoadIcon(NULL, IDI_APPLICATION);
windowsclass.hCursor        = LoadCursor(NULL, IDC_ARROW);
windowsclass.hbrBackground  = (HBRUSH)GetStockObject(GRAY_BRUSH);
windowsclass.lpszMenuName   = NULL;
windowsclass.lpszClassName  = "WINDOWSCLASS";
windowsclass.hIconSm        = LoadIcon(NULL, IDI_APPLICATION);
 
// Зарегистрируем класс
if (!RegisterClassEx(&windowsclass))
    return(0);
 
// Теперь когда класс зарегестрирован можно создать окно
 
if (!(hwnd = CreateWindowEx(NULL,              // стиль окна
                       "WINDOWSCLASS",         // класс
                       " Урок 4. Рисуем Треугольник ", // название окна
                       WS_OVERLAPPEDWINDOW | WS_VISIBLE,
                       300,150,                // левый верхний угол
                       500,400,                // ширина и высота
                       NULL,                   // дескриптор родительского окна 
                       NULL,                   // дескриптор меню
                       hinstance,              // дескриптор экземпляра приложения
                       NULL)))                 // указатель на данные окна                                            
return 0;
     
     
 if( SUCCEEDED( InitialDirect3D( hwnd ) ) )
  { 
       if( SUCCEEDED( InitialBufferVershin( ) ) )
        {
           ShowWindow( hwnd, SW_SHOWDEFAULT );
           UpdateWindow( hwnd );
 
              ZeroMemory( &msg, sizeof(msg));
              while( msg.message!=WM_QUIT) 
                {
                  if(PeekMessage( &msg, NULL,0,0,PM_REMOVE ))
                   {
                      TranslateMessage( &msg );
                      DispatchMessage( &msg );
                   }
                  else
                  RenderingDirect3D();
                } 
        }
  } 
   return 0;
Этот пример из книги рисует треугольник, когда я мышкой меняю размеры окна, то размеры треугольника тоже меняются.
0
32 / 30 / 6
Регистрация: 21.06.2012
Сообщений: 91
27.06.2012, 17:40
Бах, похоже, что я бегло прочитал вопрос. С Directx лучше, наверное, сюда. Сам я никогда не сталкивался.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.06.2012, 17:40
Помогаю со студенческими работами здесь

Изменение размеров изображения
Мне нужно написать сценарий, в котором при наведении на изображение, оно бы увеличивалось посте-пенно, а при покидании – постепенно...

Изменение размеров изображения
Суть проблемы такая: нужно, уменьшить загружаемое изображения пропорционально, чтобы оно помещалось в квадрат 300 на 300. Т.е. если к...

Изменение размеров изображения
Здравствуйте. Как можно качественно ужать изображение? В частности, с 3888х2592 до 1024х768.

Изменение размеров изображения
Доброго времени суток! Никак не могу найти в интернете нужного мне примера, поэтому прошу Вашей помощи! Суть проблемы в следующем: нужно...

Изменение размеров изображения
Доброго времени суток, форумчане. Появилась задача &quot;обработать&quot; &gt;800 фотографий, а именно сделать их 162X162 пикселя не сжимая/растягивая...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru