Форум программистов, компьютерный форум CyberForum.ru

Нарисовать елку и месяц - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.71
kg250493
-62 / 0 / 0
Регистрация: 15.09.2012
Сообщений: 13
08.11.2012, 20:28     Нарисовать елку и месяц #1
как нарисовать елку и месяц.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asidorchenko
379 / 205 / 25
Регистрация: 09.04.2012
Сообщений: 635
11.11.2012, 11:54     Нарисовать елку и месяц #2
Как-то так
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
// компиляция (Microsoft Visual C++):
// cl /c paint01.cpp
// link paint01.obj gdi32.lib user32.lib kernel32.lib
 
#include <windows.h>
 
HINSTANCE hInst;
HWND hwndMain;
 
LRESULT APIENTRY WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
 POINT pnt;
 LPPOINT lpPoint;
 
 HDC hdc;
 RECT rect;
 switch(message)
 {
  case WM_PAINT:
   rect.left =0;
   rect.top = 0;
   rect.right = 200;
   rect.bottom = 200;
   hdc = GetDC(hwndMain);
   //FillRect(hdc, &rect, (HBRUSH) GetStockObject(BLACK_BRUSH));
   //InvalidateRect(hwndMain, &rect, 1);
 
// x y
   MoveToEx(hdc, 60, 80,lpPoint);
   LineTo(hdc, 60, 320);
   {
   int x1, y1;
   for(y1 = 80; y1<220; y1+=5)
     {
       MoveToEx(hdc, 60, y1 ,lpPoint);
       LineTo(hdc, 40, y1+10);
       MoveToEx(hdc, 60, y1 ,lpPoint);
       LineTo(hdc, 80, y1+10);
     }
   }
  // WINGDIAPI BOOL WINAPI ArcTo(__in HDC hdc, 
  //__in int left, __in int top, __in int right, __in int bottom, 
  //__in int xr1, __in int yr1, __in int xr2, __in int yr2);
  //
  MoveToEx(hdc, 110,25 ,lpPoint);
  ArcTo(hdc, 100,10, 150,110, 150,110, 100,10 );
 
   ReleaseDC(hwndMain, hdc);
   return 0;
 
  case WM_DESTROY:
   PostQuitMessage(0);
   return 0;
  default:
   return DefWindowProc(hwnd,  message, wParam,  lParam);
 }
return DefWindowProc(hwnd,  message, wParam,  lParam);
}
 
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdSHow)
{
MSG msg;
WNDCLASSEX wcx;
 
hInst = hInstance;
 
wcx.cbSize = sizeof(wcx);
wcx.style = CS_HREDRAW | CS_VREDRAW;
wcx.lpfnWndProc = (WNDPROC) WndProc;
wcx.cbClsExtra = 0;
wcx.cbWndExtra = 0;
wcx.hInstance = hInstance;
wcx.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wcx.hCursor = LoadCursor(NULL, IDC_ARROW);
wcx.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
wcx.lpszMenuName = "MainMenu";
wcx.lpszClassName = "MainWClass";
wcx.hIconSm = NULL;
 
if (!RegisterClassEx(&wcx))
{
MessageBox(NULL, "!RegisterClassEx(&wcx)", "!RegisterClassEx(&wcx)", NULL);
}
 
hwndMain = CreateWindow("MainWClass","Main Window",
WS_OVERLAPPEDWINDOW | WS_HSCROLL | WS_VSCROLL,
0,0,400,400,(HWND) NULL, (HMENU) NULL,hInstance, NULL);
if (!hwndMain)
{
MessageBox(NULL, "!hwndMain", "!hwndMain", NULL);
return FALSE;
}
ShowWindow(hwndMain, SW_SHOW);
UpdateWindow(hwndMain);
 
BOOL fGotMessage;
while((fGotMessage = GetMessage(&msg, (HWND) NULL, 0, 0))!=0 &&  fGotMessage!=-1)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
zss
Модератор
Эксперт С++
 Аватар для zss
5947 / 5552 / 1784
Регистрация: 18.12.2011
Сообщений: 14,184
Завершенные тесты: 1
11.11.2012, 12:05     Нарисовать елку и месяц #3
По сообщению WM_PAINT нужно обязательно вызывать BeginPaint
а не GetDC
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
11.11.2012, 12:12     Нарисовать елку и месяц #4
Цитата Сообщение от kg250493 Посмотреть сообщение
как нарисовать елку и месяц.
Для начала надо определиться с тем, как это должно выглядеть. Готового объекта "ёлка" нет, его придётся составить из примитивов. Какая библиотека будет исполнять твою графику? GDI? OpenGL? Или ещё что? Ознакомься с примитивами выбранной библиотеки, с тем, как они выглядят, а потом из этих примитивов составь изображение, можно на бумаге. Потом тебе нужны параметры примитивов. Например, сплайн Безье определяется координатами 4-х точек: 2 точки - концы самого сплайна, а 2 между ними - отрезков касательных, вторые концы которых - концы самого сплайна, длина каждого отрезка пропорциональна радиусу кривизны в соответствующей точке касания. Определись со значениями параметров. Потом тебе нужен синтаксис подготовительных и завершающих операций и синтаксис отрисовки примитивов и всего рисунка.
Yandex
Объявления
11.11.2012, 12:12     Нарисовать елку и месяц
Ответ Создать тему
Опции темы

Текущее время: 07:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru