728x90
300x250

[(기초전자실습)] Practice of AND gate through Arduino

                            <Arduino를 통한 AND 게이트 실습>

 

아두이노를 통해 And게이트를 구현하는 방법에 대해서 소개하려고 합니다.
먼저 아두이노에 관한 내용을 소개하면서 간단한 저항 읽는 방법 등의 내용으로 글을 시작하겠습니다.
= I will show you how to implement And gate through Arduino.
= First, I will start with a brief introduction to the article about Arduino and how to read simple resistance.


번호

언어

(Language)

단어(Word)

한글 읽기

뜻(Means) 

1

영어(English)

through

뜨롯

통하여

2

영어(English)

Practice

프레티스

실습, 연습, 실험

3

영어(English)

show

보이다.

4

영어(English)

brief

브리프

간결한, 무뚝뚝한

5

영어(English)

article

아티클

글, 논문, 기사, 조항, 물건, 관사




1. 아두이노 zip 타입 - 드라이버(Driver) 설치하기

 

아두이노(윈도우 버전)를 설치 또는 압축을 해제하면 아래의 그림과 같은 내용을 살펴볼 수 있습니다.

 

 

그림 1-1. Arduino 압축 해제한 폴더 내용

 

 

그림 1-2. Arduino 압축 해제한 폴더 내용(Drivers)

 

윈도우 기반에서 설치하는 경우에는 dpinst-amd64(64bit), dpinst-x86(32)을 실행하여 설치할 수 있습니다.

 

 

그림 1-3. Arduino USB Driver 설치 모습

 

그림 1-4. Arduino 드라이버 설치 완료

 

그림 1-5. Arduino 드라이버 설치 완료(USB - COM3)포트

 

 

그림 1-6. Arduino 화면

 

아두이노는 JDK 또는 JRE가 먼저 설치되어야만 동작합니다.

 


2. 부품 / 실습 도구 구성

 

다음은 부품 및 실습에 필요한 도구의 구성입니다.


                                                표 2-1. 부품 품목표

번호

(Number)

부품명(PartName)

구분(Type)

수량(Count)

비고(Remarks)

1

 브레드보드(Breadboard)

 

1개

 

2

 아두이노 Uno R3

보드(Board)

1개

 

3

 FTDI to USB 케이블

USB 케이블(Cable)

1개

 

4

 M74HC0881

And게이트(IC)

1개

 

5

LED 초록색(발광 다이오드)

LED

1개

 

6

저항

저항 (16k ohms 5%)

2개

저항색깔표,
저항색상계산기 참고

7

리드선

 

8개

 

 

 

                                                                           표 2-2. 부품 형상

 

 

 

브레드보드(BreadBoard)

아두이노 우노 보드, USB케이블

 

 

74HC08 - IC

 

 

저항 (16k ohms 5%)

 

 

2-1. 저항의 읽기(Reading resistance)

 

아래의 색깔띠를 보고 저항을 읽으면 됩니다.

You can read the resistance by looking at the color band below.

번호

언어

(Language) 

단어

(Words)

한글 읽기

뜻(Means)

1

English(영어)

resistance

레시스텐스 

저항

2

English(영어)

can

할 수 있다.

3

English(영어)

looking

룩킹

1. 으로 보이는

2.「…하게 보이는생김새가

3.. 얼굴

4

English(영어)

at the color band

엣 디 칼라

색깔 밴드에서

5

English(영어)

color

칼라

6

English(영어)

read

리드

읽다.

7

English(영어)

below

비로우

아래

 

 

 

 

그림 2-1-1. 저항 색 분류

 

그림 2-1-1을 보면, 어떻게 구체적으로 계산하는지 등은 나와있지 않습니다.
아래의 메모에는 저항색을 읽는 방법에 대해서 구체적으로 나와있습니다.
참고하기 바랍니다.

예)

띠의 색깔은 편의상 앞글자만을 따서 부르는 경우가 많다. 예를 들어 '파랑색, 회색, 갈색, 은색'으로 표시되어 있는
저항은 편의상 '파회갈은'으로 부르며, 저항값 680 옴에 오차 10퍼센트 내외라는 것을 뜻한다.


파회갈은 : 68×101옴 ±10%
빨갈빨금 : 21×102옴 ±5%
주주갈금 : 33×101옴 ±5%
갈갈검빨갈 : 110×102옴 ±1%
주흰검갈갈 : 390×101옴 ±1%


