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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.10.2009, 21:25   #1
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию HELLO WORLD!!- непонятно некоторое

прокомментируйте плиз то, что у меня в комментариях под вопросом стоит
Код:
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
	HWND hMainWind;
	char szClassName[]=" My Class";
	MSG msg;//это структура, которая содержит сообщения, пришедшие от винды
		WNDCLASSEX wc;//это структура окна. нужна для создания окна с заданными в ней параметрами
		
		//Заполняем структуру класса окна
		wc.cbSize=sizeof(wc);//значение этого поля доджно быть равно длине структуры
		wc.style=CS_HREDRAW|CS_VREDRAW;//????????
		wc.lpfnWndProc=WndProc;
		wc.cbClsExtra=0;// число дополнительных байтов, которые должны быть распределены в конце структуры класса
		wc.cbWndExtra=0;//число доплнительных байтов, которые должны быть распределены вслед за экземпляром окна
		//что вообще делают эти самые wc.cbClsExtra и wc.cbWndExtra???
		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.lpszClassName=szClassName;//????
		wc.hIconSm=LoadIcon(NULL, IDI_APPLICATION);
		
		//Регестрируем класс окна
		if(!RegisterClassEx(&wc))//?? условие ??
		{
			MessageBox(NULL, "Cannot register class", "ERROR", MB_OK);
			return 0;//зачем нужен return??
		}





	MessageBox( NULL, "Hello!", "Hellow From message Box",MB_OK);
	return 0;
}
Dimarik вне форума Ответить с цитированием
Старый 16.10.2009, 21:27   #2
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

и ещё какие-то непонятные ошибки выскочили. непонятные потому, что не выделена строка, где косяк
1>------ Build started: Project: Hello, Configuration: Debug Win32 ------
1>Linking...
1>Hello.obj : error LNK2019: unresolved external symbol "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z) referenced in function _WinMain@16
1>C:\Documents and Settings\Дима\Мои документы\Visual Studio 2008\Projects\Project1\Hello\Debug\ Hello.exe : fatal error LNK1120: 1 unresolved externals
1>Build log was saved at "file://c:\Documents and Settings\Дима\Мои документы\Visual Studio 2008\Projects\Project1\Hello\Debug\ BuildLog.htm"
1>Hello - 2 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

правда я ещё проект не доделал, но тем не менее
Dimarik вне форума Ответить с цитированием
Старый 16.10.2009, 21:30   #3
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

О структуре класса окна читаем тут и тут.
Цитата:
if(!RegisterClassEx(&wc))//?? условие ??
{
MessageBox(NULL, "Cannot register class", "ERROR", MB_OK);
return 0;//зачем нужен return??
}
Если не зарегестрировали в системе класс окна тогда выходим из функции WinMain.

Последний раз редактировалось profi; 16.10.2009 в 21:32.
profi вне форума Ответить с цитированием
Старый 16.10.2009, 22:19   #4
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

более подробный код
Код:
#include <windows.h>
//LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
	HWND hMainWind;
	char szClassName[]=" My Class";
	MSG msg;//это структура, которая содержит сообщения, пришедшие от винды
		WNDCLASSEX wc;//это структура окна. нужна для создания окна с заданными в ней параметрами
		
		//Заполняем структуру класса окна
		wc.cbSize=sizeof(wc);//значение этого поля доджно быть равно длине структуры
		wc.style=CS_HREDRAW|CS_VREDRAW;//????????
		wc.lpfnWndProc=WndProc;
		wc.cbClsExtra=0;// число дополнительных байтов, которые должны быть распределены в конце структуры класса
		wc.cbWndExtra=0;//число доплнительных байтов, которые должны быть распределены вслед за экземпляром окна
		//что вообще делают эти самые wc.cbClsExtra и wc.cbWndExtra???
		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.lpszClassName=szClassName;//????
		wc.hIconSm=LoadIcon(NULL, IDI_APPLICATION);
		
		//Регестрируем класс окна
		if(!RegisterClassEx(&wc))//?? условие ??
		{
			MessageBox(NULL, "Cannot register class", "ERROR", MB_OK);
			return 0;//зачем нужен return??
		}
		

		//создаём основное окно приложения
		hMainWnd=CreateWindow(szClassName, "Hellow, Application1", 
			WS_OVERLAPPEWINDOW, 
			CW_USEDEFAULT,0,CWUSEDEFAULD,0, (HWND)NULL, (HMENU)NULL, 
			(HINSTANCE)hInstance, NULL);//что за параметры????
		if (!hMainWnd)//что за условие??
		{
			MessageBox(NULL,"Cannot create window","ERROR", MB_OK);
			return 0;
		}
		//показываем наше окно
		ShowWindiw(hMainWnd), nCmdShow);//что за параметры стоят?
		//UpdateWindow(hMainWnd)//это тоже функция для отображения окна?

		//выполняем цикл обработки сообщений до закрытия приложения
		while (GetMessage(&msg, NULL, 0, 0)
		{
			TranslateMessage(&msg, NULL,0,0);
			DispatchMessage(&msg);
		}//что это за цикл , какие в нём параметры и что тут за функции с непонятными параметрами?













	MessageBox( NULL, "Hello!", "Hellow From message Box",MB_OK);
	return 0;
}
Dimarik вне форума Ответить с цитированием
Старый 16.10.2009, 22:30   #5
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Цитата:
hMainWnd=CreateWindow(szClassName, "Hellow, Application1",
WS_OVERLAPPEWINDOW,
CW_USEDEFAULT,0,CWUSEDEFAULD,0, (HWND)NULL, (HMENU)NULL,
(HINSTANCE)hInstance, NULL);//что за параметры????
Вы читать умеете??????????????????? Я же вам дал ссылку на очень хороший сайт где эти все вещи обясняются детально. Зачем задавать вопросы если можно взять и почитать.

