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

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

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.01.2012, 22:10   #1
#include <Markus>
Неистово негодуэ
Пользователь
 
Аватар для #include <Markus>
 
Регистрация: 11.09.2011
Сообщений: 61
Смущение Паранойя, или как создать окно?

Здравствуйте.

Проблема, собственно в чем? Мне надоело штамповать игры, в которых вместо спрайтов(сладкое газированное зеленое слово) используются символы, а именно, в псевдографике =)
Хотя очень сложно предать мое любимое 16ти-цветное, 256ти-символьное чудо, под названием ДОС-окно(или консолька), но все же современные люди требуют современной графики... Хотя бы второй половины двадцатого века. И предпочтительнее будет программировать игры уже в графике.
Я знаю только С++, и всю жизнь, после того, как научился выводить информацию, пишу и работаю только в консоле. Следовательно, решил сначала создать окно при помощи Visual Studio, а именно, форму(если я правильно выражаюсь). Значит, создаю дефолтный проект с формами и т.п., пол часа пытаюсь ореинтироваться в пространстве дофигищи папок, нахожу все таки там код, читаю код, пугаюсь кода, выхожу из вижла, успокаиваюсь, захожу в папку с проектами и решительно удаляю все к чертовой бабушке!

Низнаю, расчитан ли проект для роботы в нем простого смертного, не состоящего программистом в Майкросовте, или это у меня из-за непривычки при переходе от белоснежного консольного "пустого проекта", но ясно одно - нужно с этим разобраться.

Теперь вопрос: как там(в проекте формы) сделать хоть что-нибудь?! Каким образом? Как вообще управлять со всеми кнопочками, флажками и т.д., при этом не потеряться в этом "дефолтном" коде?

Требование: прошу написать мне маленькую программку, инициализирующую форму, кнопку, или что-то другое(главное, понять суть). Желательно еще это сделать наиболее простым методом, чтобы все координаты кнопочек, окошечек писались именно в коде, а не редактировались рукой.
Если это не возможно или букв слишком много, прошу хотя бы прокоментировать все. Желательно, каждый символ(но это уже крайность).

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

Спасибо большое.

P.S. Если кто-то скажет про ОпенГЛ(а такие будут), то решительно таковых заверяю, что лучше я буду рисовать в форме, чем инициализировать "такое", да еще и разбираться в нем... Молод еще я, не хочу лишаться... хм... не важно.
Жёстко негодую и тупю на всех.
#include <Markus> вне форума Ответить с цитированием
Старый 24.01.2012, 22:32   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

в студии нет редактора окон для чистого С++(проект Win32).

нужно самому на АПИ это делать:
Код:
#include <windows.h>
#include <gl\gl.h>
#pragma comment(lib,"opengl32.lib")
#include <gl\GLU.h>
#pragma comment(lib,"glu32.lib")

HGLRC gl;

LRESULT CALLBACK phWndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
	switch(uMsg)
	{
	case(WM_CREATE):
		{
			PIXELFORMATDESCRIPTOR pfd;
			HDC dc=GetDC(hwnd);
			ZeroMemory(&pfd,sizeof(pfd));
			pfd.nSize=sizeof(pfd);
			pfd.nVersion=1;
			pfd.dwFlags=PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL|PFD_DOUBLEBUFFER;
			pfd.iPixelType=PFD_TYPE_RGBA;
			pfd.cColorBits=32;
			pfd.iLayerType=PFD_MAIN_PLANE;
			int pf=ChoosePixelFormat(dc,&pfd);
			SetPixelFormat(dc,pf,&pfd);
			gl=wglCreateContext(dc);
			ReleaseDC(hwnd,dc);
			SetTimer(hwnd,0,25,0);
			break;
		}
	case(WM_DESTROY):
		{
			wglDeleteContext(gl);
			KillTimer(hwnd,0);
			PostQuitMessage(0);
			return 0;
			break;
		}
	case(WM_CHAR):
		{
			PostMessage(hwnd,WM_DESTROY,0,0);
			break;
		}
	case(WM_PAINT):
		{
			HDC dc=GetDC(hwnd);
			wglMakeCurrent(dc,gl);
			//тут рисуем на OpenGL
			wglMakeCurrent(0,0);
			SwapBuffers(dc);
			ReleaseDC(hwnd,dc);
			break;
		}
	case(WM_TIMER):
		RedrawWindow(hwnd,0,0,RDW_INTERNALPAINT);
		break;
	}
	return DefWindowProc(hwnd,uMsg,wParam,lParam);
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
	WNDCLASSEXA cd;
	cd.cbSize=sizeof(WNDCLASSEXA);
	cd.style=CS_HREDRAW|CS_OWNDC|CS_VREDRAW;
	cd.lpfnWndProc=phWndProc;
	cd.cbWndExtra=0;
	cd.cbClsExtra=0;
	cd.hInstance=hInstance;
	cd.hCursor=LoadCursor(hInstance,IDC_ARROW);
	cd.hIcon=LoadIcon(hInstance,IDI_APPLICATION);
	cd.hbrBackground=(HBRUSH)COLOR_BACKGROUND+1;
	cd.lpszMenuName=0;
	cd.lpszClassName="phWndForGL";
	cd.hIconSm=0;
	if(!RegisterClassExA(&cd))return 1;
	HWND w=CreateWindowExA(0,"phWndForGL","GLT1",WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN|WS_CLIPSIBLINGS,0,0,800,600,0,0,hInstance,0);
	if(!w)return 2;
	ShowWindow(w,SW_SHOW);
	MSG m;

	while(GetMessageA(&m,0,0,0))
	{
		TranslateMessage(&m);
		DispatchMessageA(&m);
	}
	return 0;
}
вот код создания окна с инициализацией OpenGL, и перерисовкой окна по таймеру.
выход из окна по нажатию любой клавиши.(самого рисования тут нет, не помню почему, но помечено место где надо было рисовать)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как создать окно Arassir JavaScript, Ajax 2 26.06.2011 16:45
Как создать необычное окно? Fog Win Api 3 31.01.2011 12:22
Паранойя или реальность !? gefest58 Свободное общение 17 06.01.2011 18:40
Как создать окно без рамки Electron Общие вопросы C/C++ 1 19.03.2010 09:37
«Окно+символ». Создать класс, представляющий окно в текстовом режиме. RustreX Паскаль, Turbo Pascal, PascalABC.NET 1 11.11.2007 19:28