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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2023, 22:44   #1
brodnik
Пользователь
 
Регистрация: 28.01.2023
Сообщений: 35
По умолчанию Графика в С++

Голову уже сломал. Не могу вывести точку на экран. Без сторонних библиотек, типа SFML, без ООП. Хотя бы подскажите, где искать?
brodnik вне форума Ответить с цитированием
Старый 28.01.2023, 22:59   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

А можно немного больше подробностей. Для какой системы вы собираетесь это написать (Windows, Linux итд)? Для чего нужно это действие (просто надоедливая точка на экране, растровая/векторная графика, отображение текстов, видео, 3d графика)?
macomics вне форума Ответить с цитированием
Старый 28.01.2023, 23:38   #3
brodnik
Пользователь
 
Регистрация: 28.01.2023
Сообщений: 35
По умолчанию

Для Windows, векторная, хотя это не принципиально. Для чего нужна - пусть будет просто надоедливая точка на экране.
brodnik вне форума Ответить с цитированием
Старый 28.01.2023, 23:42   #4
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Тогда вот это, а дальше по ссылкам на странице

Вот только я не просто так перечислил эти задачи. Для них нужны разные подходы к выводу графики

https://learn.microsoft.com/ru-ru/wi.../using-bitmaps

Последний раз редактировалось macomics; 28.01.2023 в 23:53.
macomics вне форума Ответить с цитированием
Старый 28.01.2023, 23:55   #5
brodnik
Пользователь
 
Регистрация: 28.01.2023
Сообщений: 35
По умолчанию

А нельзя образец кода? #include и все такое прочее. Вы извините за наглость, мозги уже отключаются. Пример для visual studio 2022.

Последний раз редактировалось brodnik; 29.01.2023 в 00:20.
brodnik вне форума Ответить с цитированием
Старый 29.01.2023, 00:44   #6
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

По первой же ссылке во второй присланной мной странице

https://learn.microsoft.com/ru-ru/wi...uring-an-image

Код:
#include<windows.h>
#include<tchar.h>

//#include "Counter.h"


#define ID_TIMER 1

struct TextAnimation
{
	POINT textPos;
	DWORD startTime;
	TCHAR chString[128];
	UINT  uiLenString;
};

BOOL RegClass(WNDPROC proc, LPCTSTR szName, UINT brBackground);

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

TCHAR szMainClass[] = TEXT("_ClassName_");
TCHAR szTitle[] = TEXT("Pop up Text");

SIZE sz;
RECT rcUpdata;

void DrawPopUpText(HDC hdc, HDC memDC, int iXStart, int iYStart, DWORD StartTime, LPCTSTR lpString, UINT uiLenStr)
{
	GetTextExtentPoint32(memDC, lpString, uiLenStr, &sz);

	SetRect(&rcUpdata, 0, 0, sz.cx, 2 * sz.cy + 5);

	FillRect(memDC, &rcUpdata, (HBRUSH)GetStockObject(WHITE_BRUSH));

	int pos = 5 + sz.cy - (GetTickCount() - StartTime) / 60;

	TextOut(memDC, 0, min(pos, 0), lpString, uiLenStr);

	BitBlt(hdc, iXStart, iYStart, sz.cx, sz.cy, memDC, 0, 0, SRCCOPY);

}

HINSTANCE hInstance = NULL;

int WINAPI _tWinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
	MSG msg = { };
	HWND hwnd = NULL;
	hInstance = hInst;

	if (!RegClass(WndProc, szMainClass, COLOR_WINDOW))
		return 0;

	if (!(hwnd = CreateWindow(szMainClass, szTitle,
		WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT, CW_USEDEFAULT,
		CW_USEDEFAULT, CW_USEDEFAULT,
		0, (HMENU)NULL, hInstance, 0)))
	{
		return 0;
	}

	ShowWindow(hwnd, nCmdShow);
	UpdateWindow(hwnd);

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

