Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/263: Рейтинг темы: голосов - 263, средняя оценка - 4.75
~GiPeRPrOgEr~
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 85
1

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

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

Всем привет!!! Вопрос конечно гулповатый, но все же. Нужно про помощи WinApi прорисовывать элементарные геометрические фигуры на какой либо форме. Все вроде бы проще простого, но как то синтаксис в голове не укладывается. Может кто нибудь исходник кинуть для прорисовки простой линии, а дальше я уже разберусь, заранее огромное срасибо.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2011, 08:49
Ответы с готовыми решениями:

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

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

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

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

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

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

Решение

Цитата Сообщение от ~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
Изображения
Тип файла: jpg ScrnShot.JPG (11.1 Кб, 1101 просмотров)
22.09.2011, 10:35
challengerr
43 / 36 / 6
Регистрация: 30.07.2008
Сообщений: 136
22.09.2011, 11:12 5
Простой способ - использовать 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-us/library/ee418878(v=VS.85).aspx
2
-=ЮрА=-
Заблокирован
Автор FAQ
22.09.2011, 11:51 6
challengerr,
Цитата Сообщение от challengerr Посмотреть сообщение
Простой способ - использовать gdi.
Отрисовка происходит по событию WM_PAINT.
- не стал бы так утверждать WM_PAINT потребует как минимум введения WindowProc, а тат в консоли рисуешь и всё +

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

Не по теме:


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

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

Решение

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
925 / 750 / 299
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
22.09.2011, 19:34 9
Лучший ответ Сообщение было отмечено как решение

Решение

Моя 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
Изображения
Тип файла: jpg graph_xy.JPG (16.6 Кб, 248 просмотров)
bretba
63 / 58 / 14
Регистрация: 24.07.2011
Сообщений: 343
22.09.2011, 19:37 10
xAtom, данный пример в инете видел))только там график еще двигался))
0
challengerr
43 / 36 / 6
Регистрация: 30.07.2008
Сообщений: 136
23.09.2011, 05:03 11
рисование используя 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
~GiPeRPrOgEr~
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 85
19.10.2011, 22:06  [ТС] 12
Всем большое спасибо, извините что долго не отвечал, так получилось, отличные примеры, еще раз большое спасибо.
0
isaak
117 / 53 / 20
Регистрация: 17.10.2010
Сообщений: 789
17.02.2013, 15:53 13
challengerr при компиляции вашего проекта у меня выскакивают ошибки, не знаю по чему????????? Хотя я создавал Проект Win32-> В окне Мастер приложений Win32 в поле Тип приложения выбирал пункт Приложение Windows. В поле Дополнительные параметры выбирал Пустой проект. Остальные параметры оставил без изменений. Чтобы создать проект, нажимал кнопку Готово. В окне Мастер приложений Win32 в поле Тип приложения выберите пункт Приложение Windows. В поле Дополнительные параметры выбирал Пустой проект. Остальные параметры оставил без изменений. Чтобы создать проект, нажал кнопку Готово. Подскажите пожалуйста где ошибка????????
0
Изображения
Тип файла: png Error.png (228.9 Кб, 133 просмотров)
Croessmah
++Ͻ
16047 / 9146 / 1758
Регистрация: 27.09.2012
Сообщений: 22,505
Записей в блоге: 2
Завершенные тесты: 2
17.02.2013, 19:32 14
Цитата Сообщение от isaak Посмотреть сообщение
Подскажите пожалуйста где ошибка????????
Отключите Юникод в проекте.
Проект->Свойства проекта
Отключение Unicod'а.png
0
isaak
117 / 53 / 20
Регистрация: 17.10.2010
Сообщений: 789
17.02.2013, 20:25 15
Croessmah ваш совет не помог, я отключил Юникод в проекте. Появились другие ошибки.???????
0
Изображения
Тип файла: png Error.png (233.3 Кб, 64 просмотров)
Croessmah
++Ͻ
16047 / 9146 / 1758
Регистрация: 27.09.2012
Сообщений: 22,505
Записей в блоге: 2
Завершенные тесты: 2
17.02.2013, 21:06 16
Цитата Сообщение от isaak Посмотреть сообщение
Появились другие ошибки.???????
а DirectX SDK установлен, надеюсь? И подключены необходимые библиотеки к проекту (d3dx9.lib d3dx.lib)? все пути к хедерам и бинарникам прописаны?
0
isaak
117 / 53 / 20
Регистрация: 17.10.2010
Сообщений: 789
17.02.2013, 21:30 17
Цитата Сообщение от Croessmah Посмотреть сообщение
а DirectX SDK установлен, надеюсь? И подключены необходимые библиотеки к проекту (d3dx9.lib d3dx.lib)? все пути к хедерам и бинарникам прописаны?
Какой лучше установить DirectX SDK для Visual Studio 2010????? И где взять библиотеки d3dx9.lib d3dx.lib??????? Заранее огромное вам спасибо.
0
koto_fey
7 / 7 / 1
Регистрация: 11.01.2013
Сообщений: 119
11.10.2015, 14:53 18
Для таких кому не надо всяких заморочек рисование линии 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
isaak
117 / 53 / 20
Регистрация: 17.10.2010
Сообщений: 789
11.10.2015, 15:20 19
Спасибо! koto_fey реально и без всяких заморочек.
0
koto_fey
7 / 7 / 1
Регистрация: 11.01.2013
Сообщений: 119
11.10.2015, 15:47 20
Вот еще ссылочка. Там как раз к этому примеру будет полезно.
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
11.10.2015, 15:47
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.10.2015, 15:47

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.