Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/358: Рейтинг темы: голосов - 358, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 85

Как рисовать элементарные геометрические фигуры?

22.09.2011, 08:49. Показов 76245. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!!! Вопрос конечно гулповатый, но все же. Нужно про помощи WinApi прорисовывать элементарные геометрические фигуры на какой либо форме. Все вроде бы проще простого, но как то синтаксис в голове не укладывается. Может кто нибудь исходник кинуть для прорисовки простой линии, а дальше я уже разберусь, заранее огромное срасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.09.2011, 08:49
Ответы с готовыми решениями:

Как нарисовать геометрические фигуры
Помогите нарисовать геометрические фигуры (например треугольник,круг) в библиотеке dll. Пока что реализовал квадрат или прямоугольник с...

Как узнать пересекаются ли геометрические фигуры?
На форме рисую фигуры которые описываются Regionами Polygon = New Drawing2D.GraphicsPath() Polygon.AddPolygon(PointCollection.ToArray) ...

Как рисовать фигуры?
Не так давно начал работать на си. Помогите пожалуйста. с помощью графики нарисовать такие картинки:

19
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
22.09.2011, 09:15
Цитата Сообщение от ~GiPeRPrOgEr~ Посмотреть сообщение
Всем привет!!! Вопрос конечно гулповатый, но все же. Нужно про помощи WinApi прорисовывать элементарные геометрические фигуры на какой либо форме. Все вроде бы проще простого, но как то синтаксис в голове не укладывается. Может кто нибудь исходник кинуть для прорисовки простой линии, а дальше я уже разберусь, заранее огромное срасибо.
- да можно, в этом топике реализовывал более широкое задание, соединение линиями кликов мыши в консоли
Построить ломаную по заданным вершинам
Кроме LineTo есть Rectangle (рисует прямоугольник) и Elipse (овал, круг)
1
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 85
22.09.2011, 09:50  [ТС]
Еще один вопрос, какую библу нужно подрубить и можно просто код, который рисует обычную линию на форме с получением дискриптора этой формы, пожалуйста, заранее спасибо
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
22.09.2011, 10:35
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от ~GiPeRPrOgEr~ Посмотреть сообщение
Еще один вопрос, какую библу нужно подрубить и можно просто код, который рисует обычную линию на форме с получением дискриптора этой формы, пожалуйста, заранее спасибо
~GiPeRPrOgEr~, плохо что код не пытаешсь сам изучить
Ладно вот накидал проектик
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#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;
}
Миниатюры
Как рисовать элементарные геометрические фигуры?  
11
44 / 37 / 6
Регистрация: 30.07.2008
Сообщений: 136
22.09.2011, 11:12
Простой способ - использовать gdi.
Отрисовка происходит по событию WM_PAINT.
для того, чтобы нарисовать в окне, нужно получить контекст устройства рисования в окне - HDC hdc=BeginPaint(hwnd,&ps);
hwnd это хэндл окна,
ps это прямоугольная область в которой будет происходить рисование.
После окончания рисования устройство нужно освободить функцией EndPaint(hwnd,&ps);
Есть следующие функции рисования:
- SetPixel( hdc,x,y,RGB(250,250,250));
RGB это макрос преобразующий 3 данных значения в цвет.
x,y - координаты пиксела Пример: http://zetcode.com/tutorials/winapi/gdi/
- Rectangle(hdc,x1,y1,x2,y2); (рисование прямоугольника)
и др.

Порядок действий при рисовании линии:
1: создаешь перо которым будешь рисовать: функция CreatePen
2: выбираешь это перо: функция SelectObject
3: используешь функции MoveToEx и LineTo
4: освобождаешь перья: функция DeleteObject
Пример по той же ссылке.

Более сложный - directx Пример для 2d графики тут:
http://msdn.microsoft.com/en-u... S.85).aspx
2
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
22.09.2011, 11:51
challengerr,
Цитата Сообщение от challengerr Посмотреть сообщение
Простой способ - использовать gdi.
Отрисовка происходит по событию WM_PAINT.
- не стал бы так утверждать WM_PAINT потребует как минимум введения WindowProc, а тат в консоли рисуешь и всё +

В добавок зачем было указывать функции
Цитата Сообщение от challengerr Посмотреть сообщение
Rectangle(hdc,x1,y1,x2,y2);
если уже привёл их список
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Кроме LineTo есть Rectangle (рисует прямоугольник) и Elipse (овал, круг)
1
22.09.2011, 17:01