- 위키피디아 -

 


 

번호

언어

(Language) 

단어

(Words)

한글 읽기

뜻(Means)

1

English(영어)

significant

시기니피캔트

1.중요한
2.상당한
3.의미심장한
4.의미 있는
5.중대한

2

English(영어)

figures

피겨s(스),

1.모습
2.(세간에 이목을 끄는) 인물
3.모양
4.…을 숫자로 나타내다
5.…을 장식하다

3

English(영어)

black

블랙

검정색

4

English(영어)

brown

브라운

갈색

5

English(영어)

red

래드

빨강색

6

English(영어)

orange

오랜지

오랜지색

7

English(영어)

yellow

앨로

노란색

8

English(영어)

green

그린

녹색

9

English(영어)

blue

블루

파란색

10

English(영어)

violet

바이올렛

보라색

11

English(영어)

grey

그레이

회색

12

English(영어)

white

화이트

흰색

13

English(영어)

gold

골드

금색

14

English(영어)

silver

실버

은색

15

English(영어)

none

없음

16

English(영어)

Multiply

멀티플라이

곱하다.

17

English(영어)

tolerance

토레렌스

공차

18

English(영어)

Temperature

축약어:Temp

탬퍼레츄어

/탬프 

온도

19

English(영어)

 coefficient

(축약어: coeff)

코에피시언트/

코이프

계수

20

English(영어)

Fail

페일

실패

21

English(영어)

Rate

레이트

비율

 


3. 게이트 읽기(데이타시트 보는 방법)

     < Read Gate (How to view datasheet) >

 

아래의 사이트에 접속합니다.

 

 

그림 3-1. AllDataSheet.co.kr

 

그림 3-1처럼 사이트에 접속한 후 부품명을 검색합니다.

 

 

그림 3-2. 부품에 맞는 데이타시트 선택하기

 

보유하고 있는 기종의 IC에 맞는 데이타시트를 클릭합니다.

 

 

그림 3-3. 데이터시트 PDF 파일, AllDataSheets

 

그림 3-3처럼 데이터시트를 확인합니다. PDF 파일을 자세히 관찰하면 해당 부품에 대한 설계 사양도를 볼 수 있습니다.

 

 

그림 3-4. 핀 배열도

 

그림 3-4의 핀 배열도를 참고하도록 합니다.

 


4. 구현(Implements)

 

아래와 같이 브레드보드에 부품들을 체결하도록 합니다.

 

번호

 부품명

 체결 시작 위치

 체결 종료 위치

비고(Remarks) 

1

저항

게이트의 A입력단자

+

 

2

저항

게이트의 B입력단자

+

 

3

노란색 선

VCC(3.3V)

LED (긴다리) 

 

4

+ 리드선

브레드보드 (+) Ln1

아두이노의 GND(+)

 

5

- 리드선

브레드보드 (-) Ln1

VCC(3.3V)

 

6

게이트

적당한 위치

 

 

7

게이트

14번 리드선

(VCC)

14번

+

 

8

LED

다리(긴 거, 작은 거) 순서

적당한 위치 

 

9

게이트 입력Y

리드선

Y입력

LED 작은 다리

 

10

게이트 7번

리드선

(GND)

7번

-

 

 

 

 

그림 4-1. 브레드보드에 체결한 부품들, 도도(Dodo)

 

 

 

그림 4-2. 완성 코드, 도도(Dodo)


[첨부(Attachment)]

example.7z


코드 설명은 간단합니다.

HIGH로 출력할 때, 게이트 입력을 1, LOW로 표현하면 게이트는 입력 0으로 처리합니다.

 

참고로 알면 도움되는 것

- 실제로 논리회로에서 입력 A의 1, 입력 B의 1은 실제로는 1이 아닙니다.
   미세하게 파형이 움직입니다.

 

실제로 그림 4-1, 그림 4-2와 같이 구현하면, 동작하는데 반응이 특이합니다.

입력 A

입력 B

출력 Y (LED)

LOW

LOW

출력(녹색) 또는 OFF(출력 없음)

LOW

HIGH

출력(녹색)

HIGH

LOW

출력(녹색)

HIGH 

HIGH

OFF(출력 없음)



5. 참고자료(Reference)

 

1. AllDataSheet, AllDataSheet, https://www.alldatasheet.co.kr/, 접속일자 2018-07-25

