ํ์ค๋ก ๊ทธ๋ฆฌ๊ธฐ(์์ ํ๊ธฐ) (๊ธด ์ฝ๋ฉ๋ฌธ์ ๋ ์์)
์์์น์ ~ ๋ค๋ชจ์ํ ondraw~ ํ์ด๋จธ ๊ฐ๋จ์ฝ๋ฉ~ ar ๋ฐ์ดํฐ ๋ค์ ๋ก๋ฉ์ํค๋๋ฒ ~~
#์ ,๋ค๋ชจ ๋ง๋ค๊ฒ์
1ํ์ด๋จธ๋ก ์๋์ผ๋ก ์์ง์ด๊ฒ ๋ง๋ค๊ฑฐ์
2๋ง์ฐ์ค ํค๋ณด๋๋ฅผ์ด์ฉํด์ ์์ง์ผ ๊ฒ์
#
1. view.h ์์ ๋ณ์ ์์ฑ
2. view.cpp ์์ฑ์์์ ์ด๊ธฐํ
3.
# ์ง์ ๊ทธ๋ฆฌ๊ธฐ
#๊ทธ๋ฆผ๊ทธ๋ฆฌ๊ธฐ - ์ ๊ทธ๋ฆฌ๊ธฐ Ellipse <๊ฐ๋จ์ฝ๋ฉ>
1. view.h ์์ circle ๋ณ์ ์ ์ธ
2. view.cpp ์์ฑ์์์ circle ์ด๊ธฐํํ๊ธฐ {100, 100};
3. OnDraw (pDC ํด์ ํ๊ธฐ)
4. ์ ์์ฑ
void ~~ OnDraw(CDC* pDC) {
pDC->Ellipse (์ขํ,์ขํ,์ขํ,์ขํ);
}
#์๋์ผ๋ก ์์ง์ด๋ ์ ๋ง๋ค๊ธฐ
ondraw -> btn -> invalidate() ํ์ฌํ๋ฉด์ ์ง์ฐ๊ณ ๋ค์๊ทธ๋ฆผ
btn ์์์ ๋ฐ๋ก ๊ทธ๋ฆผ -> ClientDc(๋ง๋ค๊ธฐ๋ด๋ถ์) -> ์ง์ฐ์ง์๊ณ ๊ทธ๋ฆผ ๊ณ์๊ทธ๋ฆผ
์ง์ฐ๊ณ ๊ทธ๋ฆฌ๋๊ฐ? ์์ง์ฐ๊ณ ๊ทธ๋ฆฌ๋๊ฐ? (์ฐจ์ด)
#๊ทธ๋ฆผ๊ทธ๋ฆฌ๊ธฐ - ๋ค๋ชจ ๊ทธ๋ฆฌ๊ธฐ Rectangle <๊ฐ๋จ์ฝ๋ฉ>
1. view.h ์์ rect ๋ณ์ ์ ์ธ
2. view.cpp ์์ฑ์์์ rect ์ด๊ธฐํํ๊ธฐ {500,300}
3. OnDraw (pDC ํด์ ํ๊ธฐ)
4. ๋ค๋ชจ ์์ฑ
void ~~ OnDraw(CDC* pDC) {
pDC->Rectangle(์ขํ,์ขํ,์ขํ,์ขํ);
}
โถ CRect ํด๋์ค
#์์ ์ ํ ํ ์ง์ฌ๊ฐํ ๊ทธ๋ฆฌ๊ธฐ
#๋ฌธ์ -
1. OnChar ์ถ๊ฐํ๊ธฐ
2.
#Timer (ํ์ด๋จธ) <๊ฐ๋จ์ฝ๋ฉ>
์ปดํจํฐ์ ๋์ํ๋ ์๊ณ๋ฅผ ํตํด ์ผ์ ๋จ์ ์๊ฐ๋ง๋ค ์ ํธ๋ฅผ ๋ฐ์
void ~~ OnTimer (~ nIDEvent){
circle.x += 30; // ํ์ด๋จธ์ ๋ฐ๋ผ ์ขํ๋ ์์ง์
Invalidate();
CView::OnTimer(~~);
}
//ํ์ด๋จธ๊ฐ ๋๊ฐ์ธ ๊ฒฝ์ฐ ?
//=> ์กฐ๊ฑด๋ฌธ ์ฃผ๊ธฐ (== ํ์ด๋จธ์ ๋ฒํธ ๋งค๊ธฐ๊ธฐ)
void ~~ OnTimer (~ nIDEvent){
if (nIDEvent == 1) {
circle.x += 30; ์
}
if (nIDEvent == 2) {
rect.x += 30;
}
Invalidate();
CView::OnTimer(~~);
}
void ~~View::OnButtonDown(~~nFlags, CPoint point){
setTimer(1,1000,NULL)
//settimer (1๋ฒํ์ด๋จธ, 700๋ง๋ค ๋์ , ...)
//1์ด๋ง๋ค ํ๋ฒ์ฉ OnTimer ์๋ ํธ์ถ
setTimer(2,1000,NULL)
killtimer(1);
//1๋ฒ ํ์ด๋จธ ๋ฉ์ถ๊ธฐ
CView::OnButtonDown(~~nFlags, CPoint point);
}
#๋ง์ฐ์ค๋ก ์ฒ๋ฆฌ
1.๋ง์ฐ์ค ์ผ์ชฝ ๋ฒํผ ๋๋ฅด๋ฉด ์์ง์
2. LbuttonDown ๋ฉ์๋ ์์ ํ์ด๋จธ ์ถ๊ฐ
1.๋ง์ฐ์ค ์ค๋ฅธ์ชฝ๋ฒํผ ๋๋ฅด๋ฉด ๋ฉ์ถ๊ฒ์
2. RButtonDown ๋ฉ์๋ ์์ ํ์ด๋จธ ์ถ๊ฐ
•WM_LBUTTONDOWN : ๋ง์ฐ์ค ์ผ์ชฝ ๋ฒํผ์ ๋๋ ์ ๋ ๋ฐ์
•WM_LBUTTONUP : ๋ง์ฐ์ค ์ผ์ชฝ ๋ฒํผ์ ๋์ ๋ ๋ฐ์
•WM_RBUTTONDOWN : ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ์ ๋๋ ์ ๋ ๋ฐ์
•WM_RBUTTONUP : ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ์ ๋์ ๋ ๋ฐ์
•WM_MOUSEMOVE : ๋ง์ฐ์ค๋ฅผ ์์ง์ผ ๋ ๋ฐ์
#ํค๋ณด๋๋ก ์ฒ๋ฆฌ
2๋ง์ฐ์ค ํค๋ณด๋๋ฅผ์ด์ฉํด์ ์์ง์ผ ๊ฒ์
if (nChar == 'j')
circle.x += 30;
if (nChar == 'k')
circle.x -= 30;
•WM_KEYDOWN : ํค๋ณด๋์ ํค๋ฅผ ๋๋ ์ ๋ ๋ฐ์
•WM_CHAR : ํค๋ณด๋์ ๋ฌธ์ํค๋ฅผ ๋๋ ์ ๋ ๋ฐ์
•WM_KEYUP : ํค๋ณด๋์์ ํค๋ฅผ ๋๋ ๋ค๊ฐ ๋์ ๋ ๋ฐ์
#ํ ์คํธ ์ถ๋ ฅ
#ํ ์คํธ ์ถ๋ ฅํ๊ธฐ (์ ์ขํ)
x,y์ขํ์์๋ถํฐ ๊ธ์จ๋ฅผ ์ด๋ค
#ํ ์คํธ ์ถ๋ ฅํ๊ธฐ (์์ญ์ขํ)
์์ญ์ ์ ํ๊ณ ๊ธ์จ๋ฅผ ์ด๋ค.
๋ค์ํ ์ต์
์ด์์
-๊ธ์ ๋ค์ด๊ฐ๊ณ
-๋ช๊ฐ๊น์ง ์ธ๊ฒ์ด๋
-์ ๋ ฌ์์ญ (๋๊ฐ์ ์ ์ด ํ๋์ ์์ญ์ ๋ง๋ฌ)
#CString ํด๋์ค
MFC๊ธฐ๋ณธ์ String ์ฌ์ฉ์ด ์๋จ -> CString ์ฌ์ฉํด์ผ๋จ (๋ง์ ํจ์๋ค์ ๋ณด์ )
#์๋์ฐ์ ์ ๋ ฅ๋ ๋ฌธ์์ด ์ถ๋ ฅํ๊ธฐ
1.ํค๋์ str ์์ฑ
2.์์ฑ์์์ ์ด๊ธฐํํด์ฃผ์ธ์
3. Ondraw ์์ pDC->TextOut()
4. OnChar ์์ str.AppendChar();
5. Invalidate(); ์ถ๊ฐํ๋ฉด Ondraw ์ค์๊ฐ ๋ค์๊ทธ๋ ค์ค๋ค.
6. ์กฐ๊ฑด์ถ๊ฐ str.Delete(str.GetLeghth()-1);
if (nChar == VK_BACK)
str.Delete(str.GetLeghth()-1);
else
str.AppendChar(nChar);
#append, appendChar ๋ฌธ์์ด ์ถ๊ฐํจ์
#๋์คํฐ ์ฐ์ฐ
๋ฐฐ๊ฒฝ์๊ณผ ์ถ๋ ฅํ๋ ์ ์ฌ์ด์ ์ด๋ฃจ์ด์ง๋ ์ฐ์ฐ
= ์บ๋ฆญํฐ ์ด๋ฏธ์ง + ๋ง์คํฌ ์ด๋ฏธ์ง = ๋ง์คํฌ ์ด๋ฏธ์ง
#๋นํธ๋งต
#BitBlt
#stretchBlt
#์ต์
pDC->StretchBlt(100, 100, 200, 300, &mdc, 100, 100, 500, 500, SRCCOPY);
SRCAND : Combines pixels of the destination and source bitmaps using the Boolean AND operator
AND ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ๋์ ๋นํธ ๋งต๊ณผ ์์ค ๋นํธ ๋งต์ ํฝ์ ์ ๊ฒฐํฉ
SRCCOPY : Copies the source bitmap to the destination bitmap.
์์ค ๋นํธ ๋งต์ ๋์ ๋นํธ ๋งต์ ๋ณต์ฌ
SRCPAINT : Combines pixels of the destination and source bitmaps using the Boolean OR operator.
OR ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ๋์ ๋นํธ ๋งต๊ณผ ์์ค ๋นํธ ๋งต์ ํฝ์
์ ๊ฒฐํฉ
#๋๋ธ๋ฒํผ๋ง
#Docu
#๋ฐ์ดํฐ view - docu ๊ตํ
view : 1ํ๋ฉด์ ์ถ๋ ฅ (API๊ฐ ๋ชฐ๋ ค์์),2 ๋ฐ์ดํฐ ์ ์ฅ
doc : 1๋ฐ์ดํฐ ์ฝ๊ธฐ/์ ์ฅํ๊ธฐ, 3ํ๋ฉด์ถ๋ ฅ
view() : ํ๋ฉด์ ๊ทธ๋ฆฌ๋ ๊ฒ
Douc(): ๋ํ ๋ ๋ฐ์ดํฐ load / save ๋ฐ์ดํฐ ์ ์ฅ ํนํ๋์ด์์
๋ํ์ ๋ณ์ ์์ฑํ๊ณ doc.view์์ฑ์์์ ์ด๊ธฐํ
1. ๋ณด๋ด๊ณ ๋ฐ๊ธฐ์ํด์๋ > doc. hํค๋๊ฐ ์์ด์ผํจ (view์)
doc <> view ์ด๋ํ๋ ค๋ฉด
2. ํ๋ก์ ํธ๋ช
์ ๋ํ onDraw์ ์๋ pDC = getDocument() ๋ฅผ ๊ฐ์ด ํ์ํจ
btn ์ ๋ฃ์ด์ค
pDoc ๋ฅผ ์ฌ์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ํ์ฌ view ์ ๊ฐ์ ๋ฃ์์์์
> doc.h์ ์์ฑํ ๋ณ์์ ๊ฐ๊ณผ ์ขํ๊ฐ ๋ค์ด๊ฐ์ง
์๋ก ๊ตํํ ์ ์๋ค.
#ํ์ผ ์ ์ฅ/๋ก๋ฉ
#๋ฐ์ดํฐ๋ฅผ ํ์ผ๋ก ๋ง๋ค๊ฒ์
๋ฆฌ์์ค๊น์ง ๊ณ ๋ คํด์ค์ผ๋๋ค.
Doc ์ ๋ณ์ ๋ฃ์ด์ ํ ์ด์ ? Doc <-> View pDoc->m_ptData[i] ??
๋ฐ์ดํฐ๋ฅผ ํ์ผ๋ก ๋ง๋ค๊ธฐ์ํด์
Doc ์ง๋ ฌํ
๋ฐฐ์ด์ฒ๋ผ ๋ฐ์ดํฐ๊ฐ ์ง๋ ฌ๋์ด์๋๊ฒ
ar ์ด ๋ฌด์์ธ๊ฐ? >
๋ค ๋ฃ๊ฒ ๋๋ฉด ์ด์ ์์ธ๋ค. (์ง๋ ฌํ)
์ง๊ธ๊น์ง ๋ฐ์ดํฐ๋ฅผ ํ์ผ๋ก ๋ฃ์๊ฒ >
Doc ์ m_ptData๊ฐ ์ ์ฅ๋์ด์์
ํ์ผ์ ์ ์ฅํ ๋๋ ar์ ์ ์ฅํ๋ค>
๊ทธ๋ฆผ๊ทธ๋ฆฌ๊ณ -> aa.dat (ํ์ฅ์๋ฌด๊ด) ์ ์ฅ
aa.dat ์ด๊ธฐ -> ๊ทธ๋ฆผ ๋ํ๋จ
1. ํ์ผ๋ก ๋ง๋ค๋ ค๋ฉด doc . cpp
2. srialize๊ฐ ์๋ค. ⇒ ์ง๋ ฌํ๋ผ๊ณ ํ๋ค. (๋ฐ์ดํฐ๊ฐ ๋ฐฐ์ด์ฒ๋ฌ ์ญ ์ ๋ ฌ๋์ด์๋๊ฒ)
3. ar ๋ก ๋์ด์๊ณ , ํ์ผ์ ์ ์ฅํ ๋๋ ar์๋ค ์ ์ฅํจ
4. ๋ฐฐ์ด์ ๋ช๊ฐ ๋ด๊ฒผ๋์ง ์ ์ ์๋ค.
5. ar์๋ค๊ฐ ๋ณ์๋ฅผ ์ฐจ๊ณก์ฐจ๊ณก ์ง์ด ๋ฃ๋๋ค.
5. ๋ก๋ฉ์ ar์ ์์์๋ถํฐ ๋นผ๋ธ๋ค.
6. dat ํ์ผ๋ก ์ ์ฅํ๋ค. ??
if(ar.IsStoring()){
ar << m_nCount;
for (int i=0; i< m_nCount; i++)
ar<<m_ptData[i];
}
else{
ar >> m_nCount;
for (int i=0; i< m_nCount; i++)
ar>>m_ptData[i];
}
void CMFCApplication2View::DrawX(CPoint point)
{
CClientDC dc(this);
dc.Ellipse(point.x, point.y, point.x + 100, point.y + 100);
}
---------
void CMFCApplication2View::OnLButtonDown(UINT nFlags, CPoint point)
{
DrawX(point);
CView::OnLButtonDown(nFlags, point);
}
void CMFCApplication2View::DrawX(CPoint point)
{
CClientDC dc(this);
dc.MoveTo(point.x - 10, point.y - 10);
dc.LineTo(point.x + 10, point.y + 10);
dc.MoveTo(point.x - 10, point.y + 10);
dc.LineTo(point.x + 10, point.y - 10);
}
-------------
void CMFCApplication2View::OnLButtonDown(UINT nFlags, CPoint point)
{
DrawX(point);
CView::OnLButtonDown(nFlags, point);
}
void CMFCApplication2View::DrawX(CPoint point)
{
CClientDC dc(this);
dc.Rectangle(point.x, point.y, point.x + 100, point.y + 100);
void CMFCApplication1View::OnDraw(CDC* pDC)
{
CMFCApplication1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
CDC memDC;
CBitmap bitmap, bithuman, bitstar,* oldbitmap;
bithuman.LoadBitmap(IDB_HUMAN);
bitstar.LoadBitmap(IDB_STAR);
memDC.CreateCompatibleDC(pDC);
oldbitmap = memDC.SelectObject(&bitstar);
pDC->BitBlt(10, 10, 750, 458, &memDC, 0, 0, SRCCOPY);
memDC.SelectObject(&bithuman);
pDC->BitBlt(100, 300, 80,120, &memDC, 0, 0, SRCCOPY);
pDC->BitBlt(400, 300, 80, 120, &memDC, 150, 0, SRCCOPY);
pDC->StretchBlt(200, 100, 300, 280, &memDC, 230, 170, 300, 280, SRCCOPY);
pDC->StretchBlt(400, 100, 100, 180, &memDC, 0, 0, 80, 120, SRCCOPY);
pDC->StretchBlt(600, 100, 70, 100, &memDC, 80, 150, 80, 120, SRCCOPY);
memDC.SelectObject(oldbitmap);
bithuman.DeleteObject();
bitstar.DeleteObject();
memDC.DeleteDC();
// TODO: ์ฌ๊ธฐ์ ์์ ๋ฐ์ดํฐ์ ๋ํ ๊ทธ๋ฆฌ๊ธฐ ์ฝ๋๋ฅผ ์ถ๊ฐํฉ๋๋ค.
}
void CMFCApplication3Doc::OnLight_40() //-40
{
// TODO: ์ฌ๊ธฐ์ ๋ช
๋ น ์ฒ๋ฆฌ๊ธฐ ์ฝ๋๋ฅผ ์ถ๊ฐํฉ๋๋ค.
for (int i = 0; i < 256; i++)
for (int j = 0; j < 256; j++)
if (m_InImg[i][j] - 40 <= 0) //0~255
m_OutImg[i][j] = 0;
else
m_OutImg[i][j] = m_InImg[i][j] - 40;
UpdateAllViews(NULL);
}
void CMFCApplication3View::OnLight30() //+30
{
// TODO: ์ฌ๊ธฐ์ ๋ช
๋ น ์ฒ๋ฆฌ๊ธฐ ์ฝ๋๋ฅผ ์ถ๊ฐํฉ๋๋ค.
CMFCApplication3Doc* pDoc = GetDocument();
for (int i = 0; i < 256; i++)
for (int j = 0; j < 256; j++)
if (pDoc->m_InImg[i][j] + 30 > 255) //0~255
pDoc->m_OutImg[i][j] = 255;
else
pDoc->m_OutImg[i][j] = pDoc->m_InImg[i][j] + 30;
Invalidate();
}
void CMFCApplication3View::OnLight50() //+50
{
CMFCApplication3Doc* pDoc = GetDocument();
for (int i = 0; i < 256; i++)
for (int j = 0; j < 256; j++)
if (pDoc->m_InImg[i][j] + 50 > 255) //0~255
pDoc->m_OutImg[i][j] = 255;
else
pDoc->m_OutImg[i][j] = pDoc->m_InImg[i][j] + 50;
Invalidate();
// TODO: ์ฌ๊ธฐ์ ๋ช
๋ น ์ฒ๋ฆฌ๊ธฐ ์ฝ๋๋ฅผ ์ถ๊ฐํฉ๋๋ค.
}