728x90
300x250
[MFC] 메시지 처리 - Timer(타이머) 만들기

 

Visual Studio 2019(C++.NET MFC 142)에서 Timer(타이머)를 작성해보도록 하겠다.

실시간 타이머는 말 그대로 일정+시간을 의미하는 타이머이다.

일상생활에서 컴퓨터의 "날짜 및 시간"을 보면 확인할 수 있다.

아래의 그림은 정적인 Timer이다.

 

 

이번 예제는 동적인 실시간 타이머를 구현하도록 하겠다.

 

[작성 환경]
Microsoft Visual Studio 2019
Microsoft Windows 10

 


1. 프로젝트 생성하기

 

프로젝트 생성하는 방법은 이전 예제에서도 다루고 있지만, SDI, MDI 등이 있을 수 있어서 표기하고 있다.

 

 

그림 1) 프로젝트 생성하기

 

 

그림 2) 프로젝트 생성하기

 

 

그림 3) 프로젝트 생성하기

 

 

그림 4) 프로젝트 생성하기

 

 

그림 5) 프로젝트 생성하기

 

 

그림 6) 프로젝트 생성하기

 


2. 변수 만들기, 클래스 마법사, 코드 입력하기

 

코드 작성 전략을 소개하면 크게, "변수 만들기"->"클래스 마법사"->"코드 입력하기" 순서로 진행해볼 수 있겠다.

 

 

그림 7) 프로젝트 생성 후 첫 화면

 

 

그림 8) 클래스 뷰에서 "CTimerDigitalView" 오른쪽 버튼 후 추가에서 변수 추가(B)... 클릭하기

 

그림 8처럼 따라서 진행하도록 한다.

 

 

그림 9) 변수 추가의 예(m_bTimerRun)

 

그림 9의 변수는 타이머의 실행 유무를 bool(부울)로 체크하는 함수이다.

 

 

그림 10) 코드 완성의 예

 

정상적으로 변수가 생성되었음을 알 수 있다. 그림 8처럼 그림 11을 다시 따라하도록 한다.

 

 

그림 11) 변수 추가의 예

 

 

그림 12) m_bTimerType 변수 추가 모습

 

그림 12는 m_bTimerType이라는 변수를 추가하고 있는 모습이다. m_bTimerType의 목표는 타이머 출력의 형식을 어떻게 할지 추후에 구현할 때 사용하게 될 것이다. 이 예제에서는 추후 고려에 대해서만 담고 있다.

 

 

그림 13) Timer_DigitalView.cpp 더블 클릭

 

그림 13은 CTimerDigitalView::CTimerDigitalView를 변형한 모습을 담고 있다.

 

// CTimerDigitalView 생성/소멸

CTimerDigitalView::CTimerDigitalView() noexcept
           :m_bTimerRun(false)
           , m_bTimerType(true)
{
           // TODO: 여기에 생성 코드를 추가합니다.

}

 

코드를 입력한다.

 


3. 생성자 만들기

 

Ctrl+Shift+X 단축키를 클릭해서 클래스 마법사를 실행한다.

메시지 탭을 클릭 후, "WM_Create"라고 입력한다.

그리고 "처리기 추가(A)"를 클릭한다.

OnCreate를 선택한 후, "코드 편집(E)"를 클릭한다.

 

 

그림 14) 클래스 마법사 실행하기

 

그림 15처럼 코드를 입력한다.

 

 

그림 15) OnCreate에 코드 작성하기

 

// CTimerDigitalView 메시지 처리기


int CTimerDigitalView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
        if (CView::OnCreate(lpCreateStruct) == -1)
              return -1;

 

        // TODO:  여기에 특수화된 작성 코드를 추가합니다.


        SetTimer(0, 1000, NULL);  // 타이머 설정
        m_bTimerRun = TRUE;    // 타이머 동작

        return 0;
}

 


4. 메시지 출력을 담을 변수 추가하기

 

다음은 메시지 출력을 담을 변수를 추가할 것이다.

CString 자료형으로 메시지 출력을 담을 것이다.

 

CTimerDigitalView를 오른쪽 버튼한 후, "추가", "변수 추가(B)..."를 클릭한다.

 

 

그림 16) 변수 추가의 모습

 

 

그림 17) m_strTimer 변수 추가 모습

 

변수를 추가한 후, 확인을 누른다.

Ctrl+Shift+X키를 눌러서 클래스 마법사를 호출한다.

 

 

그림 18) 클래스 마법사 호출한 모습

 

메시지 탭에서 "WM_TIMER"를 검색한다.

"처리기 추가"를 누른다.