Не по теме:


Писал сообщение, когда в теме было только одно сообщение. Замечание насчет WM_PAINT правильное - приму на вооружение ваш способ рисования в консоли.

0
 Аватар для bretba
63 / 58 / 13
Регистрация: 24.07.2011
Сообщений: 343
22.09.2011, 18:37
Лучший ответ Сообщение было отмечено как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#include <windows.h>
#include <windowsx.h>
#include<stdlib.h>
#include <wchar.h>
 
LRESULT CALLBACK  WndProc(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam);
HPEN MyPen;
HDC dc;
 
class CButton
{
public:
    BOOL ShowButton(int x1,int y1,int x2,int y2,int kx,int ky);
private:
    int x1;
    int y1;
    int x2;
    int y2;
    HBRUSH MyBrush;
    HBRUSH CreateBrush(COLORREF color);
 
 
};
 
HBRUSH CButton::CreateBrush(COLORREF color)
{
if (CreateSolidBrush(color)!=NULL)
    return CreateSolidBrush(color);
else
    return NULL;
};
 
BOOL CButton::ShowButton(int x1,int y1,int x2,int y2,int kx,int ky)
{
    if ((kx>x1) & (kx<x2) & (ky>y1) & (ky<y2))
MyBrush=CreateBrush(RGB(255,120,300));
    else
MyBrush=CreateBrush(RGB(255,120,120));
 
 
SelectBrush(dc,MyBrush);
if (Rectangle(dc,x1,y1,x2,y2)!=NULL)
{
    return Rectangle(dc,x1,y1,x2,y2);
}   
else
    return NULL;
}
 
 
 
class WINDOWMAIN
{
public:
    
    
    HWND hwnd;
    void Create_Window(LPCWSTR Name_Prog);
    void Show_Window();
    WNDCLASS we;
    bool Reg_Window(HINSTANCE hInstance,LPCWSTR lpzClassName,WNDPROC lpfnWndProc);
    HDC Get_DC(HWND hwnd);
};
bool WINDOWMAIN::Reg_Window(HINSTANCE hInstance, LPCWSTR lpzClassName,WNDPROC lpfnWndProc)
   {
       ZeroMemory(&we,sizeof(we));
       we.lpfnWndProc=lpfnWndProc;
       we.hInstance=hInstance;
       we.hIcon=LoadIcon(NULL,IDI_APPLICATION);
       we.hCursor=LoadCursor(NULL,IDC_ARROW);
       we.hbrBackground=GetStockBrush(WHITE_BRUSH);
       we.lpszClassName= lpzClassName;
      if (RegisterClass(&we)!=0) 
            return true;
              else 
            return false;
   }
 
  void WINDOWMAIN::Create_Window(LPCWSTR Name_Prog)
  {
    hwnd=CreateWindow(L"MyWindowClass",Name_Prog,
WS_OVERLAPPEDWINDOW,500,200,230,250,
HWND_DESKTOP,NULL,NULL,NULL);  
  }
 
  void WINDOWMAIN::Show_Window()
  {
ShowWindow(hwnd,SW_SHOW);    
    
  }
 
 HDC WINDOWMAIN::Get_DC(HWND hwnd)
  {
     if (GetDC(hwnd)!=NULL)
      return GetDC(hwnd);
     else
         return NULL;
  }
   
 
  int WINAPI  WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int )
 
   {  
       
        //дескриптор окна
       MSG Msg;   //структура всех сообщений
       WINDOWMAIN MyObject; //объект класса создание окна
      
 
       if (MyObject.Reg_Window(hInstance,L"MyWindowClass",WndProc)) 
      {
          MyObject.Create_Window(L"Project");
          MyObject.Show_Window();
          dc=MyObject.Get_DC(MyObject.hwnd);
 
 
         while(GetMessage(&Msg,NULL,0,0))
           {    
             DispatchMessage(&Msg);
             TranslateMessage(&Msg);
           }
      }
return 0;
}
 
LRESULT CALLBACK  WndProc(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    static int x,y;
    CButton MyButton[8];
    switch(uMsg)
{
    case WM_LBUTTONDOWN:
                x=LOWORD(lParam); 
                y=HIWORD(lParam);
                MyButton[0].ShowButton(10,10,60,60,x,y);
                MyButton[1].ShowButton(80,10,130,60,x,y);
                MyButton[2].ShowButton(150,10,200,60,x,y);
                MyButton[3].ShowButton(10,80,60,130,x,y);
                MyButton[4].ShowButton(80,80,130,130,x,y);
                MyButton[5].ShowButton(150,80,200,130,x,y);
                MyButton[6].ShowButton(10,150,60,200,x,y);
                MyButton[7].ShowButton(80,150,130,200,x,y);
                MyButton[8].ShowButton(150,150,200,200,x,y);
        break;
 
 
case WM_DESTROY:
PostQuitMessage(0);
break;
 
default:
return(DefWindowProc(hWnd,uMsg,wParam,lParam)) ; 
}
}
Вот к примеру...создал свой класс "кнопки",по которым можно нажать.Кнопки создал спомощью GDI))
3
 Аватар для xAtom
935 / 760 / 299
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
22.09.2011, 19:34
Лучший ответ Сообщение было отмечено как решение

Решение

Моя WinAPI демонстрация рисование линиями.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <windows.h>
#include <math.h>
LRESULT CALLBACK  WndProc(HWND, UINT, WPARAM, LPARAM);
 
int  main(void) {
   MSG msg;
   int  use = CW_USEDEFAULT; 
   HWND  wnd = CreateWindowA("BUTTON", "Моё окно", WS_OVERLAPPEDWINDOW, use, use, use, use, 
                                           GetDesktopWindow(), NULL, (HINSTANCE)GetModuleHandle(NULL), NULL);
   if(! wnd)
         ExitProcess(1u);
 
   SetClassLong(wnd, GCL_HCURSOR, (LONG)LoadCursor(NULL, IDC_ARROW)); // курсор
   SetClassLong(wnd, GCL_HBRBACKGROUND, (LONG)GetStockObject(WHITE_BRUSH)); // цвет формы
   SetWindowLong(wnd, GWL_WNDPROC, (LONG)WndProc);  // обработчик сообщений
 
   ShowWindow(wnd, SW_SHOWDEFAULT);
   UpdateWindow(wnd);
   InvalidateRect(wnd, NULL, TRUE);
 
   ZeroMemory(&msg, sizeof(MSG));
   while(GetMessageA(&msg, NULL, 0U, 0U)) {
        DispatchMessageA(&msg);
        TranslateMessage(&msg);
   }
   DestroyWindow(wnd);
   return 0;
}
 
LRESULT CALLBACK  WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
   PAINTSTRUCT ps;
   HGDIOBJ old;
   int x, y, ny;
   static POINT pt;
   static HPEN  pen;
 
   switch(msg) {
     case WM_SHOWWINDOW:
          pen  = CreatePen(PS_SOLID, 1,  RGB(0, 0, 255));
          pt.x =  pt.y = 0L;
         break;
     case WM_PAINT:   // обработчик рисования на форме
         BeginPaint(hwnd, &ps);
 
        // рисуем график X,Y
        MoveToEx(ps.hdc, ps.rcPaint.right/2, 10, NULL);
        LineTo(ps.hdc, ps.rcPaint.right/2, ps.rcPaint.bottom-10);
 
        MoveToEx(ps.hdc, 10, ps.rcPaint.bottom/2, NULL);
        LineTo(ps.hdc, ps.rcPaint.right-10, ps.rcPaint.bottom/2);
 
        old = SelectObject(ps.hdc, pen);
        // рисуем синусуидальные-волны
        y = ps.rcPaint.bottom / 2;
        for(pt.y = y + 10, pt.x = 10, x = 11; x < ps.rcPaint.right - 10; x++) {
              ny = y + ps.rcPaint.bottom / 8 * sin(2 * 3.14 * x / (45*ps.rcPaint.right/180));
              MoveToEx(ps.hdc, pt.x, pt.y, NULL);
              LineTo(ps.hdc, x, ny);
              pt.x = x;
              pt.y = ny;
         }
         SelectObject(ps.hdc, old);
         EndPaint(hwnd, &ps);
         break;
     case WM_DESTROY:
          DeleteObject(pen);
          PostQuitMessage(0);
         break;
     default: return DefWindowProcA(hwnd, msg, wParam, lParam);
     }
     return 0;
}
Вот ниже показан результат.
Миниатюры
Как рисовать элементарные геометрические фигуры?  
6
 Аватар для bretba
