Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.01.2023, 16:55   #1
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию Диалоговая панель. Создание шаблона в памяти.

Здравствуйте!
В чём преимущество создания шаблона диалоговой панели в памяти от создания диалоговой панели в редакторе или в текстом виде?
apofioz вне форума Ответить с цитированием
Старый 07.01.2023, 17:28   #2
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию

Правильно ли я понимаю то, как должна выглядеть память, после заполнения её структурами DLGTEMPLATE и DLGITEMTEMPLATE.
Изображения
Тип файла: jpg Безымянный.jpg (43.9 Кб, 1 просмотров)
apofioz вне форума Ответить с цитированием
Старый 08.01.2023, 07:20   #3
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 951
По умолчанию

Цитата:
Сообщение от apofioz Посмотреть сообщение
В чём преимущество
при создании в редакторе удобнее редактировать и сопровождать. Вот и всё отличие, по большому счёту
Алексей1153 вне форума Ответить с цитированием
Старый 08.01.2023, 14:22   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от apofioz Посмотреть сообщение
В чём преимущество создания шаблона диалоговой панели в памяти от создания диалоговой панели в редакторе или в текстом виде?
Ровно в том же, что и преимущество динамических массивов перед статическими.
waleri вне форума Ответить с цитированием
Старый 08.01.2023, 15:26   #5
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Ровно в том же, что и преимущество динамических массивов перед статическими.
Это очень не маленькое преимущество, вот только как реализовать то, что можно проделать с динамическим массивом уменьшить или увеличить его размер, но только с диалогом, я как то понять не могу.
Если создать диалоговое окно с двумя объектами, а затем нужно увеличить количество объектов до 10, то как этого добиться? Если по аналогии с динамическим массивом, то получается нужно выделить память, то количество, которое требуется в данный момент, перенести туда значения из старого массива, и, если нужно, добавить новые значения. Но здесь создаётся панель с помощью функции и после того, как функция отработала память удаляется, значит, если я правильно понял, память нужно не удалять, а проделать те же шаги, что с динамическим массивом, правильно?

Код:
int CreateDlg(HWND hwnd)
{
	TEXTMETRIC tm;
	int cxChar, cyChar;
	{
		HDC hdc = GetDC(hwnd);
		GetTextMetrics(hdc, &tm);
		ReleaseDC(hwmd, hdc);
		cxChar = tm.tmAveCharWidth;
		cyChar = tm.tmHeight + tm.tmExternalLeading;
	}
	
	DWORD dlgUnit = GetDialogBaseUnits();
	cxDlg = LOWORD(dlgUnit);
	cyDlg = HIWORD(dlgUnit);
	
	//Вычислить азмер ширины и высоты в диалоговых единицах
	cxChar = cxChar * 4 / cxDlg;
	cyChar = cyChar * 8 / cyDlg;
	
	WORD* p, *pdlgTemp;
	pdlgTemp = p = (PWORD)LocalAlloc(LPTR, 2000);
	if(p! || !pdlgTemp)
		return FALSE;
	lStyle = DS_CENTER | DS_MODALFRAME | WS_POPUPWINDOW | WS_SYSMENU;
	
	int wDlg, hDlg, wItem, hItem, left, top;
	wItem = 8 * cxChar;
	hItem = cyChar + 2;
	left = top = hItem / 2;
	
	wDlg = wItem * 2 + (5 * cxChar) * 3;
	hDlg = cyChar * 3 + (hItem);
	*p++ = LOWORD(lStyle);
	*p++ = HIWORD(lStyle);
	*p++ = 0;
	*p++ = 0;
	*p++ = 3;
	*p++ = left;
	*p++ = top;
	*p++ = wDlg;
	*p++ = hDlg;
	int nChar = lstrlen(caption);
	*p += nChar;
	p = lpwAlign((LPWORD)p);
	
	//1
	//---------------------------
	lStyle = WS_CHILD | WS_VISIBLE | ES_RIGHT | ES_AUTOHSCROLL |
	         WS_BORDER | WS_TABSTOP;
			 
	left += wItem + wItem;
	top += hItem;
	*p++ = LOWORD(lStyle);
	*p++ = HIWORD(lStyle);
	*p++ = 0;
	*p++ = 0;
	*p++ = left;
	*p++ = top;
	*p++ = wItem;
	*p++ = hItem;
	*p++ = ID_EDIT_ROWS;
	_tcscpy_s((LPTSTR)p, 2000, TEXT("rows"));
	nChar = lstrlen(TEXT("rows"));
	p += nChar;
	*p++ = 0;
	p = lpwAlign((LPWORD)p);
	
	//и.т.д. вставляем нужное количество объектов.
	//Создать модальную диалоговую панель.
	DialogBoxIndirect(hInstance, (LPCDLGTEMPLATE)pdlgTemp,
							    hwnd, (DLGPROC)DlgProc);
	LocalFree(LocalHandle(pdlgTemp));
	
	//И что делать, если после некоторых действий в функции диалога мне нужно 
         //увеличить/уменьшить количество объектов?
	//Вновь выделять память и проделывать те же шаги, что и в начале функции...
}
apofioz вне форума Ответить с цитированием
Старый 08.01.2023, 15:28   #6
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
при создании в редакторе удобнее редактировать и сопровождать.
Я про редактор не спрашивал.
apofioz вне форума Ответить с цитированием
Старый 10.01.2023, 22:53   #7
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию

Что так, мой поясняющий вопрос повис в воздухе, где же ответы, прифи...
apofioz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
WinApi C++ диалоговая панель novicepro Помощь студентам 3 19.05.2013 00:34
Создание шаблона SashaS Microsoft Office Excel 1 03.03.2012 12:14
Создание Шаблона в dreamweaver Obey177 HTML и CSS 13 17.01.2011 01:06
Создание шаблона документа niziriska Общие вопросы .NET 1 30.04.2010 12:05
Диалоговая панель golf Помощь студентам 0 08.12.2009 21:29