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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.08.2009, 14:04   #1
nazavrik
Форумчанин
 
Аватар для nazavrik
 
Регистрация: 01.09.2008
Сообщений: 178
По умолчанию Рисование в WinApi

Нужно нарисовать окружность в окне.

В гугле нашел такой метод рисования линии:

Код:

HDC hDC = GetDC (hWnd); 
RECT rc; 
GetClientRect(hWnd, &rc); 

// Создаем Pen 
HPEN hPen = CreatePen (PS_SOLID, 1, RGB(255, 0, 0)); 

HPEN hOldPen = (HPEN)SelectObject (hDC, hPen); 

MoveToEx(hDC, rc.left, rc.top, NULL); 
LineTo(hDC, rc.right, rc.bottom); 

SelectObject(hDC, hOldPen); 
DeleteObject (hPen); 
ReleaseDC (hWnd, hDC);
А существует готовая функция, которая позволяет рисовать окружности? В мсдн мне такая не попалась.

И еще вопрос. Есть ли другие способы рисования в Вин32Апи? Если да, то какой предпочтительнее?
Быть радикальным - значит понять вещь в её корне. К.Маркс
nazavrik вне форума Ответить с цитированием
Старый 27.08.2009, 14:26   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Дело не в способе, а в том, какую библиотку хотите использовать. Тут вы используите GDI. Есть огромное множество библиотек, у каждой свои приимущества.
BOBAH13 вне форума Ответить с цитированием
Старый 27.08.2009, 14:42   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
которая позволяет рисовать окружности? В мсдн мне такая не попалась.
Не понял? А Ellipse чем не окружность?
Цитата:
Если да, то какой предпочтительнее?
А какая задача?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.08.2009, 14:58   #4
Ivan_32
somewhere else
Участник клуба
 
Аватар для Ivan_32
 
Регистрация: 17.07.2008
Сообщений: 1,409
По умолчанию

Почему бы не воспользоваться GDI+ ? она позволяет это делать гораздо проще чем оригинальный GDI.
Код:
#define UNICODE
#include <windows.h>
#include <gdiplus.h>
#pragma comment(lib,"Gdiplus.lib")
using namespace Gdiplus;

