http://www.hackerschool.org/HS_Boards/zboard.php?id=QNA_programming&no=2010 [º¹»ç]
Àú±â MFC¸¦ ÀÌ¿ëÇÏ¿© ¦¸ÂÃ߱⠰ÔÀÓÀ» ¸¸µå´Â ÁßÀä..
Áö±Ý ¹Í½ºÇÏ´Â °Í ±îÁö ¸¸µé¾ú´Âµ¥..
¸¶¿ì½º·Î Ŭ¸¯À» ÇÏ¿©¼ Àâ¾Æ³»´Â ºÎºÐÀ» ¸ð¸£°Ú¾î¿ä...¤§
// TestDlg.cpp : ±¸Çö ÆÄÀÏ
//
#include "stdafx.h"
#include "Test.h"
#include "TestDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// ÀÀ¿ë ÇÁ·Î±×·¥ Á¤º¸¿¡ »ç¿ëµÇ´Â CAboutDlg ´ëÈ »óÀÚÀÔ´Ï´Ù.
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// ´ëÈ »óÀÚ µ¥ÀÌÅÍÀÔ´Ï´Ù.
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV Áö¿øÀÔ´Ï´Ù.
// ±¸ÇöÀÔ´Ï´Ù.
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()
// CTestDlg ´ëÈ »óÀÚ
CTestDlg::CTestDlg(CWnd* pParent /*=NULL*/)
: CDialog(CTestDlg::IDD, pParent)
, m_bStart(false)
, m_bBackCard(false)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CTestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_BN_CLICKED(ID_START, &CTestDlg::OnBnClickedStart)
ON_WM_LBUTTONDOWN()
ON_WM_TIMER()
END_MESSAGE_MAP()
// CTestDlg ¸Þ½ÃÁö 󸮱â
BOOL CTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// ½Ã½ºÅÛ ¸Þ´º¿¡ "Á¤º¸..." ¸Þ´º Ç׸ñÀ» Ãß°¡ÇÕ´Ï´Ù.
// IDM_ABOUTBOX´Â ½Ã½ºÅÛ ¸í·É ¹üÀ§¿¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// ÀÌ ´ëÈ »óÀÚÀÇ ¾ÆÀÌÄÜÀ» ¼³Á¤ÇÕ´Ï´Ù. ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ÁÖ Ã¢ÀÌ ´ëÈ »óÀÚ°¡ ¾Æ´Ò °æ¿ì¿¡´Â
// ÇÁ·¹ÀÓ¿öÅ©°¡ ÀÌ ÀÛ¾÷À» ÀÚµ¿À¸·Î ¼öÇàÇÕ´Ï´Ù.
SetIcon(m_hIcon, TRUE); // Å« ¾ÆÀÌÄÜÀ» ¼³Á¤ÇÕ´Ï´Ù.
SetIcon(m_hIcon, FALSE); // ÀÛÀº ¾ÆÀÌÄÜÀ» ¼³Á¤ÇÕ´Ï´Ù.
// TODO: ¿©±â¿¡ Ãß°¡ ÃʱâÈ ÀÛ¾÷À» Ãß°¡ÇÕ´Ï´Ù.
m_bitCard.LoadBitmapW(IDB_CARD);
m_bitBackCard.LoadBitmapW(IDB_BackCard);
for (int iRow=0; iRow<4; iRow++)
for(int iCol=0; iCol<4; iCol++)
m_iGame[iRow][iCol]= iRow * 4 + iCol / 2;
for(int k=0; k<4; k++)
for(int m=0; m<4; m++)
m_iGame3[k][m] = 0;
m_bStart = false;
// m_bBackCard = false;
return TRUE; // Æ÷Ä¿½º¸¦ ÄÁÆ®·Ñ¿¡ ¼³Á¤ÇÏÁö ¾ÊÀ¸¸é TRUE¸¦ ¹ÝȯÇÕ´Ï´Ù.
}
void CTestDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// ´ëÈ »óÀÚ¿¡ ÃÖ¼ÒÈ ´ÜÃ߸¦ Ãß°¡ÇÒ °æ¿ì ¾ÆÀÌÄÜÀ» ±×¸®·Á¸é
// ¾Æ·¡ Äڵ尡 ÇÊ¿äÇÕ´Ï´Ù. ¹®¼/ºä ¸ðµ¨À» »ç¿ëÇÏ´Â MFC ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ °æ¿ì¿¡´Â
// ÇÁ·¹ÀÓ¿öÅ©¿¡¼ ÀÌ ÀÛ¾÷À» ÀÚµ¿À¸·Î ¼öÇàÇÕ´Ï´Ù.
void CTestDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // ±×¸®±â¸¦ À§ÇÑ µð¹ÙÀ̽º ÄÁÅؽºÆ®
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// Ŭ¶óÀ̾ðÆ® »ç°¢Çü¿¡¼ ¾ÆÀÌÄÜÀ» °¡¿îµ¥¿¡ ¸ÂÃä´Ï´Ù.
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// ¾ÆÀÌÄÜÀ» ±×¸³´Ï´Ù.
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
RedrawAllCard();
BackCard();
}
// »ç¿ëÀÚ°¡ ÃÖ¼ÒÈµÈ Ã¢À» ²ô´Â µ¿¾È¿¡ Ä¿¼°¡ Ç¥½ÃµÇµµ·Ï ½Ã½ºÅÛ¿¡¼
// ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÕ´Ï´Ù.
HCURSOR CTestDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CTestDlg::InitGame(void)
{
m_bStart = true;
RndCard();
Invalidate(TRUE);
}
void CTestDlg::ViewCard(int iRow, int iCol, int iNum)
{
CClientDC pDC(this);
CDC memDC;
memDC.CreateCompatibleDC(&pDC);
CBitmap *oldbm=memDC.SelectObject(&m_bitCard);
pDC.BitBlt(40+iCol*60, 40+iRow*85, 50, 77, &memDC, iNum%4*50, iNum/4*77, SRCCOPY);
memDC.SelectObject(oldbm);
}
void CTestDlg::RedrawAllCard(void)
{
for (int iRow=0; iRow<4; iRow++)
for(int iCol=0; iCol<4; iCol++)
ViewCard(iRow, iCol, m_iGame[iRow][iCol]);
}
void CTestDlg::OnBnClickedStart()
{
// TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù.
InitGame();
}
void CTestDlg::RndCard(void)
{
int iRow, iCol, iRow2, iCol2, iTemp;
srand((unsigned) time(NULL));
for (int i=0; i<10000; i++)
{
iRow = rand() % 4;
iCol = rand() % 4;
iRow2 = rand() % 4;
iCol2 = rand() % 4;
if(m_iGame[iRow][iCol] != m_iGame[iRow2][iCol2])
{
iTemp = m_iGame[iRow][iCol];
m_iGame[iRow][iCol] = m_iGame[iRow2][iCol2];
m_iGame[iRow2][iCol2] = iTemp;
}
}
}
void CTestDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº»°ªÀ» È£ÃâÇÕ´Ï´Ù.
if(!m_bStart)
return;
int iRow=-1, iCol=-1;
BOOL b=PosToIndex(point, iRow, iCol);
if(b)
{
ViewCard(iRow, iCol, m_iGame[iRow][iCol]);
}
CDialog::OnLButtonDown(nFlags, point );
}
bool CTestDlg::PosToIndex(CPoint pnt, int& iRow, int& iCol)
{
iRow = iCol = -1;
for (int i=0; i<4; i++)
if(pnt.y>40+i*85 && pnt.y<40+(i+1)*85)
iRow=i;
for (int j=0; j<4; j++)
if(pnt.x>40+j*60 && pnt.x<40+(j+1)*60)
iCol=j;
if(iRow == -1 || iCol == -1)
return false;
else
return true;
}
void CTestDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CDialog::OnTimer(nIDEvent);
}
void CTestDlg::BackCard(void)
{
for (int iRow=0; iRow<4; iRow++)
for(int iCol=0; iCol<4; iCol++)
{
m_iGame2[iRow][iCol] = 0;
BackCardView(iRow, iCol, m_iGame2[iRow][iCol]);
}
}
void CTestDlg::BackCardView(int iRow, int iCol, int iNum)
{
CClientDC pDC(this);
CDC memDC;
memDC.CreateCompatibleDC(&pDC);
CBitmap *oldbm=memDC.SelectObject(&m_bitBackCard);
pDC.BitBlt(40+iCol*60, 40+iRow*85, 50, 77, &memDC, 0, 0, SRCCOPY);
memDC.SelectObject(oldbm);
}
void CTestDlg::ClearCard(int iRow, int iCol)
{
CClientDC pDC(this);
CPen pen;
CBrush br;
pen.CreatePen(PS_SOLID, 1, GetSysColor(COLOR_3DFACE));
br.CreateSolidBrush(GetSysColor(COLOR_3DFACE));
CPen *oldp=pDC.SelectObject(&pen);
CBrush *oldb=pDC.SelectObject(&br);
pDC.Rectangle(40+iCol*60, 40+iRow*85, 40+iCol*60+100, 40+iRow*85);
pDC.SelectObject(oldp);
pDC.SelectObject(oldb);
}
Âü°í·Î...ÀÖ´Â ¼Ò½º ¾ø´Â ¼Ò½º ´Ù ³Ö¾î¼..®½À´Ï´Ù..¤Ð
hacker_guta@nate.com ³×ÀÌÆ®ÇϽøé ÂÊÁö³ª ´ëÈÁ» °É¾îÁÖ¼¼¿ä..¤Ð |
Hit : 7413 Date : 2009/05/10 06:23
|