BOOL RegClass(WNDPROC proc, LPCTSTR szName, UINT brBackground)
{
	WNDCLASS wc = { };
	wc.style = CS_VREDRAW | CS_HREDRAW;
	wc.cbClsExtra = wc.cbWndExtra = 0;
	wc.hInstance = hInstance;
	wc.lpfnWndProc = proc;
	wc.lpszClassName = szName;
	wc.lpszMenuName = (LPCTSTR)NULL;
	wc.hbrBackground = (HBRUSH)(brBackground + 1);
	wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
	wc.hCursor = LoadCursor(NULL, IDC_ARROW);

	return (RegisterClass(&wc) != 0);
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	static HDC hdc, memDC;
	static HBITMAP hBitmap;
	static TextAnimation Animation[2];
	//const int STRINGSIZE = lstrlen(lpString);
	PAINTSTRUCT ps;
	switch (msg)
	{
	case WM_CREATE:
	{
		Animation[0].textPos = { 120, 120 };
		Animation[0].startTime = GetTickCount();
		_tcscpy_s(Animation[0].chString, 128,
			TEXT("Hi! How are you?"));
		Animation[0].uiLenString = lstrlen(Animation[0].chString);

		

		SIZE sz;
		hdc = GetDC(hwnd);
		memDC = CreateCompatibleDC(hdc);
		GetTextExtentPoint32(hdc, Animation[0].chString, Animation[0].uiLenString, &sz);
		hBitmap = CreateCompatibleBitmap(memDC, sz.cx,
			2 * sz.cy + 5);

		//----
		Animation[1].textPos = { Animation[0].textPos.x + sz.cx + 20, 120 };
		Animation[1].startTime = Animation[0].startTime /*GetTickCount()*/;
		_tcscpy_s(Animation[1].chString, 128,
			TEXT("User 2 60%"));
		Animation[1].uiLenString = lstrlen(Animation[1].chString);


		SelectObject(memDC, hBitmap);

		ReleaseDC(hwnd, hdc);
		SetTimer(hwnd, ID_TIMER, 10, NULL);
		DeleteObject(hBitmap);

		return 0;
	}
	case WM_TIMER:
	{
		InvalidateRect(hwnd, NULL, FALSE);
		return 0;
	}
	case WM_PAINT:
	{
		hdc = BeginPaint(hwnd, &ps);
		for (unsigned int i = 0; i < 2/*Animation[0].uiLenString*/; ++i)
		{
			DrawPopUpText(hdc, memDC,
				Animation[i].textPos.x, Animation[i].textPos.y,
				Animation[i].startTime,
				Animation[i].chString,
				Animation[i].uiLenString);
		}

		EndPaint(hwnd, &ps);
		return 0;
	}
	case WM_DESTROY:
	{
		KillTimer(hwnd, ID_TIMER);
		DeleteDC(memDC);
		PostQuitMessage(0);
		return 0;
	}
	}
	return DefWindowProc(hwnd, msg, wParam, lParam);
}
Взято отсюда. Прямо с этого форума (лень писать, а обсуждалось недавно).

Последний раз редактировалось macomics; 29.01.2023 в 00:48.
macomics вне форума Ответить с цитированием
Старый 29.01.2023, 00:59   #7
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Но я подумал, что этот пример будет для вас слишком длинный. Вот пример короче
Код:
#include<windows.h>

int main(int argc, char *argv[]) {
  HDC screen = GetDC(0);
  while (SleepEx(10, false) == 0) // ~100 кадров в секунду
    SetPixel(screen, 100, 100, 16 * 1048576 - 1); // Надоедливая точка на экране по координатам (100, 100) белого цвета
  return 0;
}
macomics вне форума Ответить с цитированием
Старый 31.01.2023, 21:45   #8
brodnik
Пользователь
 
Регистрация: 28.01.2023
Сообщений: 35
По умолчанию

Что и требовалось. Спасибо.
brodnik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Графика в C++. Ibra C++ Помощь студентам 3 23.02.2014 22:36
Автоматическое изменение графика при переносе данных, формулы и графика на другой лист REztor Microsoft Office Excel 0 01.06.2013 18:01
Графика Rediska512 Помощь студентам 2 16.04.2012 09:33
3d графика 555shiro WPF, UWP, WinRT, XAML 1 17.03.2011 22:44
Графика на c#!!! Mclaren Помощь студентам 2 26.02.2010 10:08