2. 74HC08 데이터시트, Datasheet, 올데이터시트, https://www.alldatasheet.co.kr/view.jsp?Searchword=74HC08, 접속일자 2018-07-25

3. Arduino - Software, Arduino, https://www.arduino.cc/en/Main/Software, 접속일자 2018-07-25

4. Resistor color code, Resistorguide, http://www.resistorguide.com/resistor-color-code/, 접속일자 2018-07-25

5. 저항기, 위키피디아, https://ko.wikipedia.org/wiki/저항기, 접속일자 2018-07-25

6. looking - 다음 어학사전, http://dic.daum.net/search.do?q=looking, 접속일자 2018-07-25

7. figures - 다음 어학사전, http://dic.daum.net/search.do?q=figures, 접속일자 2018-07-25

8. article - 다음 어학사전, http://dic.daum.net/search.do?q=article, 접속일자 2018-07-25

반응형
728x90
300x250

[MFC] 윈도우 프로그래밍 기초 - 색상 대화상자 - 실습 1

 

 

 

앞서 소개한 색상 대화상자를 우리가 직접 호출해보겠습니다.

 

먼저 클래스 생성자에 대해 소개하겠습니다.

 

1. CColorDialog 생성자

 

 CColorDialog ( COLORREF clrInit = 0, DWORD dwFlags = 0, CWnd* pParentWnd = NULL ) 

 

생성자에는 3개의 Parameter를 사용할 수 있습니다.

Default Value가 이미 존재하므로 특별히 따로 지정하지 않아도 사용할 수는 있습니다.

 

CColorDialog는 아래와 같이 4가지 유형으로 사용할 수 있습니다.

 

 CColorDialog dlg;

 CColorDialog dlg(RGB(255, 0, 0));

 CColorDialog dlg(RGB(255, 0, 0), CC_FULLOPEN);

 CColorDialog dlg(RGB(255, 0, 0), CC_FULLOPEN, this);

 

첫 번째, COLORREF clrInit는 기본 색상을 지정하기 위해 사용됩니다.

 

RGB형을 사용하면 됩니다.

COLORREF는 참고로 별도로 지정하지 않으면, RGB(0, 0, 0)을 기본으로 지정합니다.

 

두 번째, DWORD dwFlags입니다.

5가지 유형으로 사용할 수 있습니다.

 

 

 사용 유형

 설명 또는 동작

 CC_ANYCOLOR

 

 

 CC_FULLOPEN

 

 

 CC_PREVENTFULL

 

 

사용자 지정 색 만들기가 비활성화 됩니다.

 

 CC_RGBINIT

 clrInit으로 지정한 색상을 기본으로 선택하기 위한 플래그

 CC_SOLIDCOLOR

 기본 색상 대화상자를 선택하기 위한 플래그

 

2. 대화상자를 화면에 출력하기

 

 CColorDialog dlg(RGB(0, 0, 0) );

 dlg.DoMoal( ) ;  

 

 

 

3. 선택된 색상 - 반환

 

GetColor( ) 맴버 함수

-> CColorDialog 클래스는 GetColor ( ) 맴버함수를 포함하고 있음

 

원형 구조

 

 COLOREF GetColor( ) const; 

 

우리가 만들 프로그램은 아주 기본적인 프로그램입니다.

 

 

 1. 색상 대화상자 객체 생성

 2. 생성된 색상 대화상자 출력 (DoModal)

 3. 선택된 COLORREF 값 획득

 4. 획득된 COLORREF 값을 사용하여 처리

 

결과

 

 

 

이벤트 처리기랑 이런 부분은 생략하겠습니다.

다 이해하셨다는 전제 하에 진행하겠습니다.

 

이해 안되셨으면 다시 돌아가서 이전 글을 확인하시고 오세요.

 

void CColorDlgExDlg::OnBnClickedButton1()
{
       CColorDialog colorDlg;

       if (colorDlg.DoModal() == IDOK)
       {
           COLORREF color = colorDlg.GetColor();
  
           CString strTmp;

           strTmp.Format(_T("RGB 출력: (%u, %u, %u) "), GetRValue(color), GetGValue(color), GetBValue(color));


           AfxMessageBox(strTmp);

       }

}

 

 

반응형
728x90
300x250

[MFC] 윈도우 프로그래밍 기초 - 체크 박스 + 버튼 응용 예제

 