63 / 58 / 13
Регистрация: 24.07.2011
Сообщений: 343
22.09.2011, 19:37
xAtom, данный пример в инете видел))только там график еще двигался))
0
44 / 37 / 6
Регистрация: 30.07.2008
Сообщений: 136
23.09.2011, 05:03
рисование используя directx:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include <windows.h>
#include <stdio.h>
#include <d3d9.h>
struct CUSTOMVERTEX
{
FLOAT x, y, z, rhw; // The transformed position for the vertex.
DWORD color;        // The vertex color.
};
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)
IDirect3D9* g_pD3D;
IDirect3DDevice9* g_pd3dDevice;
IDirect3DVertexBuffer9 *g_pVB;
MSG msg; 
HDC hdc;
VOID* pVertices;
FLOAT z=0.5f;
FLOAT strhw=1.0f;
DWORD stcolor=0xff00ffff;
int vn;
CUSTOMVERTEX* vertices;
INT WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, INT );
LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam );
VOID Cleanup();
VOID Render();
VOID  create_vertices();
 
int main(int argc, char *argv[])
{
vn = 49*49;
vertices = new CUSTOMVERTEX[vn];
HINSTANCE hInst = GetModuleHandle(NULL);
create_vertices();
int a = WinMain(hInst,NULL,NULL,0);
Cleanup();
delete []vertices;
}
VOID  create_vertices()
{
FLOAT x,y;
int i;
for(i=0,x=2.0f;x<100.0f;x+=2.0f)
{
for(y=2.0f;y<100.0f;y+=2.0f,i++)
{//f(i);
vertices[i].x = x;
vertices[i].y = y;
vertices[i].z = z;
vertices[i].rhw = strhw;
vertices[i].color = stcolor;
}
}
}
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE phI, LPSTR lp, INT ig)
{
WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_HREDRAW|CS_VREDRAW, MsgProc, 0L, 0L, 
 hInst, NULL, NULL, NULL, NULL, "Direct3D Tutorial", NULL };
RegisterClassEx( &wc );
HWND hWnd = CreateWindow( "Direct3D Tutorial", "Direct3D Tutorial 01: CreateDevice", 
 WS_OVERLAPPEDWINDOW, 100, 100, 640, 480,
 GetDesktopWindow(), NULL, wc.hInstance, NULL );
SetFocus(hWnd); ShowWindow(hWnd,SW_SHOWDEFAULT);
if( ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) )== NULL){ return E_FAIL;}
D3DPRESENT_PARAMETERS d3dpp; 
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
                                  D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                  &d3dpp, &g_pd3dDevice ) ) ){}
if( FAILED( g_pd3dDevice->CreateVertexBuffer( vn*sizeof(CUSTOMVERTEX),
         0 /*Usage*/, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &g_pVB, NULL ) ) )
    return E_FAIL;
if( FAILED( g_pVB->Lock( 0, vn*sizeof(CUSTOMVERTEX), (void**)&pVertices, 0 ) ) )
    return E_FAIL;
memcpy( pVertices, vertices, vn*sizeof(CUSTOMVERTEX) );
g_pVB->Unlock();       
while( GetMessage( &msg, NULL, 0, 0 ) )
{
    TranslateMessage( &msg );
    DispatchMessage( &msg );
}
}
LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
    switch( msg )
    {
        case WM_DESTROY:
            PostQuitMessage( 0 );
            return 0;
        case WM_PAINT:
            Render();
            ValidateRect( hWnd, NULL );
            return 0;
    }
    return DefWindowProc( hWnd, msg, wParam, lParam );
}
VOID Render()
{
// Clear the back buffer to a blue color
g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );
// Begin the scene
g_pd3dDevice->BeginScene();
// Rendering of scene objects happens here
g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) );
g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
g_pd3dDevice->DrawPrimitive( D3DPT_POINTLIST, 0, vn  );
// End the scene
g_pd3dDevice->EndScene();
g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
}
VOID Cleanup()
{
if( g_pd3dDevice != NULL) g_pd3dDevice->Release();
if( g_pD3D != NULL) g_pD3D->Release();
}
1
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 85
19.10.2011, 22:06  [ТС]
Всем большое спасибо, извините что долго не отвечал, так получилось, отличные примеры, еще раз большое спасибо.
0
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,321
17.02.2013, 15:53
challengerr при компиляции вашего проекта у меня выскакивают ошибки, не знаю по чему????????? Хотя я создавал Проект Win32-> В окне Мастер приложений Win32 в поле Тип приложения выбирал пункт Приложение Windows. В поле Дополнительные параметры выбирал Пустой проект. Остальные параметры оставил без изменений. Чтобы создать проект, нажимал кнопку Готово. В окне Мастер приложений Win32 в поле Тип приложения выберите пункт Приложение Windows. В поле Дополнительные параметры выбирал Пустой проект. Остальные параметры оставил без изменений. Чтобы создать проект, нажал кнопку Готово. Подскажите пожалуйста где ошибка????????
Миниатюры
Как рисовать элементарные геометрические фигуры?  
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
17.02.2013, 19:32
Цитата Сообщение от isaak Посмотреть сообщение
Подскажите пожалуйста где ошибка????????
Отключите Юникод в проекте.
Проект->Свойства проекта
0
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,321
17.02.2013, 20:25
Croessmah ваш совет не помог, я отключил Юникод в проекте. Появились другие ошибки.???????
Миниатюры
Как рисовать элементарные геометрические фигуры?  
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
17.02.2013, 21:06
Цитата Сообщение от isaak Посмотреть сообщение
Появились другие ошибки.???????
а DirectX SDK установлен, надеюсь? И подключены необходимые библиотеки к проекту (d3dx9.lib d3dx.lib)? все пути к хедерам и бинарникам прописаны?
0
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,321
17.02.2013, 21:30
Цитата Сообщение от Croessmah Посмотреть сообщение
а DirectX SDK установлен, надеюсь? И подключены необходимые библиотеки к проекту (d3dx9.lib d3dx.lib)? все пути к хедерам и бинарникам прописаны?
Какой лучше установить DirectX SDK для Visual Studio 2010????? И где взять библиотеки d3dx9.lib d3dx.lib??????? Заранее огромное вам спасибо.
0
9 / 9 / 2
Регистрация: 11.01.2013
Сообщений: 157
11.10.2015, 14:53
Для таких кому не надо всяких заморочек рисование линии MVS 2010.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
 
