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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.05.2012, 16:54   #1
Jugger
Пользователь
 
Регистрация: 30.01.2008
Сообщений: 99
По умолчанию Поля ввода - как лучше сделать и почему не работает

Хочу сделать в окне поля для ввода через которые будут вводиться числа
В дочерних окнах мало что понимаю , поэтому подскажите как нормально будет сделать, или через ресурсы или без них
Вот попробовал кое что, вроде должно поле ввода выводиться, а появляется чистое окно без ничего
Подскажите что не так

Код:

#define IDC_EDIT1 1
// Global Variables:
HINSTANCE hInst;			

HWND hEditCtrl,hWnd;

...


	
	case WM_CREATE:
		hEditCtrl = CreateWindow (L"EDIT",  // стандартный класс
                          TEXT ("Hello"), // Текст Edit'а
                          WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_MULTILINE, // стиль окна, возможны варианты
                          100,              // x
                          100,              // y
                          200,              // ширина
                          10,              // высота
                          hWnd,                       // родительское окно
                          (HMENU) IDC_EDIT1,                       // идентификатор данного контрола
                          hInst,                  // как обычно - экземпляр программы
                          NULL) ; 
		break;
Jugger вне форума Ответить с цитированием
Старый 07.05.2012, 17:43   #2
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Да все нормально. Высота вот только маловата.
Цитата:
10, // высота
EUGY вне форума Ответить с цитированием
Старый 07.05.2012, 19:55   #3
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

У меня вопрос в тему! Диалоговое окно можно только посредством ресурсов создать? Я обзорно пробежался по описанию диалоговых окон в MSDN'e - вроде так получается.

Jugger, если надумаете создавать диалоговое окно с Edit'ами, то вам будет полезно почитать мою тему: http://programmersforum.ru/showthread.php?t=199113 Точнее, вам будет полезно посмотреть сообщение № 10 (там рабочий код):
Цитата:
Сообщение от 8Observer8 Посмотреть сообщение
сообщение № 10

Последний раз редактировалось 8Observer8; 07.05.2012 в 20:03.
8Observer8 вне форума Ответить с цитированием
Старый 07.05.2012, 20:24   #4
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
Диалоговое окно можно только посредством ресурсов создать?
Диалоговое окно - обычное окно, ни что не мешает создать его в коде через createwindow. Но тогда лишаетесь возможности визуального отображения в режиме дизайна. Впрочем, на что там смотреть. Это же не visual basic, где щелкнул на элемент, перескочил на созданный на-лету обработчик.
Можно сделать свои классы, чтобы не писать каждый раз рутину создания окон и главного цикла.
EUGY вне форума Ответить с цитированием
Старый 07.05.2012, 22:28   #5
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

То есть я смогу использовать процедуру диалогового окна DialogProc? http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
8Observer8 вне форума Ответить с цитированием
Старый 07.05.2012, 22:56   #6
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
То есть я смогу использовать процедуру диалогового окна DialogProc?
Вообщем да.
Создать диалоговое окно без вызова DialogBoxParam ?

Ну если бы DialogBoxParam пропала и мне бы сказали, давай, а то хана майкрософту, напиши ее заново, то начал бы я ее с такой болванки:

Код:
INT_PTR MyDialogBoxParam(HINSTANCE hInstance, LPCTSTR lpTemplateName, HWND hWndParent,  DLGPROC lpDialogFunc,  LPARAM dwInitParam)
{
	//dwInitParam - лень думать, куда приткнуть
	HWND  hdlg = CreateDialog(hInstance, lpTemplateName, hWndParent, lpDialogFunc);
	EnableWindow(hWndParent, FALSE);
	ShowWindow(hdlg,SW_SHOW);
	MSG msg;
	while(GetMessage(&msg,NULL,0,0))
	{
		if (!IsDialogMessage(hdlg, &msg))
		{
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		
		}
	}
	EnableWindow(hWndParent, TRUE);
	DestroyWindow(hdlg);
	return (INT_PTR) msg.wParam;
}

int _stdcall WinMain(HINSTANCE hInst, HINSTANCE,LPSTR,int)
{
	return MyDialogBoxParam(hInst, MAKEINTRESOURCE(IDD_DIALOG1), NULL, BasicDialogProc, NULL);
}
EUGY вне форума Ответить с цитированием
Старый 07.05.2012, 23:30   #7
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Я так понимаю, подразумевается (в вашем коде), что окно диалога описано в файле ресурсов (.rc). А можно ли без ресурсов? Вы писали, что можно создать диалоговое окно с помощью CreateWindow(). Как связать вместе создание диалогового окна без задействования ресурсов и диалоговую процедуру?
8Observer8 вне форума Ответить с цитированием
Старый 07.05.2012, 23:46   #8
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

А Вы об этом...
конечно можно вообще без ресурсов.
Вот:
Код:
LRESULT CALLBACK BasicDialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
{

	switch (uMsg)
	{
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	}

	return DefWindowProc(hwndDlg, uMsg,wParam, lParam);
}

int _stdcall WinMain(HINSTANCE hInst, HINSTANCE,LPSTR,int)
{

	HWND hdlg = CreateWindow(TEXT("#32768"), NULL, WS_VISIBLE|WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL, NULL, hInst, NULL);
	HWND hEdit = CreateWindow(TEXT("EDIT"), NULL, WS_CHILD|WS_VISIBLE, 0,0,200,50, hdlg, NULL,hInst, NULL);
	SetWindowLong(hdlg, GWL_WNDPROC, (LONG)BasicDialogProc);
	MSG msg;
	while(GetMessage(&msg,NULL,0,0))
	{
		if (!IsDialogMessage(hdlg, &msg))
		{
			TranslateMessage(&msg);
			DispatchMessage(&msg);

		}
	}
	return 0;
}

PS.
Но обычно, вместо CreateWindow(TEXT("#32768"),....
регистрируют свой класс окна через WNDCLASSEX / RegisterClassEx
И в нем указывают какая иконка, курсор, заливка, процедура используется окном по умолчанию.

Последний раз редактировалось EUGY; 07.05.2012 в 23:51.
EUGY вне форума Ответить с цитированием
Старый 08.05.2012, 00:00   #9
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

О! Спасибо огромное!
8Observer8 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как избавиться от ошибки если поля ввода пусты? kazzz Общие вопросы Delphi 7 22.03.2011 07:31
Как реализовать автовыделение текстового поля ввода? akokin JavaScript, Ajax 3 03.11.2010 22:25
Как сделать запрет ввода букв в поле для ввода input zvezda_t PHP 1 27.12.2009 22:02
ООП как лучше, и почему так. optimist32 Общие вопросы C/C++ 6 15.11.2009 04:43
Как очистить поля ввода на форме? Lich87 C++ Builder 2 23.10.2009 14:41