오늘 만들어볼 예제는 체크 박스를 선택하면 내용이 출력되는 것을 만들도록 하겠습니다.

VB6 수준으로 정말 쉽습니다.

 

실습을 하기에 앞서 이론적인 지식을 잠시 넣도록 하겠습니다.

 


1. 구현에 관한 기본 지식

afxwin.h

-> void SetCheck(int nCheck)

-> int GetCheck( ) const

 

SetCheck( )는 말 그대로 체크박스의 값을 변경하는 일을 수행하며

GetCheck( )는 아래의 인자값으로서 체크박스의 현재 상태를 출력한다.

상태값은 아래와 같이 두 가지로 구분된다.

 

 인자 값

 내용

 BST_UNCHECKED

 체크박스 컨트롤이 체크 안된 상태를 의미

 BST_CHECKED

 체크박스 컨트롤이 체크된 상태를 의미 

 


2. 결과 - 완성 프로그램

 

 


3. 실습

 

 

 

위처럼 디자인을 합니다.

 

 컨트롤 ID

 변수 이름

 변수 형식

 범주(T)

 IDC_CHECK1

 m_CheckBox1

 CButton

 Control

 IDC_CHECK2 

 m_CheckBox2

 CButton 

 Control 

 IDC_CHECK3

 m_CheckBox3

CButton

 Control

 IDC_BUTTON

 

 

 

 

IDC_BUTTON은 이벤트 처리기로 OnBnClickedButton1()을 생성해줍니다.

(사용자프로젝트명)Dlg.h에 가면 아래와 같이 잘빠지게 생성된 것을 확인할 수 있습니다.

 

 

(사용자프로젝트명)Dlg.cpp 코드 부분

 

맨 위의 #ifdef _ #endif 아래에 이와 같이 코드를 짜봅니다.

- 0번째 줄부터 보면 찾기 쉽습니다.

 

 

 

BOOL CMFCControlDlg::OnInitDialog()  - 약 74줄 근방에 위치함

{

         (생략)

         
          // TODO: 여기에 추가 초기화 작업을 추가합니다. - 약 103줄 근방에 위치함.
           SetDlgItemText(IDC_BUTTON1, _T("확인"));
           SetDlgItemText(IDC_CHECK1, pszName[0]);
           SetDlgItemText(IDC_CHECK2, pszName[1]);
           SetDlgItemText(IDC_CHECK3, pszName[2]);

 

           m_CheckBox1.SetCheck(BST_CHECKED);
           m_CheckBox2.SetCheck(BST_UNCHECKED);
           m_CheckBox3.SetCheck(BST_UNCHECKED);


}

 

 

void CMFCControlDlg::OnBnClickedButton1() // 약 166줄 위치
{
        // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.

         CString szMsg;

        if (m_CheckBox1.GetCheck() == BST_CHECKED)
        {
               GetDlgItemText(IDC_CHECK1, szMsg);
               szMsg.Append(_T("님"));
        }

        if (m_CheckBox2.GetCheck() == BST_CHECKED)
        {
               GetDlgItemText(IDC_CHECK2, szMsg);
               szMsg.Append(_T("님"));
         }

         if (m_CheckBox3.GetCheck() == BST_CHECKED)
         {
               GetDlgItemText(IDC_CHECK3, szMsg);
               szMsg.Append(_T("님"));
         }

         szMsg.Append(_T("\n안녕하세요."));

         AfxMessageBox(szMsg);

}

 

이렇게 짜보면 예제를 실행할 수 있습니다.

 

반응형
728x90
300x250

[MFC] 윈도우 프로그래밍 기초 - 대화 상자 실습

 

이번 글에서는 이전에 소개한 대화 상자 글을 바탕으로 실제 대화 상자를 구현하는 방법에 대해 소개하겠습니다.

 


1. 실습 주제) MFCModal 창 만들어 보기

 

 

 

  동작 전 결과

 

 동작 후 결과

 

 


1-1. BITMAP 리소스 추가

 

 

리소스 추가(A) 클릭

 

 

새로 만들기(N) 클릭 

->참고로 "가져오기" 하셔도 됩니다.

 

 

전 이렇게 그렸습니다.

 

 

이번에 그린 그림의 이름(ID)은 IDB_EARTH로 하겠습니다.

 

 


