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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.09.2014, 18:13   #1
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию Hello world winapi

Код:
#include <windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow)
{ 
    HWND hMainWnd;
	WCHAR szClassName[] = L"myClass";

	MSG msg;
	WNDCLASSEX wc;

	wc.cbSize = sizeof(wc);
	wc.style = CS_HREDRAW | CS_VREDRAW;
	wc.lpfnWndProc = WndProc;
	wc.cbClsExtra = 0;
	wc.cbWndExtra = 0;
	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, L"Cannont register class", L"Error", MB_OK);
		return 0;
	}

	hMainWnd = CreateWindow(szClassName, L"A Hello1 Application", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, 
CW_USEDEFAULT, 0, (HWND)NULL, (HMENU)NULL, (HINSTANCE)hInstance, NULL);

	if(!hMainWnd)
	{
		MessageBox(NULL, L"Cannot create main window", L"Error", MB_OK);
		return 0;
	}

	ShowWindow(hMainWnd, nCmdShow);
	UpdateWindow(hMainWnd);

	while(GetMessage(&msg, NULL, 0,0)) 
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}

	return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	HDC hDC;
	PAINTSTRUCT ps;
	RECT rect;

	switch(uMsg)
	{
		case WM_PAINT:
			hDC = BeginPaint(hWnd, &ps);

			GetClientRect(hWnd, &rect);
			DrawText(hDC, L"Hello World!", -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);

			EndPaint(hWnd, &ps);
			break;

		case WM_CLOSE:
			DestroyWindow(hWnd);
			break;

		case WM_DESTROY:
			PostQuitMessage(0);
			break;

		default: DefWindowProc(hWnd, uMsg, wParam, lParam);
	}
	return 0;
	
}
Вылетает сообщение: Cannot create main window.
Писал с книги, что не так?

Последний раз редактировалось Stilet; 21.09.2014 в 18:19.
Praud вне форума Ответить с цитированием
Старый 21.09.2014, 18:18   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

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

А вообще ты в какой среде пишешь проект? Если в Студии или Кодоблоке то ты зря перебираешь из книги код, заменяя его вместо шаблона, который эти среды тебе сами создают при создании проекта. Оно того не стоит.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.09.2014, 18:34   #3
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

в VS, мне шаблоны не интересны, мне интересно самому узнать как оно все работает.
А где тыкать эту функцию?
Praud вне форума Ответить с цитированием
Старый 21.09.2014, 19:01   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Поставьте высоту не 0 у окна

Цитата:
А где тыкать эту функцию?
Туда, где вы обрабатываете ошибку...
p51x вне форума Ответить с цитированием
Старый 21.09.2014, 19:09   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
мне интересно самому узнать как оно все работает.
Тогда почему спрашиваешь а не читаешь MSDN?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.09.2014, 06:50   #6
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

В строке
default: DefWindowProc(hWnd, uMsg, wParam, lParam);
должно быть
default: return DefWindowProc(hWnd, uMsg, wParam, lParam);
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Hello world pavelslap Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 25.04.2012 15:40
Различие кода mfc и WinApi(mfc ручками набили, а WinApi автоматически с генерировался!! нужно явное отличие, не могу найти) Артём1991 Помощь студентам 0 25.03.2012 17:13
Hello World Syltan Общие вопросы по Java, Java SE, Kotlin 17 14.05.2010 11:21
Hello world Faydaen Общие вопросы C/C++ 2 27.09.2009 22:57
Hello, world! LepihinMS Общие вопросы C/C++ 6 10.06.2008 13:20