"OnTimer"를 클릭 후 "코드 편집(E)"를 클릭한다.

 

 

그림 19) OnTimer()에 소스코드를 입력한 모습의 예(1)

 

 

그림 20) OnTimer()에 소스코드를 입력한 모습의 예(1)

 

void CTimerDigitalView::OnTimer(UINT_PTR nIDEvent)
{
         // TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
         int hour;
         CString str;
         CTime timer;
         timer = CTime::GetTickCount(); // Visual Studio 2017부터 GetCurrentTime() 삭제

 

        if (m_bTimerType) {
             m_strTimer.Format(_T("현재는 %d년 %d월 %d일 %d시 %d분 %d초"),
                   timer.GetYear(), timer.GetMonth(), timer.GetDay(),
                   timer.GetHour(), timer.GetMinute(), timer.GetSecond());


        }

        else {
                  hour = timer.GetHour();

 

                  if (hour >= 12) {
                        str = _T("PM");
   
                       if (hour >= 13) {
                              hour = hour - 12;
                       }

                 }
                 else {
                       str = _T("AM");
                 }

           

                 m_strTimer.Format(_T("지금은 %s %d %d %초"), str, hour,
                 timer.GetMinute(), timer.GetSecond());

       }

     

       Invalidate();

       CView::OnTimer(nIDEvent);
}

 

코드 입력을 마쳤으면, OnDraw를 클릭한다. 코드를 입력해준다.

 

 

그림 21) OnDraw() 함수 원형 내에 코드 입력해주기

 

// CTimerDigitalView 그리기

 

void CTimerDigitalView::OnDraw(CDC* pDC)
{
        CTimerDigitalDoc* pDoc = GetDocument();
        ASSERT_VALID(pDoc);

  

        if (!pDoc)
             return;

 

        // TODO: 여기에 원시 데이터에 대한 그리기 코드를 추가합니다.

 

        CRect rect;
        GetClientRect(&rect);

 

        // 윈도우의 중앙에 타이머를 출력
        pDC->DrawText(m_strTimer, rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);

}

 

코드 입력을 마쳤다면, Ctrl+Shift+X를 누른다.

 


5. 소멸자 만들기

 

지금 작업은 실시간 타이머를 윈도우 프로그램이 종료할 때, 같이 종료될 수 있도록 지정해주는 기능을 구현하는 것이다.

 

메시지 탭에서 "WM_Destory"를 검색한다.

"처리기 추가(A)"를 클릭한다.

"OnDestory"를 클릭 후 "코드 편집(E)"을 클릭한다.

 

 

그림 22) 창 소멸에 관한 클래스 정의

 

 

 

그림 23) 코드 입력하기

 


6. 시연하기

 

시연하는 것이다.

Ctrl+F5를 눌러서 시연한다.

 

 

그림 25) 시연하기

 

[소스코드]

 

[첨부(Attachment)]

Timer_Digital.7z

 

 


7. 참고자료(Reference)

 

1. CTime::GetCurrentTime intellisense missing - Developer Community, Last Modified , Accessed by 2019-11-30, https://developercommunity.visualstudio.com/content/problem/100004/ctimegetcurrenttime-intellisense-missing.html

 

 

 

2. CTime 클래스 | Microsoft Docs, Last Modified, Accessed by 2019-11-30, https://docs.microsoft.com/ko-kr/cpp/atl-mfc-shared/reference/ctime-class?view=vs-2019#getcurrenttime

 

 

 

 

반응형
728x90
300x250
[MFC] 메시지 처리 - WM_Create, WM_LButtonDBLCLK, AfxMessageBox

 

메시지 처리에 대해서 두 가지 "메시지"를 바탕으로 구현해보도록 하겠다.

WM_Create라는 메시지는 "기존 처리기"에서의 함수 이름으로 OnCreate로 사용되고 있다.

OnCreate란, 윈도우 창이 생성되었을 때, 호출되는 메시지 처리를 말한다.

함수 원형으로 표현했을 때를 말한다.

WM_LButtonDBLCLK라는 메시지는 "기존 처리기"에서의 함수 이름으로 OnLButtonDblClk으로 사용되고 있다.

 

다음은 AfxMessage에 대한 것이다. 말 그대로 메시지 처리에서 상자를 만드는 것이다.

 

 

 

[사용 환경]
Microsoft Visual Studio 2019

Microsoft Windows 10

 


1. 프로젝트 생성하기

 

프로젝트 생성은 아래의 그림 단계처럼 진행할 수 있다.

 

 

그림 1) 프로젝트 생성하기

 

 