1-2. 컨트롤 박스 배치하기

 

 

 

 

 컨트롤 꾸며보기 - 이 부분은 여러분이 도구상자 탭을 이용하여 직접 하셔야 합니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

컨트롤 

 ID

 Caption

 Image

Type

Dialog

IDD_MFCMODAL_DIALOG

 

 

 

Edit Box

IDC_INPUT_NAME

 

 

 

Edit Box 

IDC_INPUT_SCHOOL

 

 

 

Edit Box

IDC_INPUT_DEPT

 

 

 

Edit Box

IDC_INPUT_GRAD

 

 

 

Static

IDC_STATIC

이름

 

 

Static

IDC_STATIC 

학교

 

 

Static

IDC_STATIC

학과

 

 

Static

IDC_STATIC

학년

 

 

Picture Control

IDC_INPUT_IMAGE

 

 IDC_EARTH

 Bitmap

Edit Box

IDC_OUTPUT_NAME

 

 

 

Edit Box

IDC_OUTPUT_SCHOOL

 

 

 

Edit Box

IDC_OUTPUT_DEPT

 

 

 

Edit Box

IDC_OUTPUT_GRAD 

 

 

 

Picture Control

IDC_OUTPUT_IMAGE

 

 

 Bitmap

Static

IDC_STATIC

이름

 

 

Static 

IDC_STATIC 

학교

 

 

Static

IDC_STATIC

학과 

 

 

Static 

IDC_STATIC

학년

 

 

Group Box

IDC_STATIC

최종입력결과

 

 

Button

IDB_BTN_COMPLETE 

입력완료 

 

 

 

리소스를 이처럼 편집해주시기 바랍니다.

 


1-3 변수 추가

 

하나를 대상으로 변수 추가 방법을 소개해드리겠습니다.

나머지는 여러분들이 아래의 테이블을 참고하여 만들어주시기 바랍니다.

 

 

 

변수 추가(B) 클릭

 

 

 

 범주(T)를 Value로 변경

 

 

변수 형식 : CString,

변수 이름 : m_staticName

최대 문자수 : 20

 

마침을 클릭합니다.

 

변수 추가 후에 코드가 변동됩니다.

변동되는 코드는

MFCModalDlg.h와 MFCModalDlg.cpp입니다.

 

 

 

 MFCModalDlg.h

 

 

 MFCModalDlg.cpp의 DoDataExchange()

-> 여기에서 사용하는 역할을 간접적으로 학습하셨으면 합니다.

 

참고로 DDX와 DDV는

앞서 살펴보셨겠지만, 대화상자에서의 최대 문자 수와 같은 제약조건을 다루는 함수입니다.

 

 

이 예제에서 만들어야 할 멤버 변수 설정 값 테이블입니다.

첫 번째 예제를 통해 변수 하나는 만들었으므로 나머지에 대한 테이블을 소개하겠습니다.

 

 컨트롤 ID

변수 형식

범주

최대 문자 수

 IDC_INPUT_SCHOOL

CString m_staticSchool

Value

50

 IDC_INPUT_DEPT

CString m_staticDept

Value

20

 IDC_INPUT_GRAD

CString m_staticGrad

Value

5

 IDC_OUTPUT_NAME

CString m_strName

Value

20

 IDC_OUTPUT_SCHOOL

CString m_strSchool

Value

50

 IDC_OUTPUT_DEPT

CString m_strDept

Value

20

 IDC_OUTPUT_GRAD

CString m_strGrad

Value

5

 IDC_OUTPUT_IMAGE

CString m_strImage

Control

 

 


1-4. 이벤트 처리기 추가

 

입력완료 버튼에서 오른쪽 버튼을 클릭한 후 이벤트 처리기 추가(A)를 클릭합니다. 

 

 

 

기본값으로 두가 추가 및 편집을 클릭합니다.

 

 

OnBnClickedBtnComplete( )라는 함수가 생성됩니다.

 

MFCModalDlg.h와 MFCModalDlg.cpp의 파일이 영향을 받게 됩니다.

어떻게 코드가 생성되었는지 확인해보겠습니다. 

 

 

 

결과)

 afx_msg void OnBnClickedBtnComplete( )라는 함수가 추가되었습니다. 

 

 

 결과)

  MFCModalDlg.cpp의 void CMFCModalDlg::OnBnClickedBtnComplete( )라는 함수 구현부가 완성되었습니다.

 


