O’ZBEKISTON RESPUBLIKASI RAQAMLI TEXNOLOGIYALAR
VAZIRLIGI
MUHAMMAD AL-XORAZMIY NOMIDAGI TOSHKENT AXBOROT
TEXNOLOGIYALARI UNIVERSITETI
QARSHI FILIALI
Kompyuter injiniring FAKULTETI
K I - 1 3 - 2 2 s GURUH TALABASINING
DASTURLASH 2
FANIDAN
5- Mustaqil ish
Bajardi: SUVANOV URALBEK
Qabul qildi:
QARSHI
Visual C++ ning grafik imkoniyatlari (grafik
holat, tasvirlarni va funksiya grafiklarini
qurish).
Visual C++ muhitida grafik imkoniyatlar keng va qulay, ular yordamida grafik
holatlarni, tasvirlarni va funksiya grafiklarini qurish mumkin. Bu imkoniyatlar
asosan MFC (Microsoft Foundation Classes) va GDI (Graphics Device Interface)
yordamida amalga oshiriladi. Quyida Visual C++ muhitida grafik imkoniyatlar
haqida batafsil ma'lumot keltiriladi.
### Grafik holat
Grafik holatni boshqarish asosan CView yoki CWnd sinflaridan foydalanadi. Bu
sinflar orqali grafik amallarni bajarish mumkin.
#### MFC-da grafik holatni yaratish
Grafik holatni yaratish uchun avvalo CView sinfidan meros olish kerak:
```cpp
class CMyView : public CView
{
protected:
DECLARE_DYNCREATE(CMyView)
public:
virtual void OnDraw(CDC* pDC);
};
```
`OnDraw` funksiyasi grafik obyektlarni chizish uchun ishlatiladi. `CDC` (Device
Context) bu yerda grafik holatni boshqaradi.
Oddiy chiziq chizish
Quyida oddiy chiziq chizish misoli keltirilgan:
```cpp
void CMyView::OnDraw(CDC* pDC)
{
pDC->MoveTo(10, 10);
pDC->LineTo(200, 200);
}
```
Tasvirlarni chizish
Tasvirlarni (images) chizish uchun ham MFC va GDI imkoniyatlaridan
foydalaniladi.
Bitmap tasvirlarni chizish
Bitmap tasvirlarni chizish uchun `CBitmap` sinfi ishlatiladi.
1. **Tasvirni yuklash**:
```cpp
CBitmap bitmap;
bitmap.LoadBitmap(IDB_MYBITMAP);
```
2. **Tasvirni chizish**:
```cpp
void CMyView::OnDraw(CDC* pDC)
{
CDC memDC;
memDC.CreateCompatibleDC(pDC);
CBitmap bitmap;
bitmap.LoadBitmap(IDB_MYBITMAP);
CBitmap* pOldBitmap = memDC.SelectObject(&bitmap);
BITMAP bm;
bitmap.GetBitmap(&bm);
pDC->BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &memDC, 0, 0, SRCCOPY);
memDC.SelectObject(pOldBitmap);
}
```
### Funksiya grafiklarini chizish
Matematik funksiya grafiklarini chizish uchun C++ tilida matematik hisoblashlarni
amalga oshirgan holda natijalarni chizish mumkin.
#### Funksiya grafikasini chizish
Masalan, sinus funksiya grafikasi:
```cpp
void CMyView::OnDraw(CDC* pDC)
{
CRect rect;
GetClientRect(&rect);
int width = rect.Width();
int height = rect.Height();
CPen pen(PS_SOLID, 1, RGB(0, 0, 255));
CPen* pOldPen = pDC->SelectObject(&pen);
int centerX = width / 2;
int centerY = height / 2;
pDC->MoveTo(0, centerY);
for (int x = 0; x < width; x++)
{
double angle = (x - centerX) / 40.0;
int y = centerY - (int)(100 * sin(angle));
pDC->LineTo(x, y);
}
pDC->SelectObject(pOldPen);
}
```
To'liq misol: Sinus grafikasini chizish
Quyida to'liq misol keltirilgan, bunda sinus grafikasi chiziladi.
1. **Loyiha yaratish**:
- Visual Studio'da yangi MFC App loyihasini yarating va "Single Document"
rejimini tanlang.
2. **CMyView klassini yaratish va sozlash**:
- `CMyView` klassini yarating va `OnDraw` funksiyasini sozlang.
3. **OnDraw funksiyasini tahrirlash**:
```cpp
void CMyView::OnDraw(CDC* pDC)
{
CRect rect;
GetClientRect(&rect);
int width = rect.Width();
int height = rect.Height();
CPen pen(PS_SOLID, 1, RGB(0, 0, 255));
CPen* pOldPen = pDC->SelectObject(&pen);
int centerX = width / 2;
int centerY = height / 2;
pDC->MoveTo(0, centerY);
for (int x = 0; x < width; x++)
{
double angle = (x - centerX) / 40.0;
int y = centerY - (int)(100 * sin(angle));
pDC->LineTo(x, y);
}
pDC->SelectObject(pOldPen);
}
```
Xulosa
Visual C++ muhitida grafik imkoniyatlar MFC va GDI yordamida amalga oshiriladi.
Bu imkoniyatlar yordamida grafik holatlarni, tasvirlarni va funksiya grafiklarini
osongina chizish mumkin. Bu jarayonlar uchun CView yoki CWnd sinflaridan meros
olish va `OnDraw` funksiyasini sozlash talab etiladi. Visual Studio muhiti bu
jarayonlarni samarali va qulay qiladi.
|