Перейти к содержанию
exorcise

Окно с картинкой на C++

Рекомендуемые сообщения

Ну собственно вот, сильно ногами не бейте, несколько раз оговорился при описании загрузки))(сегодня тяпница все таки))

 

Ну и собственно код:

Спойлер

#include <Windows.h>
#include "resource.h"
HWND hWnd;
MSG uMsg;
LRESULT __stdcall WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

int __stdcall WinMain(HINSTANCE hInst, HINSTANCE hPrevInst,LPSTR lpCommandLine , int nCmdShow)
{
	
	WNDCLASSEX WndClass = { 0 };
	WndClass.cbSize = sizeof(WNDCLASSEX);
	WndClass.hbrBackground = CreatePatternBrush(LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP2)));
	WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
	WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
	WndClass.hInstance = hInst;
	WndClass.lpfnWndProc = WndProc;
	WndClass.lpszClassName = "Main Window";

	RegisterClassEx(&WndClass);

	hWnd = CreateWindowEx(0,WndClass.lpszClassName, "WndWithCustumBrush", WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX,
		(GetSystemMetrics(SM_CXSCREEN) - 640) / 2, (GetSystemMetrics(SM_CYSCREEN) - 480) / 2, 640, 480, NULL, NULL, NULL, NULL);

	ShowWindow(hWnd, SW_SHOWDEFAULT);
	while (GetMessage(&uMsg, hWnd, NULL, NULL))
	{
		TranslateMessage(&uMsg);
		DispatchMessage(&uMsg);
	}
	return uMsg.wParam;
}

LRESULT __stdcall WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	// Обработчик оконных сообщений
	switch (uMsg)
	{
	case WM_CLOSE:
		ExitProcess(0);
		break;
	default:
		return DefWindowProc(hWnd, uMsg, wParam, lParam);
	}
}

 

P.S. еще раз извеняюсь за оговорки и голос, чуток синий :D

Изменено пользователем temtriss
  • Понравилось 1
  • Плюс 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо тебе,ты мне реально очень помог,последняя ошибка только осталась:

error LNK2019: ссылка на неразрешенный внешний символ _main в функции "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ)
1>C:\Users\Vasiliy\source\repos\ConsoleApplication2\Debug\ConsoleApplication2.exe : fatal error LNK1120: неразрешенных внешних элементов: 1

Видимо у меня Visual Studio,которая запрещает использовать ресурсы для программы(

 

 

В 19.05.2018 в 01:26, temtriss сказал:

Ну собственно вот, сильно ногами не бейте, несколько раз оговорился при описании загрузки

 

А ты не мог бы мне скинуть свой установочник Visual Studio,а то у меня не поддерживает доступ к ресурсам

 

Изменено пользователем Xipho
Не нужно цитировать сообщение полностью. Это раз. Любой код (даже если это вывод ошибки компилятора) нужно оборачивать специальным тегом. В следуюищй раз будет предупреждение с баллами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 19.05.2018 в 19:23, Andy сказал:

Спасибо тебе,ты мне реально очень помог,последняя ошибка только осталась:error LNK2019: ссылка на неразрешенный внешний символ _main в функции "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ)
1>C:\Users\Vasiliy\source\repos\ConsoleApplication2\Debug\ConsoleApplication2.exe : fatal error LNK1120: неразрешенных внешних элементов: 1

Видимо у меня Visual Studio,которая запрещает использовать ресурсы для программы(

 

С чего такой вывод? У тебя студия ругается. на функцию _main, которую линкер не смог отрезолвить, а ты говоришь, про запрет доступа к ресурсам. Откуда это вообще предположение взялось?

 

В 19.05.2018 в 19:23, Andy сказал:

А ты не мог бы мне скинуть свой установочник Visual Studio,а то у меня не поддерживает доступ к ресурсам

Еще раз, дело тут совершенно не в студии. Читай ошибки компилятора/линкера и исправляй их.

 

Ну и, кстати, такой вопрос сразу - ты вообще в С++ и Visual Studio разбираешься? Или сразу нахрапом пытаешься что-то сделать? Не получится, так как ты уже на старте допускаешь ошибку. У тебя консольное приложение, у таких приложений окон не бывает, соответственно, картинку в такое окно ты вывести не сможешь. Да и в ресурсы там упаковать что-либо тоже проблематично. В общем, мое мнение - слишком рано ты взялся за эти попытки.

1. Изучи саму студию, а именно - как в ней создавать GUI приложения на С++

2. Внимательно посмотри свой код и код, предоставленный выше и найди, как говорится, 10 отличий

3. Скопируй код, пройдись по нему, и пойми, что делает каждая строка кода.

4. Устрани все возможные ошибки компилятора/линкера.

5. Напиши свой вариант загрузки картинки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@Andy @Xipho Ну все уже было сказано выше, могу только чуть-чуть добавить, 

В 19.05.2018 в 17:23, Andy сказал:

"int __cdecl invoke_main(void)"

На сколько я помню, могу конечно ошибатся, но WinMain должна вызыватся по __stdcall соглашению. А из ошибки видно, что оно вызывается по __cdecl, так же WinMain в отличии от main принимает в себя 4 параметра HINSTANCE, HINSTANCE(Вроде не используется и всегда NULL), LPSTR, int

Глянуть подробннее можешь на MSDN, например тут:

https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms633559(v=vs.85).aspx

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, temtriss сказал:

А из ошибки видно, что оно вызывается по __cdecl

У него консольный проект поэтому используется stdcall и поэтому ошибка как сказали выше

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
8 часов назад, partoftheworlD сказал:

У него консольный проект поэтому используется stdcall и поэтому ошибка как сказали выше

Я специально не стал про это писать напрямую, чтобы Энди внимательно почитал код, и сам понял, в чем ошибка. А ты взял и спалил контору ))))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

20 часов назад, partoftheworlD сказал:

У него консольный проект

ну я как бы на это и намекал строкой

 

22 часа назад, temtriss сказал:

WinMain в отличии от main 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

×

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.