1-5 기능 구현

 


{
         CBitmap MyImageView;

       

         UpdateData(TRUE);  // UpdateData(TRUE)함수를 통해 데이터가 전송됩니다.

         m_strName = m_staticName;
         m_strSchool = m_staticSchool;
         m_strDept = m_staticDept;
         m_strGrad = m_staticGrad;

 

         MyImageView.LoadBitmap(IDB_EARTH);

         m_staticImage.SetBitmap(MyImageView);

 

         UpdateData(FALSE);

 
}
 

 OnBnClickedBtnComplete( ) 구현

 


1-6. 동작해보기

 

반응형
728x90
300x250

[MFC] 윈도우 프로그래밍 기초 - 팝업메뉴 만들기(리소스의 이해)

 

오늘 실습은 팝업 메뉴 만드는 방법에 대해 실습할 계획입니다.

실습과 더불어 간단하게 리소스의 큰 그림을 이해할 수 있도록 작성하였습니다.

 

 

 

 출력 결과

 


1. 프로젝트 생성하기

 

1. Visual Studio 2013을 켭니다.

2. 새 프로젝트를 만듭니다.

 

 

프로젝트 명은 Lecture로 하겠습니다.

 

3. 다음은 MFC 프로그램에 대한 기본 환경 설정입니다.

아래와 같이 설정하고 마침을 누르겠습니다.

 

 


2. 리소스 뷰에 대한 설명(숲 그리기)

 

2-1. 리소스란?

사전적 의미로 자원이란 의미를 가지고 있습니다.

전쟁으로 비유하면,

 

 

 

리소스는 위의 그림과 같은 관계가 될 수 있습니다.

 

Figure 2-1. <Source And Resource> - Relational Model

 

 

소스코드와 리소스는 각각 컴파일되어서, 소스코드는 *.obj로 변환되고, 리소스 파일은 *.rc로 컴파일이 됩니다.

이들이 Link 단계에서 결합 후에 Execution File로서 결합됩니다.

 

이번 실습에서의 큰 그림은 아래와 같이 소개할 수 있습니다.

 

 

2-2. 리소스 뷰

 

앞서 설명한 이야기를 이해하였으면, 실제 리소스가 MFC에서 어떻게 사용되는지 소개하겠습니다.

프로젝트를 앞서 생성했으면, 왼쪽에 리소스 뷰란 탭을 클릭하면 아래와 같은 창을 살펴볼 수 있습니다.

 

 

 

 

 리소스 뷰

 리소스 파일의 위치 (솔루션 탐색기)

 

리소스 파일 생성에 관해 말씀드리면, MFC 라이브러리를 이용하지 않는 프로그램이면 이용하면 리소스에 대해 관리가 될 수 있다고 보이나 MFC를 이용한 파일이면 굳이 자동으로 생성되는 만큼 별도로 추가 구성을 할 필요가 없습니다.

 

.rc라는 파일은 즉, 다수의 리소스를 모아놓은 하나의 집합이라고 정의할 수 있습니다.

 

2-3. 리소스 식별 접두어 (관례)

* 사용자 정의 리소스 식별 매크로의 접두어

 

설명

접두어

아이콘

IDI_

커서

IDC_

비트맵

IDB_

문자열 항목

IDS_ 또는 IDM_

메뉴

IDR_

메뉴 항목

IDM_

엑셀러레이터

IDR_

엑셀러레이터 키

IDM_

도구 모음

IDR_ 

도구 모음 버튼

IDM_

대화 상자

IDD_

컨트롤

IDC_

 

* MFC 내장 리소스 식별 매크로의 접두어

 

설명

접두어

아이콘 

AFX_IDI_

커서

AFX_IDC_

비트맵

AFX_IDB_

버전

VS_VERSION

문자열 항목

AFX_IDS_ 또는 ID_

메뉴 항목

ID_

엑셀러레이터

AFX_IDR_

엑셀러레이터 키

ID_

도구 모음 버튼

ID_

대화 상자

AFX_IDD_

컨트롤

AFX_IDC_ 또는 ID_

 

2-4. 리소스 뷰 간단하게 살펴보기

 

 


3. 실습(팝업 메뉴 만들기)

 

이번 실습은 "팝업 메뉴 만들기"라는 주제로 실습을 하겠습니다.

 

3-1. 메뉴 만들기

 

 

리소스 추가를 클릭합니다.

 

 