Цитата:
if (!hMainWnd)//что за условие??
{
MessageBox(NULL,"Cannot create window","ERROR", MB_OK);
return 0;
}
Если не создали окно выйти из функции WinMain.

По поводу этого:

Код:
		while (GetMessage(&msg, NULL, 0, 0)
		{
			TranslateMessage(&msg, NULL,0,0);
			DispatchMessage(&msg);
		}
Вот

Учитесь пользоваться поиском.
profi вне форума Ответить с цитированием
Старый 16.10.2009, 22:41   #6
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от Dimarik
//создаём основное окно приложения
hMainWnd=CreateWindow(szClassName, "Hellow, Application1",
WS_OVERLAPPEWINDOW,
CW_USEDEFAULT,0,CWUSEDEFAULD,0, (HWND)NULL, (HMENU)NULL,
(HINSTANCE)hInstance, NULL);//что за параметры????
if (!hMainWnd)//что за условие??
{
MessageBox(NULL,"Cannot create window","ERROR", MB_OK);
return 0;
}
//показываем наше окно
ShowWindiw(hMainWnd), nCmdShow);//что за параметры стоят?
//UpdateWindow(hMainWnd)//это тоже функция для отображения окна?

//выполняем цикл обработки сообщений до закрытия приложения
while (GetMessage(&msg, NULL, 0, 0)
{
TranslateMessage(&msg, NULL,0,0);
DispatchMessage(&msg);
}//что это за цикл , какие в нём параметры и что тут за функции с непонятными параметрами?
CreateWindow - ф-ция создания окна, в случае неудачи возвращает 0. Первым параметром принимает строку - имя класса окна, который предварительно должен быть зарегистрирован в системе(RegisterClass). Вторым параметром имя окна(то что будет отображаться в заголовке). Третьим параметром стили окна(WS_OVERLAPPEDWINDOW - Окно с рамкой и кнопками "закрыть", "свернуть", "развернуть"). Следующие четыре параметра отвечают за размеры и позиционирование окна. Восьмым идёт параметр - дескриптор окна-родителя. Если окна-родителя нет, то передаётся 0. Девятый - дескриптор связанного ресурса меню, или идентификатор окна(для WM_COMMAND в WndProc). Десятый - Дескриптор приложения, которое создаёт это окно. Одинадцатое - указатель на структуру, Вам пока не надо, если есть желание - почитайте на MSDN.
Из описания CreateWindow становится ясным следующая проверка(если 0(то бишь окно не создалось) - выдать сообщения об этом и завершить программу).
ShowWindow - Ф-ция для показа/скрытия окна. Первый параметр - дескриптор окна, которое нужно показывать, второй - что именно делать(показывать/скрывать/ещё-что-то). SW_SHOW - константа, которая может быть вторым параметром этой ф-ции, говорит, что окно надо показать, SW_HIDE - скрыть. Вызов этой функции не обязателен, если при создании окна в стилях указать так же стиль WS_VISIBLE.
UpdateWindow - Ф-ция, которая провоцирует перерисовку окна. Единственным параметром выступает дескриптор окна.
Следом идёт цикл. Условием завершения есть получение, в качестве возвращаемого значения от GetMessage, нуля.
Сама функция GetMessage берёт сообщение для окна из очереди сообщений и кладёт его в msg, типа MSG. Внутри цикла ещё две функции - TranslateMessage и DispatchMessage. Первая переводит сообщение из WM_KEYDOWN в WM_CHAR для некоторых символов(тут не уверен, но вроде так). Вторая отправляет сообщение в оконную процедуру, связанную с окном.
netrino вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возвести в степень b некоторое число a Михаил70 Общие вопросы Delphi 3 09.09.2009 16:10
По любому, такие есть! которые некоторое свое свободное время проводят за WOW Geg[C/c++] Свободное общение 13 19.08.2009 16:52
Непонятно.... IICuX123 Общие вопросы .NET 2 23.07.2009 10:27
непонятно StasSv Microsoft Office Excel 1 26.02.2009 14:16
что то непонятно sergei64_89 Общие вопросы C/C++ 9 25.05.2008 16:58