int main()
{POINT op;
HWND hWnd=GetConsoleWindow(); //Получаем дескриптор окна консоли
HDC hDC=GetDC(hWnd); //Получаем контекст устройства по полученному дескриптору
SelectObject(hDC,GetStockObject(WHITE_PEN)); //Выбираем перо WHITE_PEN в контекст
 
MoveToEx(hDC,50,50,&op); //Ставим текущую точку в координаты 50,50
LineTo(hDC,100,200); //Рисуем линию из текущей точки в точку 100, 200
 
ReleaseDC(hWnd,hDC); //"Освобождаем" контекст
std::cin.get();
return 0;
}
2
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,321
11.10.2015, 15:20
Спасибо! koto_fey реально и без всяких заморочек.
0
9 / 9 / 2
Регистрация: 11.01.2013
Сообщений: 157
11.10.2015, 15:47
Вот еще ссылочка. Там как раз к этому примеру будет полезно.
doc.marsu.ru/lang/cpp/vcpp/begvc14.html#5

Добавлено через 2 минуты
И еще пример с использованием эллипса.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// Line.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <windows.h>
#include <iostream>
 
 
int main()
{
    POINT op;
    HWND hWnd=GetConsoleWindow(); //Получаем дескриптор окна консоли
    HDC hDC=GetDC(hWnd); //Получаем контекст устройства по полученному дескриптору
    SelectObject(hDC,GetStockObject(WHITE_PEN)); //Выбираем перо WHITE_PEN в контекст
    
    MoveToEx(hDC,50,50,&op); //Ставим текущую точку в координаты 50,50
    LineTo(hDC,635,320); //Рисуем линию из текущей точки в точку 100, 200
    Ellipse(hDC,12,23,130,120); //вот это элипс, он же окружность
    ReleaseDC(hWnd,hDC); //"Освобождаем" контекст
    system ("pause");
    return 0;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.10.2015, 15:47
Помогаю со студенческими работами здесь

Как рисовать фигуры
Нужно на C# нарисовать заданную фигуру... а я с рисованием вообще не дружу. Помогите пожалуйста.

Как рисовать несложные фигуры
например вот такую балку !! и спасибо за ранее!

Как рисовать трехмерные фигуры на плоскости?
Здарвствуйте, столкнулся с такой проблемой: не могу корретктно нарисовать каую либо трехмерную фигуру. Суть программы: в программу вводится...

Как рисовать символами различные фигуры
Здравствуйте такой вопрос: в общем в учебнике задания рисовать звёздочками (*) букву О, стрелочку, прямоугольник, ромбик и потом там ещё...

Как рисовать на форме простые фигуры?
Есть похожие темы, но ни в одной нет ясного ответа и, хотя бы одного примитивного примера. Как с помощью NET нарисовать на форме простую...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru