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

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

22.09.2011, 08:49. Показов 76146. Ответов 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,307
17.02.2013, 15:53
challengerr при компиляции вашего проекта у меня выскакивают ошибки, не знаю по чему????????? Хотя я создавал Проект Win32-> В окне Мастер приложений Win32 в поле Тип приложения выбирал пункт Приложение Windows. В поле Дополнительные параметры выбирал Пустой проект. Остальные параметры оставил без изменений. Чтобы создать проект, нажимал кнопку Готово. В окне Мастер приложений Win32 в поле Тип приложения выберите пункт Приложение Windows. В поле Дополнительные параметры выбирал Пустой проект. Остальные параметры оставил без изменений. Чтобы создать проект, нажал кнопку Готово. Подскажите пожалуйста где ошибка????????
Миниатюры
Как рисовать элементарные геометрические фигуры?  
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
17.02.2013, 19:32
Цитата Сообщение от isaak Посмотреть сообщение
Подскажите пожалуйста где ошибка????????
Отключите Юникод в проекте.
Проект->Свойства проекта
0
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,307
17.02.2013, 20:25
Croessmah ваш совет не помог, я отключил Юникод в проекте. Появились другие ошибки.???????
Миниатюры
Как рисовать элементарные геометрические фигуры?  
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
17.02.2013, 21:06
Цитата Сообщение от isaak Посмотреть сообщение
Появились другие ошибки.???????
а DirectX SDK установлен, надеюсь? И подключены необходимые библиотеки к проекту (d3dx9.lib d3dx.lib)? все пути к хедерам и бинарникам прописаны?
0
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,307
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,307
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
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru