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

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

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.11.2011, 01:42   #1
faktersume
Новичок
Джуниор
 
Регистрация: 04.11.2011
Сообщений: 2
По умолчанию как на базе диалогового окна MFC построить фигуру?

народ, я в програмировании не силен, не пинайте.. нужно нарисовать фигуру в диалоговом окне MFC
faktersume вне форума Ответить с цитированием
Старый 04.11.2011, 03:15   #2
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

С помощью GDI функций: Arc, LineTo.
Но проще просто загрузить рисунок
An1ka вне форума Ответить с цитированием
Старый 09.11.2011, 03:52   #3
faktersume
Новичок
Джуниор
 
Регистрация: 04.11.2011
Сообщений: 2
По умолчанию

An1ka не подскажешь как правильно оформить функции эти?
faktersume вне форума Ответить с цитированием
Старый 17.11.2011, 18:46   #4
-=ЮрА=-
C/C++ advanced
Пользователь
 
Аватар для -=ЮрА=-
 
Регистрация: 17.11.2011
Сообщений: 17
По умолчанию

Нарисовать такое можно и спомощью обычных API средств LineTo Ellipse и т.д
Вот вам реализация в консоли,
Код:
#include <windows.h>

#define RED RGB(255,0,0)
#define GRN RGB(0,255,0)
#define BLU RGB(0,0,255)
 
#define BLK RGB(0,0,0)
#define WHT RGB(255,255,255)
 
HPEN  getPen(int iPEN_STYLE, int iPEN_SIZE, int iCOLORREF);
BOOL  SetPoint(HDC hDC, HPEN hPen, COORD PNT);
BOOL  PlotLine(HDC hDC, HPEN hPen, COORD BGN, COORD END);
BOOL  PlotRect(HDC hDC, HPEN hPen, COORD BGN, COORD END);
BOOL  PlotCirc(HDC hDC, HPEN hPen, COORD BGN, COORD END);
COORD setCordScale(COORD POS, RECT pRECT);

int main()
{
	HWND hWnd = GetForegroundWindow();
	HPEN    RPEN = getPen(PS_SOLID, 2, RED);
	HPEN    GPEN = getPen(PS_SOLID, 2, GRN);
	HPEN    BPEN = getPen(PS_SOLID, 2, BLU);
    HPEN    WPEN = getPen(PS_SOLID, 3, WHT);
	RECT    pRECT= {0};
    COORD   POS  = {0};
	COORD   BGN  = setCordScale(POS,pRECT);
    GetWindowRect(hWnd,&pRECT);
	HDC hDC = GetWindowDC(hWnd);
    if(hDC)
    {
		SetBkMode(hDC,TRANSPARENT);
        SetPoint (hDC, WPEN, BGN);
		POS.X = BGN.X + 50;
		POS.Y = BGN.Y + 100;
		
		PlotRect(hDC, BPEN, BGN, POS);
		PlotLine(hDC, RPEN, BGN, POS);
		SetPoint (hDC, WPEN, BGN);

		BGN = POS;
		POS.X = BGN.X + 100;
		POS.Y = BGN.Y + 100;
		PlotCirc(hDC, GPEN, BGN, POS);
	}
	system("pause");
	return 0;
}

HPEN getPen(int iPEN_STYLE, int iPEN_SIZE, int iCOLORREF)
{
        return CreatePen(iPEN_STYLE, iPEN_SIZE, iCOLORREF);
}
 
BOOL SetPoint(HDC hDC, HPEN hPen, COORD PNT)
{
        EXTLOGPEN pINFO;
        GetObject(hPen,sizeof(EXTLOGPEN),&pINFO);
        SelectObject(hDC,hPen);
        return Ellipse
        (
                hDC,
                PNT.X - pINFO.elpWidth,
                PNT.Y + pINFO.elpWidth, 
                PNT.X + pINFO.elpWidth,
                PNT.Y - pINFO.elpWidth
        );
}
 
BOOL PlotLine(HDC hDC, HPEN hPen, COORD BGN, COORD END)
{
        SelectObject(hDC,hPen);
        MoveToEx(hDC,BGN.X,BGN.Y,NULL);
        return LineTo(  hDC,END.X,END.Y);
}

BOOL PlotRect(HDC hDC, HPEN hPen, COORD BGN, COORD END)
{
	SelectObject(hDC,hPen);
	return Rectangle(hDC,BGN.X, BGN.Y, END.X, END.Y);
}

BOOL  PlotCirc(HDC hDC, HPEN hPen, COORD BGN, COORD END)
{
	SelectObject(hDC,hPen);
	return Ellipse(hDC,BGN.X, BGN.Y, END.X, END.Y);
}

COORD setCordScale(COORD POS, RECT pRECT)
{
        if(POS.X == 0)
                POS.X = 1;
        if(POS.Y == 0)
                POS.Y = 1;
 
        int nROWS = 25;
        int nCOLS = 80;
 
        double CX = (pRECT.right - pRECT.left)/nCOLS;
        double CY = (pRECT.bottom - pRECT.top)/nROWS;
 
        //При текстовом режиме(text mode) экран  делится  на  ячейки
    //(80  или 40 колонок в ширину и 25 строк в высоту)
        POS.X *= CX;
        POS.Y *= CY;
 
        int xBORDER = GetSystemMetrics(SM_CXBORDER);//Ширина границы окна
        int yBORDER = GetSystemMetrics(SM_CYMENU);  //Высота заголовка окна ~= высоте строк меню
        int xDRAG       = GetSystemMetrics(SM_CXDRAG);  //Число пикселей на гориз дрожение мыши
        int yDRAG       = GetSystemMetrics(SM_CYDRAG);  //Число пикселей на вертик дрожение мыши
 
        POS.X += xBORDER + xDRAG;//Ширина границы окна + число пикселей на дрожение мыши
        POS.Y += yBORDER + yDRAG;
        return POS;
}
но на MFC перенести проще пареной репы заменяем HWHD hWnd от GetForegroundWindow(); на hWnd = m_hWnd; и смотрим на своё MFC окошко
Изображения
Тип файла: jpg ScrnShot.JPG (10.8 Кб, 30 просмотров)
За "хлеб и воду" не работаю
-=ЮрА=- вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание5 диалогового окна. Растолкуйте как комманду использовать Wargusha Общие вопросы C/C++ 2 15.08.2011 11:46
Построить фигуру Лиссажу Igor_Fist Помощь студентам 2 10.12.2010 23:23
Проверка наличия диалогового окна Diego__ Microsoft Office Word 2 19.11.2010 19:18
Вызов диалогового окна Sapsan Общие вопросы C/C++ 6 30.03.2009 23:03
Реально ли построить данную фигуру? NoHeart Общие вопросы Delphi 10 13.02.2009 18:39