그림 2) 프로젝트 생성하기

 

 

 

그림 3) 프로젝트 생성하기

 

 

그림 4) 프로젝트 생성하기

 

 

 

그림 5) 프로젝트 생성하기

 

 

 

그림 6) 프로젝트 생성하기

 


2. 클래스 마법사로 (2가지)기능 생성하기

 

메시지 처리에 관한 기능을 생성할 것이다.

WM_Create와 WM_LButtonDblClick을 생성하여 코드를 입력해주겠다.

 

 

그림 7) 클래스 마법사에서 함수 원형 만들기

 

 

그림 8) 클래스 마법사에서 함수 원형 만들기

 

 

그림 9) 클래스 마법사에서 함수 원형 만들기

 

 

그림 10) 클래스 마법사에서 함수 원형 코드 입력하기

 

 

그림 11) 클래스 마법사에서 함수 원형 만들기

 

AfxMessage(_T("윈도우가 생성되었습니다."), MB_OKCANCEL | MB_ICONINFORMATION );

 

 

그림 11) 클래스 마법사에서 함수 원형 만들기

 

 

그림 12) 클래스 마법사에서 함수 원형에 코드 입력하기

 


3. 시연하기(Practice)

 

코드 입력 등이 완료가 되었다면, "Ctrl + F5키" 또는 "로컬 Windows 디버거"를 클릭하여 시연하면 된다.

 

 

그림 13) 시연하기

 

 

그림 14) 시연하기

 

반응형
728x90
300x250
[MS Visual C++] Visual Studio 2019(C++ MFC) 사용하기 및 OpenCV 4.1 환경설정


Microsoft Windows 10, Visual Studio 2019으로 진행하였습니다.

C++ MFC를 사용하면, 종종 프로그램이 강제로 튕기는 것을 경험할 수 있습니다.

C#으로 가는 것이 좋을 거 같다는 의견입니다.


