PaintDC 예제를 직사각형과 타우너 모두 CRect 객체를 사용하도록 수정하시오
void CChildView::OnPaint()
{
 CPaintDC dc(this);
  
 dc.Rectangle(CRect(0,0,200,100));
 dc.Ellipse(CRect(200,100,500,200));
}


1.HelloSDK예제를 실행시 윈도우가 두개 나타나도록 수정하시오.단 하나는 최대화 상태로, 다른 하나는 최소화 상태로 실행된다.

hwnd = CreateWindow("HelloClass", "HelloSDK", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL);
hwnd1 = CreateWindow("HelloClass", "HelloSDK", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL);
ShowWindow(hwnd, SW_SHOWMAXIMIZED);
ShowWindow(hwnd1, SW_SHOWMINIMIZED);

2.HelloMFC예제를 실행시 윈도우가 두개 나타나도록 수정하시오.단 하나는 최대화 상태로, 다른 하나는 최소화 상태로 실행된다.

m_pMainWnd = new CMainFrame;
m_pMainWnd1 = new CMainFrame;
m_pMainWnd->ShowWindow(SW_SHOWMINIMIZED);
m_pMainWnd1->ShowWindow(SW_SHOWMAXIMIZED);

3.HelloMFC예제를 마우스 왼쪽 한번 클릭 대신 더블 클릭 때 메시지 박스가 나타나도록 수정하시오.단,메시지 맵을 사용하지 않고 가상함수를 상속하는 방식으로 처리한다.
virtual BOOL PreTranslateMessage(MSG* pMsg);
...
BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
{
 if (pMsg->message == WM_LBUTTONDBLCLK)
 {
  MessageBox("마우스더블클릭.", "마우스 메시지");
  return TRUE;
 }
 return CFrameWnd::PreTranslateMessage(pMsg);
}


2. Console 예제를 수정하여, 다음 표의 데이터를 보관한다. 그리고 이름을 입력하면 키와 몸무게를 출력하라.

 

이름

(cm)

몸무게(kg)

홍길동

172

72

박철수

164

67

오영희

166

51

구오성

182

80

김순희

159

48

최성주

177

69

신여정

172

51

 

보통 맵을 사용하는 것과 동일하지만, 키 외에 저장되는 데이터가 하나 이상이므로 구조체를 사용해야 한다. 따라서 PHYSIQUE 라는 구조체를 사용하여 CMapStringToPtr 객체에 저장한 후, 입력한 이름을 검색하여 해당 키와 몸무게를 출력한다. CMapStringToPtr 객체에 데이터를 저장할 때 new 연산자를 사용하여 메모리를 할당하므로, 프로그램을 종료할 때 반드시 메모리를 모두 해제해 주어야 한다.

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])

{

            

             else

             {

                     CMapStringToPtr mapData;

 

                     mapData["홍길동"] = new PHYSIQUE(172, 72);

                     mapData["박철수"] = new PHYSIQUE(164, 67);

                     mapData["오영희"] = new PHYSIQUE(166, 51);

                     mapData["구오성"] = new PHYSIQUE(182, 80);

                     mapData["김순희"] = new PHYSIQUE(159, 48);

                     mapData["최성주"] = new PHYSIQUE(177, 69);

                     mapData["신여정"] = new PHYSIQUE(172, 51);

 

                     cout << "이름을 입력하면 키와 몸무게를 알 수 있습니다" << endl;

 

                     TCHAR szName[100];

                     CString strName;

                     void *pData;

 

                     cin >> szName;

                     strName = szName;

 

                     if (mapData.Lookup(strName, pData) == TRUE)

                     {

                                PPHYSIQUE pphysique = (PPHYSIQUE)pData;

                                cout << (LPCTSTR)strName << "의 키: " << pphysique->uiHeight;

                                cout << ", 몸무게: " << pphysique->uiWeight << endl;

                     }

                     else

                                cout << "존재하지 않는 이름입니다" << endl;

 

                     POSITION pos = mapData.GetStartPosition();

                     while (pos)

                     {

                                mapData.GetNextAssoc(pos, strName, pData);

                                delete pData;

                     }

             }

            

}


MFC 템플릿을 사용하기 위해 다음과 같이 afxtempl.h 헤더 파일이 필요하다. PHYSIQUE 는 키와 몸무게를 UINT 멤버로 포함하는 구조체다.

#include "afxtempl.h"

 

typedef struct tagPHYSIQUE

{

           tagPHYSIQUE() {

           };

           tagPHYSIQUE(UINT uiH, UINT uiW)

                     : uiHeight(uiH), uiWeight(uiW) {

           };

 

           UINT    uiHeight;

           UINT    uiWeight;

 

} PHYSIQUE, *PPHYSIQUE;


+ Recent posts