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

Окно с картинкой на 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 

 

 

 

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

×
×
  • Создать...

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

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