(I went to Microsoft Windows 10, Visual Studio 2019.)
(With C ++ MFC, you can often experience program bounces.)
(I think it would be nice to go to C#.)



1. MFC 설치하기


Visual Studio 2017, Visual Studio 2019부터는 MFC를 자동으로 지원하지 않습니다. 개별적으로 설치해야 합니다.

(Starting with Visual Studio 2017, Visual Studio 2019, MFC is not automatically supported.)



2. OpenCV 시작하기(Getting started with OpenCV)

OpenCV는 아래의 사이트에서 내려받을 수 있습니다. (OpenCV can be downloaded from the following site.)

https://www.opencv.org




Learn More를 클릭합니다.



OpenCV - 4.1.2에서 Windows를 클릭합니다.

(In OpenCV-4.1.2, click Windows.)






다운받은 파일을 Extract로 풀어줍니다.(Extract the downloaded file with Extract.)





2-1. 압축 풀었던 OpenCV 폴더 C:\로 이동하기(2-1. Navigate to the Unzipped OpenCV folder C:\)


압축 풀었던 Opencv 폴더를 C:\로 이동합니다.(Move the extracted Opencv folder to C:\.)







3. 프로젝트 구성하기(Organize your project)


프로젝트 구성입니다. MFC 앱을 검색하여 더블클릭하면, 아래의 그림을 볼 수 있습니다.

(Project configuration. Search for the MFC app and double-click it to see the picture below.)


단일 문서, 대화 상자, 다중 문서에 대해서 전부 소개하지 않았기 때문에 깊이 생각하지 않으셨으면 합니다.

(I didn't introduce a single document, a dialog box, or multiple documents, so I don't want to think deeply about it.)



4. 프로젝트 속성 변경하기(Changing project properties)


제일 중요한 부분이 아니겠느냐 싶습니다.

이 부분 설정을 해놓으면 코딩은 구역에 프로그램 코드를 작성해서 잘 동작하도록 만들어주면 되겠습니다.

(I think it's the most important part.)
(With this part set up, the coding can be done by writing program code in the section.)












참고하면 흥미로운 정보(Interesting information for your reference)


-> 카테고리에 opencvCsharp 이라는 코너를 운영하고 있습니다. 같이 병행해서 보면 도움이 될 것입니다.

(Categories are operating in the corner of opencvCsharp. It will be helpful to see them in parallel.)

반응형
728x90
300x250
[C#](OpenCVSharp 2.4.10) - 사진 출력

 

OpenCVSharp 2.4.10과 C#을 활용하여 사진을 출력하는 방법을 소개합니다.

(Introducing how to print photos using OpenCVSharp 2.4.10 and Visual C#.)

 

Nuget으로 "OpenCVSharp-AnyCPU 2.4.10"은 설치했다고 가정하고 진행합니다.

(Assume that you have installed "OpenCVSharp-AnyCPU 2.4.10" with Nuget.)

 


1. 로고 내려받기(Download the logo)

 

예제 그림으로 OpenCV 공식사이트에서 로고를 내려받습니다.

(Download the logo from the OpenCV official site as an example.)

 

https://opencv.org

 


2. 사용자 인터페이스 설계하기(Design the User Interface)

 

pictureBoxlpl1은 'SizeMode = StretchImage'로 해줍니다.

pictureBoxlpl1은 Size를 640 x 480으로 해줍니다.

(pictureBoxlpl1 is set to 'SizeMode = StretchImage'.)

(pictureBoxlpl1 sets the Size to 640 x 480.)

 

 

Form1은 Size를 800 x 600으로 해줍니다.

(Form1 sets the size to 800 x 600.)

 

 

아래 그림은 사용자 인터페이스를 임의로 그린 것입니다.

(The figure below is an arbitrary drawing of the user interface.)

 

 

Form1의 Load를 더블클릭해서 소스코드 작성할 수 있는 상태로 만들어줍니다.

 

 


3. 소스코드(Source Code)

 

소스코드입니다.(Source code.)

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using OpenCvSharp;


namespace csharpImageLoad
{

    public partial class Form1 : Form
    {
        IplImage ipl;


        public Form1()
        {
            InitializeComponent();
        }


        private void Form1_Load(object sender, EventArgs e)
        {
            ipl = new IplImage("opencv-logo-1.png", LoadMode.AnyColor);
            pictureBoxIpl1.ImageIpl = ipl;
           
        }

    }

}

 

 


4. 시연(Demonstrate)

 

시연입니다.

그림의 원본은 훨씬 화려하다는 것을 알 수 있습니다.

(Demonstration.)

(Source of the picture can be seen that much glamor.)

 

 

 


5. 참고자료(Reference)

 

 

반응형
728x90
300x250

[C++(OpenCV)] Visual Studio 2019에서 OpenCV 사용하기

안녕하세요. 도도(Dodo)입니다.
이번에 소개할 것은 OpenCV를 Visual Studio 2019버전에서 사용하는 방법에 대해서 소개하려고 합니다.

https://opencv.org 에 접속합니다.
releases에서 사용하는 운영체제에 맞는 버전을 다운로드합니다.

 

다운로드를 기다리도록 합니다.

 

압축된 파일을 해제하면, 용량이 조금 큽니다.

 

아래처럼 압축을 풀어봅니다. 저는 C:\opencv라는 폴더에 압축을 풀었습니다.


Visual Studio 2019를 실행합니다.

Windows 데스크톱 마법사를 선택 후, 다음(N)을 클릭합니다.

프로젝트 명은 저는 "OpenCV_PJT"라고 했는데, 편한 형태로 정하면 됩니다.

콘솔 애플리케이션 형태에서 실험을 진행할 것이기 때문에, "콘솔 애플리케이션(.exe)"를 선택합니다. 그리고 추가 옵션에서 "빈 프로젝트(E)"를 체크합니다. 확인을 클릭합니다.

소스 파일에서 오른쪽 버튼을 클릭하면, 메뉴가 나옵니다. "추가(D)"를 클릭한 후, "새 항목(W)...."을 클릭합니다.

C++ 파일(.cpp)을 클릭한 후에 파일명을 지정해주고 추가(A)를 클릭합니다.

Debug에서 x64로 변경해줍니다.

OpenCV_PJT의 속성을 클릭 후, Alt + Enter를 입력해서 아래의 창을 열게 합니다.

구성(C)를 "모든 구성"으로 변경합니다.

C/C++ 탭에서 추가 포함 디렉터리를 입력해줍니다.
=> C:\opencv\build\include

링커에서 추가 라이브러리 디렉터리 입력란에 아래처럼 입력합니다.
=> c:\opencv\build\x64\vc15\lib

"링커"의 "입력" 탭에서 추가 종속성 항목에 추가입력합니다.
opencv_world410d.lib;


2. 셈플 소스코드

다음은 셈플 소스코드입니다.

 

videocapture_basic.cpp

셈플 코드는 c:\opencv\sources\samples\cpp 폴더에 있습니다.
방금 전 생성한 main.cpp에 videocapture_basic.cpp 소스코드를, 복사 붙여넣기를 하겠습니다.

소스코드 - 붙여넣기한 모습

프로젝트 실행하기

반응형

+ Recent posts