Menu를 선택하고 새로 만들기(N)을 클릭합니다.

 

 

 

3-2. 아래와 같이 메뉴를 꾸며주기.

 

 

 

 

 

 메뉴 구성하기

 리소스뷰 - 방금 만든 메뉴 리소스 ID 변경 -> IDR_POPUP

 

3-3. 클래스 뷰의 CMainFrame 설정하기

WM_CONTEXTMENU라는 영역에 OnContextMenu를 생성하는 방법을 실습해보겠습니다.

 

 

 

 

 

 

<Add> OnContextMenu를 클릭하면

MainFrm.cpp과 MainFrm.h의 파일에 자동 생성되어 구현할 수 있는 상태로 코드가 생성됩니다.

즉, MainFrm.cpp의 함수 원형을 변경할 경우, MainFrm.h 쪽도 저장하셔야합니다.

 

(참고)

 

 

 

 기본 생성된 MainFrm.h의 OnContextMenu 원형 구조

 

 

 

 

 기본 생성된 MainFrm.cpp의 구현 구조

 

3-4. 코딩하기

 

 
void CMainFrame::OnContextMenu(CWnd *pWnd, CPoint point)
{
      CMenu popup;
      CMenu* pMenu;

      popup.LoadMenuW(IDR_POPUP);
      pMenu = popup.GetSubMenu(0);

      pMenu->TrackPopupMenu(TPM_LEFTALIGN || TPM_RIGHTBUTTON, point.x, point.y, this);

}

수정) MainFrm.cpp

 void CMainFrame::OnContextMenu(CWnd *pWnd, CPoint point);

수정) MainFrm.h

 

(참고) 팝업 메뉴 소스코드 분석

 

* < LoadMenu() >의 원형

 

* BOOL CMenu::LoadMenu(LPCTSTR lpszResourceName) 

 

메뉴 리소스를 읽어오는 함수를 의미합니다.

 

* < GetSubMenu() >의 원형

 

* CMenu *CMenu::GetSubMenu(int nPos) const 

 

GetSubMenu() 함수는 메뉴 표시줄에서 하위 메뉴를 구하는 함수입니다.

즉, 구하고자 하는 함수의 하위 메뉴는 0부터 시작함.

 

 

* <TrackPopupMenu() > 의 원형

 

* BOOL CMenu::TrackPopupMenu( UINT nFlags, int x, int y, CWnd *pWnd, LPCRECT lpRect = NULL ) 

 

uFlags에는 여러가지 조합으로 사용가능

인수 uFlags에는 여러 가지 값을 조합하여 설정할 수 있는데, 팝업 메뉴의 정렬과 동작 설정 값을 비트 OR 연산자로 연결해 지정할 수 있음.

 

<팝업 메뉴의 정렬 설정 값>

값 

내용 

TPM_LEFTALIGN

팝업 메뉴를 지정한 위치에서 좌측 정렬 

TPM_RIGHTALIGN

팝업 메뉴를 지정한 위치에서 우측 정렬 

TPM_CENTERALIGN

팝업 메뉴를 지정한 위치에서 가운데 정렬

TPM_TOPALIGN

팝업 메뉴를 지정한 위치에서 위쪽 정렬

TPM_BOTTOMALIGN

팝업 메뉴를 지정한 위치에서 바닥 정렬

TPM_VCENTERALIGN

팝업 메뉴를 지정한 위치에서 수직 중앙 정렬

 

<팝업 메뉴의 동작 설정 값>

 

내용

TPM_LEFTBUTTON

마우스 왼쪽 버튼 클릭시 메뉴 수행

TPM_RIGHTBUTTON

마우스 오른쪽 버튼 클릭시 메뉴 수행

TPM_NONOTIFY

메뉴 항목이 선택되었을 때 통지 메시지를 보내지 않음

TPM_RETURNCMD 

메뉴 항목이 선택되었을 때 선택된 메뉴 항목의 ID를 반환 

 

* int x, int y

-> Point의 좌표 (eg: point.x, point y)

 

* pWnd

pWnd는 팝업 메뉴를 소유하고 있는 윈도우를 지정해주면 됨.

-> pWnd

 

3-5. 컴파일 해보기

마우스 오른쪽 버튼을 클릭해보면, 아래와 같이 정상 동작함을 확인할 수 있습니다.

 

 

반응형

+ Recent posts