VOID OnPaint(HDC hdc);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HBITMAP hBitmap;
INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PSTR, INT iCmdShow)
{
	HWND                hWnd;
	MSG                 msg;
	WNDCLASS            wndClass;
	GdiplusStartupInput gdiplusStartupInput;
	ULONG_PTR           gdiplusToken;
	GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
	wndClass.style          = CS_HREDRAW | CS_VREDRAW;
	wndClass.lpfnWndProc    = WndProc;
	wndClass.cbClsExtra     = 0;
	wndClass.cbWndExtra     = 0;
	wndClass.hInstance      = hInstance;
	wndClass.hIcon          = LoadIcon(NULL,IDI_APPLICATION);
	wndClass.hCursor        = LoadCursor(NULL, IDC_ARROW);
	wndClass.hbrBackground  = (HBRUSH)GetStockObject(WHITE_BRUSH);
	wndClass.lpszMenuName   = NULL;
	wndClass.lpszClassName  = TEXT("EllipseExample");
	RegisterClass(&wndClass);
	hWnd = CreateWindow(
		TEXT("EllipseExample"),TEXT("Ellipse Example"),WS_SYSMENU,
		CW_USEDEFAULT,CW_USEDEFAULT,217,240,
		NULL,NULL,hInstance,NULL);
	ShowWindow(hWnd, iCmdShow);
	UpdateWindow(hWnd);
	while(GetMessage(&msg, NULL, 0, 0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	GdiplusShutdown(gdiplusToken);
	return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, 
						 WPARAM wParam, LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	switch(message)
	{
	case WM_INITDIALOG:
		return 0;
	case WM_PAINT:
		hdc = BeginPaint(hWnd, &ps);
		OnPaint(hdc);
		EndPaint(hWnd, &ps);
		return 0;
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	default:
		return DefWindowProc(hWnd, message, wParam, lParam);
	}
}
VOID OnPaint(HDC hdc)
{
	Graphics graphics(hdc);
	Pen pen(Color(255, 0, 0, 255));
	graphics.DrawEllipse(&pen,5.0f,5.0f,200.0f,200.0f);
}
GDI+ Reference
GDI+ Examples
"Тяжело в учении, легко в бою" - А.В. Суворов
Ivan_32 вне форума Ответить с цитированием
Старый 27.08.2009, 15:58   #5
nazavrik
Форумчанин
 
Аватар для nazavrik
 
Регистрация: 01.09.2008
Сообщений: 178
По умолчанию

Цитата:
Дело не в способе, а в том, какую библиотку хотите использовать. Тут вы используите GDI. Есть огромное множество библиотек, у каждой свои приимущества.
Спасибо. Погуглил, что-то прояснилось.

Цитата:
Не понял? А Ellipse чем не окружность?
Про элипс я совсем забыл. Спасибо, уже реализовал.

Цитата:
А какая задача?
Идея следующая: при попадании курсора мыши на рабочую область окна за курсором должна следовать цепочка из окружностей различного радиуса с центром в точке, где находится курсор. Было бы круто, если бы это можно было реализовать не только на рабочей области окна, но и на всей поверхности экрана. Нужно использовать рабочую область устройства?
Быть радикальным - значит понять вещь в её корне. К.Маркс
nazavrik вне форума Ответить с цитированием
Старый 27.08.2009, 16:02   #6
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Было бы круто, если бы это можно было реализовать не только на рабочей области окна, но и на всей поверхности экрана. Нужно использовать рабочую область устройства?
Не вкоем случае! Нужно использовать/создавать/рисовать каждую окружность как отдельное новое окно. Потом уже просто двигать окна (окружности).

Edit:
Цитата:
Сообщение от nazavrik Посмотреть сообщение
А что тогда будет являться рабочей областью? В каких пределах двигать окружность?
А что является рабочей областью для окон ? Вы конечно извените, но я незнаю всех аспектов, которые вы хотите реализовать в своем приложении. Где, как и куда ваши окна (окружности) будут двигаться и располагаться это уже вам решать, а не мне.
p.s. может я не верно понял вопросы.

Последний раз редактировалось BOBAH13; 27.08.2009 в 16:57.
BOBAH13 вне форума Ответить с цитированием
Старый 27.08.2009, 16:22   #7
nazavrik
Форумчанин
 
Аватар для nazavrik
 
Регистрация: 01.09.2008
Сообщений: 178
По умолчанию

А что тогда будет являться рабочей областью? В каких пределах двигать окружность?
Быть радикальным - значит понять вещь в её корне. К.Маркс
nazavrik вне форума Ответить с цитированием
Старый 27.08.2009, 21:51   #8
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Нарисуй, что должно получиться, и выложи рисунок, а то так непонятно.
Somebody вне форума Ответить с цитированием
Старый 27.08.2009, 22:35   #9
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Цитата:
на всей поверхности экрана
Код:
var DC: HDC;
    i:integer;
begin
  DC := GetDC(HWND_DESKTOP);
  for i:=0 to 100 do ellipse(DC, random(2000) , random(2000), random(2000), random(2000));
  ReleaseDC(HWND_DESKTOP, DC)
end;
пыщь
JTG вне форума Ответить с цитированием
Старый 30.08.2009, 16:01   #10
nazavrik
Форумчанин
 
Аватар для nazavrik
 
Регистрация: 01.09.2008
Сообщений: 178
По умолчанию

Цитата:
Сообщение от Somebody Посмотреть сообщение
Нарисуй, что должно получиться, и выложи рисунок, а то так непонятно.
Общая идея следующая.

Приложение должно за курсором мыши выводить имитацию пузырей.

Как я себе это представляю.

Для начала упрощенная версия. На рабочей области окна на каждое сообщение WM_MOUSEMOVE, т.е. изменение координат мыши, рисуется окружность, которая начинает перемещаться вверх и "лопаться" при достижении верхней границы окна.

С этим проблем нет.

А вот как сделать, чтобы имитация пузырей была на рабочем столе, т.е. на всей области экрана?
Быть радикальным - значит понять вещь в её корне. К.Маркс
nazavrik вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
БД на WinApi yngwie Win Api 3 09.03.2009 20:54
WinApi Necrom Помощь студентам 3 27.06.2008 14:24
Рисование на форме созданной на WinApi N!ckeL Win Api 3 30.04.2008 19:02