[사용자 윈도우 생성]
class CMyWnd: public CWnd
{
DECLARE_MESSAGE_MAP()
afx_msg void OnMouseMove(UINT nFlag, CPoint pt);
}
BEGIN_MESSAGE_MAP(CMyWnd, CWnd)
ON_WM_MOUSEMOVE()
END_MESSAGE_MAP()
void CMyWnd::OnMouseMove(UINT nFlag, CPoint pt)
{
CWnd::OnMouseMove(nFlag, pt);
}
[윈도우 클래스 등록]
CString strClass;
strClass = AfxRegisterWndClass(
CS_VREDRAW | CS_HREDRAW,
::LoadCursor(NULL, IDC_ARROW),
(HBRUSH) ::GetStockObject(BLACK_BRUSH),
::LoadIcon(NULL, IDI_APPLICATION));
[윈도우생성 - 자식윈도우 스타일]
CMyWnd* pWnd = new CMyWnd();
pWnd->Create(
0, /* strClass */
L"My Window - Child",
WS_CHILD | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_VISIBLE,
CRect(300, 0, 600, 400),
this,
888, // 아이디
0);
* 자동으로 WS_CHILD 적용되어 버림
[윈도우생성 - 팝업윈도우 스타일]
pWnd->CreateEx(
0, // WS_EX_CLIENTEDGE, WS_EX_TOPMOST,
strClass, // 사용자 등록 클래스가 반드시 존재해야 한다.
L"My Window - Popup",
WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_BORDER | WS_THICKFRAME,
CRect(100,100,600,400),
this, // NULL로 해도 된다. 대신 명시적으로 파괴해주어야 한다.
0 // 1이상의 값으로 하면 프로그램 죽는다.!!!
);
2018년 10월 17일 수요일
2018년 10월 12일 금요일
[MFC] 메세지처리실습
0. WindowProc(UINT msg, WPARAM wParam, LPARAM lParam)
- Win32처럼 메세지 처리
[1번 유형]
1. WM_MOUSEMOVE
- OnMouseMove( )
- ON_WM_MOUSEMOVE
- 클래스위저드
[2번 유형]
2. WM_COMMAND
- 메뉴 추가 (리소스 편집기)
- Min, Max
- CChildView에서 실습, Max는 추후 실습
- ON_COMMAND
[2번 유형]
3. 버튼생성 및 WM_COMMAND
- OnCreate( )
- WM_COMMAND
- ON_COMMAND
[3번 유형]
4. 에딧박스 생성
- EN_CHANGE
- ON_EN_CHANGE
[5번 유형]
5. 사용자메세지 처리
- #define WM_MYMESSAGE WM_USER+1
- ON_MESSAGE(WM_MYMESSAGE, OnMyMessage)
- LRESULT OnMyMessage(WPARAM, LPARAM)
* 4번 유형은 다음 예제에서 다룸.
--------------------
CChildView.H
--------------------
// ChildView.h: CChildView 클래스의 인터페이스
//
#pragma once
#define WM_MYMESSAGE WM_USER+1
// CChildView 창
class CChildView : public CWnd
{
// 생성입니다.
public:
CChildView();
// 특성입니다.
public:
CButton * m_pBtn;
CEdit* m_pEdt;
// 작업입니다.
public:
// 재정의입니다.
protected:
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
// 구현입니다.
public:
virtual ~CChildView();
// 생성된 메시지 맵 함수
protected:
afx_msg void OnPaint();
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnTestMin();
afx_msg void OnClick();
afx_msg void OnChange();
afx_msg LRESULT OnMyMessage(WPARAM, LPARAM);
};
--------------------
CChildView.CPP
--------------------
// ChildView.cpp: CChildView 클래스의 구현
//
#include "stdafx.h"
#include "My.h"
#include "ChildView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CChildView
CChildView::CChildView()
{
m_pBtn = 0;
m_pEdt = 0;
}
CChildView::~CChildView()
{
if (m_pBtn) {
m_pBtn->DestroyWindow();
delete m_pBtn;
}
if (m_pEdt) {
m_pEdt->DestroyWindow();
delete m_pEdt;
}
}
BEGIN_MESSAGE_MAP(CChildView, CWnd)
ON_WM_PAINT()
ON_WM_MOUSEMOVE()
ON_WM_CREATE()
ON_COMMAND(999, OnClick)
ON_COMMAND(ID_TEST_MIN, &CChildView::OnTestMin)
ON_EN_CHANGE(888, OnChange)
ON_MESSAGE(WM_MYMESSAGE, OnMyMessage)
END_MESSAGE_MAP()
// CChildView 메시지 처리기
BOOL CChildView::PreCreateWindow(CREATESTRUCT& cs)
{
if (!CWnd::PreCreateWindow(cs))
return FALSE;
cs.dwExStyle |= WS_EX_CLIENTEDGE;
cs.style &= ~WS_BORDER;
// cs.style |= (WS_CAPTION|WS_THICKFRAME);
cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS,
::LoadCursor(nullptr, IDC_ARROW), reinterpret_cast(COLOR_WINDOW+1)
/*(HBRUSH)::GetStockObject(GRAY_BRUSH)*/,
nullptr);
return TRUE;
}
void CChildView::OnPaint()
{
CPaintDC dc(this); // 그리기를 위한 디바이스 컨텍스트입니다.
// TODO: 여기에 메시지 처리기 코드를 추가합니다.
// 그리기 메시지에 대해서는 CWnd::OnPaint()를 호출하지 마십시오.
}
void CChildView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
CDC* pDC = 0;
pDC = GetDC();
CString strPos;
strPos.Format(L"%04d %04d", point.x, point.y);
pDC->TextOut(0, 0, strPos);
ReleaseDC(pDC);
CWnd::OnMouseMove(nFlags, point);
}
int CChildView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CWnd::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: 여기에 특수화된 작성 코드를 추가합니다.
m_pBtn = new CButton();
m_pBtn->Create(L"click", WS_CHILD | WS_VISIBLE,
CRect(0, 200, 200, 400), this, 999);
m_pEdt = new CEdit();
m_pEdt->Create(WS_CHILD | WS_VISIBLE | WS_BORDER,
CRect(200, 200, 400, 400), this, 888);
return 0;
}
void CChildView::OnTestMin()
{
// TODO: 여기에 명령 처리기 코드를 추가합니다.
this->MoveWindow(500, 100, 500, 500, 1);
}
void CChildView::OnClick()
{
//MessageBox(L"button click");
SendMessage(WM_MYMESSAGE, 0, 0);
}
void CChildView::OnChange()
{
CDC* pDC = 0;
pDC = GetDC();
CString strMsg;
m_pEdt->GetWindowText(strMsg);
pDC->TextOut(0, 32, strMsg);
ReleaseDC(pDC);
}
LRESULT CChildView::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
MessageBox(L"WM_MYMESSAGE");
return 0;
}
- Win32처럼 메세지 처리
[1번 유형]
1. WM_MOUSEMOVE
- OnMouseMove( )
- ON_WM_MOUSEMOVE
- 클래스위저드
[2번 유형]
2. WM_COMMAND
- 메뉴 추가 (리소스 편집기)
- Min, Max
- CChildView에서 실습, Max는 추후 실습
- ON_COMMAND
[2번 유형]
3. 버튼생성 및 WM_COMMAND
- OnCreate( )
- WM_COMMAND
- ON_COMMAND
[3번 유형]
4. 에딧박스 생성
- EN_CHANGE
- ON_EN_CHANGE
[5번 유형]
5. 사용자메세지 처리
- #define WM_MYMESSAGE WM_USER+1
- ON_MESSAGE(WM_MYMESSAGE, OnMyMessage)
- LRESULT OnMyMessage(WPARAM, LPARAM)
* 4번 유형은 다음 예제에서 다룸.
--------------------
CChildView.H
--------------------
// ChildView.h: CChildView 클래스의 인터페이스
//
#pragma once
#define WM_MYMESSAGE WM_USER+1
// CChildView 창
class CChildView : public CWnd
{
// 생성입니다.
public:
CChildView();
// 특성입니다.
public:
CButton * m_pBtn;
CEdit* m_pEdt;
// 작업입니다.
public:
// 재정의입니다.
protected:
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
// 구현입니다.
public:
virtual ~CChildView();
// 생성된 메시지 맵 함수
protected:
afx_msg void OnPaint();
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnTestMin();
afx_msg void OnClick();
afx_msg void OnChange();
afx_msg LRESULT OnMyMessage(WPARAM, LPARAM);
};
--------------------
CChildView.CPP
--------------------
// ChildView.cpp: CChildView 클래스의 구현
//
#include "stdafx.h"
#include "My.h"
#include "ChildView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CChildView
CChildView::CChildView()
{
m_pBtn = 0;
m_pEdt = 0;
}
CChildView::~CChildView()
{
if (m_pBtn) {
m_pBtn->DestroyWindow();
delete m_pBtn;
}
if (m_pEdt) {
m_pEdt->DestroyWindow();
delete m_pEdt;
}
}
BEGIN_MESSAGE_MAP(CChildView, CWnd)
ON_WM_PAINT()
ON_WM_MOUSEMOVE()
ON_WM_CREATE()
ON_COMMAND(999, OnClick)
ON_COMMAND(ID_TEST_MIN, &CChildView::OnTestMin)
ON_EN_CHANGE(888, OnChange)
ON_MESSAGE(WM_MYMESSAGE, OnMyMessage)
END_MESSAGE_MAP()
// CChildView 메시지 처리기
BOOL CChildView::PreCreateWindow(CREATESTRUCT& cs)
{
if (!CWnd::PreCreateWindow(cs))
return FALSE;
cs.dwExStyle |= WS_EX_CLIENTEDGE;
cs.style &= ~WS_BORDER;
// cs.style |= (WS_CAPTION|WS_THICKFRAME);
cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS,
::LoadCursor(nullptr, IDC_ARROW), reinterpret_cast
/*(HBRUSH)::GetStockObject(GRAY_BRUSH)*/,
nullptr);
return TRUE;
}
void CChildView::OnPaint()
{
CPaintDC dc(this); // 그리기를 위한 디바이스 컨텍스트입니다.
// TODO: 여기에 메시지 처리기 코드를 추가합니다.
// 그리기 메시지에 대해서는 CWnd::OnPaint()를 호출하지 마십시오.
}
void CChildView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
CDC* pDC = 0;
pDC = GetDC();
CString strPos;
strPos.Format(L"%04d %04d", point.x, point.y);
pDC->TextOut(0, 0, strPos);
ReleaseDC(pDC);
CWnd::OnMouseMove(nFlags, point);
}
int CChildView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CWnd::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: 여기에 특수화된 작성 코드를 추가합니다.
m_pBtn = new CButton();
m_pBtn->Create(L"click", WS_CHILD | WS_VISIBLE,
CRect(0, 200, 200, 400), this, 999);
m_pEdt = new CEdit();
m_pEdt->Create(WS_CHILD | WS_VISIBLE | WS_BORDER,
CRect(200, 200, 400, 400), this, 888);
return 0;
}
void CChildView::OnTestMin()
{
// TODO: 여기에 명령 처리기 코드를 추가합니다.
this->MoveWindow(500, 100, 500, 500, 1);
}
void CChildView::OnClick()
{
//MessageBox(L"button click");
SendMessage(WM_MYMESSAGE, 0, 0);
}
void CChildView::OnChange()
{
CDC* pDC = 0;
pDC = GetDC();
CString strMsg;
m_pEdt->GetWindowText(strMsg);
pDC->TextOut(0, 32, strMsg);
ReleaseDC(pDC);
}
LRESULT CChildView::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
MessageBox(L"WM_MYMESSAGE");
return 0;
}
2018년 10월 1일 월요일
[MFC] 프로젝트시작하기-실습계획
프로젝트 시작 설정 및 실습계획
-MFC 프로젝트 설정
-MFC 핵심 실습 목차
-MFC 에서 자유롭게 메세지 처리하기
-MFC 에서 자유롭게 윈도우 생성하기
- MFC 기법 실습 목차
-그래픽/대화장사/도큐먼트-뷰/동적라이브러리 등
https://www.slideshare.net/jaepilko10/mfc-117702027
-MFC 프로젝트 설정
-MFC 핵심 실습 목차
-MFC 에서 자유롭게 메세지 처리하기
-MFC 에서 자유롭게 윈도우 생성하기
- MFC 기법 실습 목차
-그래픽/대화장사/도큐먼트-뷰/동적라이브러리 등
https://www.slideshare.net/jaepilko10/mfc-117702027
피드 구독하기:
글 (Atom)