프로고
2018년 12월 1일 토요일
2018년 11월 28일 수요일
[C#] 속성코스
Crash Course on C#
nonezerok@gmail.com
----------------------------------------
0.기본
----------------------------------------
객체: 변수, 함수
Form 객체
- 변수, 함수
- 속성, 이벤트 (이 점이 윈도우 프로그래밍을 기가 막히게 쉽게 만드는 요인)
----------------------------------------
1.프로그램종료
----------------------------------------
Application.Exit();
----------------------------------------
2.마우스클릭 + 메세지박스
----------------------------------------
MessageBox.Show(" ");
----------------------------------------
3.마우스무브 이벤트 + 글자 출력
----------------------------------------
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
Graphics g = CreateGraphics();
String drawString = "Sample Text";
Font drawFont = new Font("Arial", 16);
SolidBrush drawBrush = new SolidBrush(Color.Black);
PointF drawPoint = new PointF(150.0F, 150.0F);
g.DrawString(drawString, drawFont, drawBrush, drawPoint);
g.Dispose();
/*
Graphics g = CreateGraphics();
Font drawFont = new Font("FixedSys", 16);
SolidBrush drawBrush = new SolidBrush(Color.Black);
float x = 0.0F;
float y = 0.0F;
float width = 200.0F;
float height = 50.0F;
RectangleF drawRect = new RectangleF(x, y, width, height);
// 글자가 쓰여지는 부분을 회색으로 채운다.
Color backGray = Color.FromArgb(240, 240, 240);
SolidBrush backBrush = new SolidBrush(backGray);
g.FillRectangle(backBrush, 0, 0, 200, 50);
String str = string.Format("{0:d5} {1:d5}", e.X, e.Y);
g.DrawString(str, drawFont, drawBrush, drawRect);
g.Dispose();
*/
}
----------------------------------------
4. 자식윈도우생성, 생성이벤트, 종료
----------------------------------------
private void Form1_Load(object sender, EventArgs e)
{
frm2 = new Form2(); // Form2(this) 식으로 구현
frm2.Owner = this; // Form1의 자식윈도우로 설정
frm2.Show();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
MessageBox.Show("I'm going to die");
//frm2.Close(); // 윈도우파괴
//frm2.Dispose(); // 메모리해제
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
MessageBox.Show("I am dead");
}
----------------------------------------
5. 자식윈도우 스타일: TopLevel=false, Control.Add(frm2)
----------------------------------------
private void Form1_Load(object sender, EventArgs e)
{
frm2 = new Form2();
frm2.Owner = this;
frm2.TopLevel = false;
Controls.Add(frm2);
frm2.Show();
}
FormBorderStyle
IsMdiContainer
private Form1 frmMain=null; // 자식윈도우
frmMain = this.Owner as Form1; // 자식윈도우; frm2.Owner = this;
//frmMain = (Form2)this.Owner;
frmMain.TextBox1.Text = "Message From Child Window";
Form2(Form parent)
{
frmMain = parent as Form1;
}
----------------------------------------
6. 컨트롤윈도우
----------------------------------------
button, textbox, label, progressbar, timer, picture box, menu
메뉴-
frmMain.Dispose();
Application.Exit();
----------------------------------------
7.대화상자윈도우
----------------------------------------
Form2 frm2 = new Form2();
if (frm2.ShowDialog(this) == DialogResult.OK)
{
textBox1.Text = frm2.textBox1.Text; // 도구상자 속성에서 public으로 설정
//MessageBox.Show("오케이");
}
frm2.Dispose(); // 메모리 해제
private void button1_Click(object sender, EventArgs e)
{
DialogResult = System.Windows.Forms.DialogResult.OK;
this.Close(); // 윈도우 파괴
}
----------------------------------------
8. (2016/11/20)OpenCVSharp
- NuGet
----------------------------------------
using OpenCvSharp;
using OpenCvSharp.Extensions;
// https://www.nuget.org/packages/
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Mat src = new Mat("lena.bmp", ImreadModes.Color);
src = src.Blur(new OpecCvSharp.Size(7,7));
/*
using (new Window("dst image", src))
{
Cv2.WaitKey();
}
*/
// 필터링 적용
//
// 아래와 같이 했을때는 올바른 버퍼를 가리키고 있지 않았음.
//byte[] pImg = src.ToBytes();
//
IntPtr pImg = src.Data;
// for unsafe
//1. 프로젝트의 속성 페이지를 엽니다.
//2. 빌드 속성 페이지를 클릭합니다.
//3. 안전하지 않은 코드 허용 확인란을 선택합니다.
unsafe
{
//byte* buff = (byte*)pImg.ToPointer();
byte* buff = (byte *)src.DataPointer;
for (int i = 0, idx = 0; i < src.Cols * src.Rows; i++, idx += 3)
{
int gray=0;
gray = (buff[idx + 0] + buff[idx + 1] + buff[idx + 2]);
gray = gray / 3;
buff[idx + 0] = (byte)gray;
buff[idx + 1] = (byte)gray;
buff[idx + 2] = (byte)gray;
}
}
//
// 한번은 비트맵으로 바꾸어야 한다
//
Bitmap bmp;
bmp = src.ToBitmap();
// 이렇게 하는 것 보다는...
// pictureBox1.Image = bmp;
//
// 아래와 같이 하는 것이 낫지 않을까.
// (고속처리)
IntPtr hWnd = pictureBox1.Handle;
Graphics newGraphics = Graphics.FromHwnd(hWnd);
// newGraphics.DrawRectangle(new Pen(Color.Red, 3), 0, 0, 200, 100);i
newGraphics.DrawImage(bmp, 0, 0);
newGraphics.Dispose();
}
----------------------------------------
Last Updated: 2016/10/05
nonezerok@gmail.com
----------------------------------------
0.기본
----------------------------------------
객체: 변수, 함수
Form 객체
- 변수, 함수
- 속성, 이벤트 (이 점이 윈도우 프로그래밍을 기가 막히게 쉽게 만드는 요인)
----------------------------------------
1.프로그램종료
----------------------------------------
Application.Exit();
----------------------------------------
2.마우스클릭 + 메세지박스
----------------------------------------
MessageBox.Show(" ");
----------------------------------------
3.마우스무브 이벤트 + 글자 출력
----------------------------------------
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
Graphics g = CreateGraphics();
String drawString = "Sample Text";
Font drawFont = new Font("Arial", 16);
SolidBrush drawBrush = new SolidBrush(Color.Black);
PointF drawPoint = new PointF(150.0F, 150.0F);
g.DrawString(drawString, drawFont, drawBrush, drawPoint);
g.Dispose();
/*
Graphics g = CreateGraphics();
Font drawFont = new Font("FixedSys", 16);
SolidBrush drawBrush = new SolidBrush(Color.Black);
float x = 0.0F;
float y = 0.0F;
float width = 200.0F;
float height = 50.0F;
RectangleF drawRect = new RectangleF(x, y, width, height);
// 글자가 쓰여지는 부분을 회색으로 채운다.
Color backGray = Color.FromArgb(240, 240, 240);
SolidBrush backBrush = new SolidBrush(backGray);
g.FillRectangle(backBrush, 0, 0, 200, 50);
String str = string.Format("{0:d5} {1:d5}", e.X, e.Y);
g.DrawString(str, drawFont, drawBrush, drawRect);
g.Dispose();
*/
}
----------------------------------------
4. 자식윈도우생성, 생성이벤트, 종료
----------------------------------------
private void Form1_Load(object sender, EventArgs e)
{
frm2 = new Form2(); // Form2(this) 식으로 구현
frm2.Owner = this; // Form1의 자식윈도우로 설정
frm2.Show();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
MessageBox.Show("I'm going to die");
//frm2.Close(); // 윈도우파괴
//frm2.Dispose(); // 메모리해제
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
MessageBox.Show("I am dead");
}
----------------------------------------
5. 자식윈도우 스타일: TopLevel=false, Control.Add(frm2)
----------------------------------------
private void Form1_Load(object sender, EventArgs e)
{
frm2 = new Form2();
frm2.Owner = this;
frm2.TopLevel = false;
Controls.Add(frm2);
frm2.Show();
}
FormBorderStyle
IsMdiContainer
private Form1 frmMain=null; // 자식윈도우
frmMain = this.Owner as Form1; // 자식윈도우; frm2.Owner = this;
//frmMain = (Form2)this.Owner;
frmMain.TextBox1.Text = "Message From Child Window";
Form2(Form parent)
{
frmMain = parent as Form1;
}
----------------------------------------
6. 컨트롤윈도우
----------------------------------------
button, textbox, label, progressbar, timer, picture box, menu
메뉴-
frmMain.Dispose();
Application.Exit();
----------------------------------------
7.대화상자윈도우
----------------------------------------
Form2 frm2 = new Form2();
if (frm2.ShowDialog(this) == DialogResult.OK)
{
textBox1.Text = frm2.textBox1.Text; // 도구상자 속성에서 public으로 설정
//MessageBox.Show("오케이");
}
frm2.Dispose(); // 메모리 해제
private void button1_Click(object sender, EventArgs e)
{
DialogResult = System.Windows.Forms.DialogResult.OK;
this.Close(); // 윈도우 파괴
}
----------------------------------------
8. (2016/11/20)OpenCVSharp
- NuGet
----------------------------------------
using OpenCvSharp;
using OpenCvSharp.Extensions;
// https://www.nuget.org/packages/
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Mat src = new Mat("lena.bmp", ImreadModes.Color);
src = src.Blur(new OpecCvSharp.Size(7,7));
/*
using (new Window("dst image", src))
{
Cv2.WaitKey();
}
*/
// 필터링 적용
//
// 아래와 같이 했을때는 올바른 버퍼를 가리키고 있지 않았음.
//byte[] pImg = src.ToBytes();
//
IntPtr pImg = src.Data;
// for unsafe
//1. 프로젝트의 속성 페이지를 엽니다.
//2. 빌드 속성 페이지를 클릭합니다.
//3. 안전하지 않은 코드 허용 확인란을 선택합니다.
unsafe
{
//byte* buff = (byte*)pImg.ToPointer();
byte* buff = (byte *)src.DataPointer;
for (int i = 0, idx = 0; i < src.Cols * src.Rows; i++, idx += 3)
{
int gray=0;
gray = (buff[idx + 0] + buff[idx + 1] + buff[idx + 2]);
gray = gray / 3;
buff[idx + 0] = (byte)gray;
buff[idx + 1] = (byte)gray;
buff[idx + 2] = (byte)gray;
}
}
//
// 한번은 비트맵으로 바꾸어야 한다
//
Bitmap bmp;
bmp = src.ToBitmap();
// 이렇게 하는 것 보다는...
// pictureBox1.Image = bmp;
//
// 아래와 같이 하는 것이 낫지 않을까.
// (고속처리)
IntPtr hWnd = pictureBox1.Handle;
Graphics newGraphics = Graphics.FromHwnd(hWnd);
// newGraphics.DrawRectangle(new Pen(Color.Red, 3), 0, 0, 200, 100);i
newGraphics.DrawImage(bmp, 0, 0);
newGraphics.Dispose();
}
----------------------------------------
Last Updated: 2016/10/05
2018년 10월 17일 수요일
[MFC] 일반윈도우생성
[사용자 윈도우 생성]
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이상의 값으로 하면 프로그램 죽는다.!!!
);
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월 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
2018년 9월 16일 일요일
[python] 파일입출력
# 파일 입출력
file = open("test.txt", "w")
file.write('hello')
file.write("\n")
file.write('world')
file.write("\n")
file.close()
file=open("test.txt", "r")
lines = file.read()
file.close()
print(lines)
#
msg = ["HELLO\n", "WORLD\n", "안녕\n"]
file = open("test.txt", "w", encoding='utf-8')
file.writelines(msg)
file.close()
file = open("test.txt", "r", encoding='utf-8')
line = file.readline()
while line != '':
print(line, end='')
line = file.readline()
file.close()
print()
file = open("test.txt", "r", encoding='utf-8')
lines = file.readlines()
file.close()
line = ''
for line in lines:
print(line, end='')
#
# list 저장
#
import csv
f=open('a.csv', 'w',newline='')
writer=csv.writer(f, delimiter=',')
writer.writerow([1,2,3])
writer.writerow([4,5,6])
f.close()
#
# list 읽기; 읽어들인 결과는 문자
#
import csv
f=open('a.csv', 'r', encoding='utf-8')
reader=csv.reader(f)
for line in reader:
print(line)
f.close()
#
# 읽어들일 타입지정:
#
print()
import numpy as np
data = np.loadtxt('a.csv', delimiter=',', dtype=np.int32) #np.float32
print(data)
-----
참고
-----
a=[1,2,3,4,5,6]
for i in range(len(a)-1):
print(a[i],",",end="")
print(a[len(a)-1])
python a.py > a.txt
python a.py >> a.txt
#
#
#
a=[]
for i in range(3):
b = input()
a.append(b)
print(a)
#다음과 같이 키보드에서 입력
1
2
3
>>>['1', '2', '3']
----- a.txt -----
1
2
3
----------------
python a.py < a.txt
>>>['1', '2', '3']
file = open("test.txt", "w")
file.write('hello')
file.write("\n")
file.write('world')
file.write("\n")
file.close()
file=open("test.txt", "r")
lines = file.read()
file.close()
print(lines)
#
msg = ["HELLO\n", "WORLD\n", "안녕\n"]
file = open("test.txt", "w", encoding='utf-8')
file.writelines(msg)
file.close()
file = open("test.txt", "r", encoding='utf-8')
line = file.readline()
while line != '':
print(line, end='')
line = file.readline()
file.close()
print()
file = open("test.txt", "r", encoding='utf-8')
lines = file.readlines()
file.close()
line = ''
for line in lines:
print(line, end='')
#
# list 저장
#
import csv
f=open('a.csv', 'w',newline='')
writer=csv.writer(f, delimiter=',')
writer.writerow([1,2,3])
writer.writerow([4,5,6])
f.close()
#
# list 읽기; 읽어들인 결과는 문자
#
import csv
f=open('a.csv', 'r', encoding='utf-8')
reader=csv.reader(f)
for line in reader:
print(line)
f.close()
#
# 읽어들일 타입지정:
#
print()
import numpy as np
data = np.loadtxt('a.csv', delimiter=',', dtype=np.int32) #np.float32
print(data)
-----
참고
-----
a=[1,2,3,4,5,6]
for i in range(len(a)-1):
print(a[i],",",end="")
print(a[len(a)-1])
python a.py > a.txt
python a.py >> a.txt
#
#
#
a=[]
for i in range(3):
b = input()
a.append(b)
print(a)
#다음과 같이 키보드에서 입력
1
2
3
>>>['1', '2', '3']
----- a.txt -----
1
2
3
----------------
python a.py < a.txt
>>>['1', '2', '3']
[python] 넘파이예제
print("# 1 #")
data = (11, 9, 6, 14)
n = len(data)
for i in range(n):
print(data[i])
#
print()
print("# 2 #")
s = sum(data)
print("sum={0}".format(s))
#
print("\n# 3 #")
print("data = ( ", end="")
for i in range(n):
print(data[i], end=" ")
print(")")
#
print("\n# 4 #")
for i in range(n):
if (i==0):
print("data=( %d"%(data[0]), end="")
else:
print(", %d"%(data[i]), end="")
print(" )")
#
print("\n# 5 #")
for freq in data:
s += freq
print("sum={0}".format(s))
print()
#
print("\n# 6 #")
print("sum=%d"%(s))
print("sum=%5d"%(s))
print("sum=%-5d*"%(s))
print("sum=%05d"%(s))
print("sum=%05d %5.2f"%(s, s))
print("sum=%05d %6.2f"%(s, s))
#
print("\n# 7 #")
def show(list):
n = len(list)
for v in list:
print(v, end=" ")
print()
relativeFreq=[]
for freq in data:
relativeFreq.append(freq / s)
show(relativeFreq)
# initialize list
print("\n# 8 #")
lst = [0 for _ in range(10)]
lst = [0]*10
show(lst)
#
a = np.array([])
a = np.resize(a, 10)
a.size '10
a.shape '(10,)
#
a = np.arange(0, 3)
'a=[0,1,2]
# relative frequency
print("\n# 9 #")
relativeFreq = [0]*len(data)
for idx, freq in enumerate(data):
relativeFreq[idx] = freq / s
show(relativeFreq)
# label
print("\n# 10 #")
label = ['A', 'B', 'C', 'D']
for idx in range(len(data)):
print("%1c\t%2d\t%1.3f" %(label[idx], data[idx], relativeFreq[idx]))
# numpy
print("\n# 11 #")
import numpy as np
ndata = np.array([11, 9, 6, 14])
s = ndata.sum()
relativeFreq = [ freq / s for freq in ndata]
for idx in range(ndata.size):
print("%1c\t%2d\t%1.3f\t%2.2f%%" %(label[idx], ndata[idx], relativeFreq[idx], relativeFreq[idx]*100.0))
# * graph
print("\n# 12 #")
HEIGHT = 10
star = np.array([f * HEIGHT for f in relativeFreq])
show(star)
star = star.round()
star = star.astype(np.int32)
show(star)
space = [HEIGHT-s for s in star]
show(space)
for i in range(HEIGHT):
c = [i < s for s in space]
print(c)
c = [' ' if c[idx]==True else '*' for idx in range(len(star))]
print(c)
#
print("\n# 13 #")
for i in range(HEIGHT):
c = [i < s for s in space]
c = [' ' if c[idx]==True else '*' for idx in range(len(star))]
print(c)
#
print("\n# 14 #")
for i in range(HEIGHT):
c = [i < s for s in space]
c = [' ' if c[idx]==True else '*' for idx in range(len(star))]
for j in range(len(star)):
print("%c "%c[j], end="")
print()
# remove empty line
print("\n# 15 #")
for i in range(HEIGHT):
c = [i < s for s in space]
c = [' ' if c[idx]==True else '*' for idx in range(len(star))]
d = all([c[idx]==' ' for idx in range(len(star))])
if (d==False):
for j in range(len(star)):
print("%c "%c[j], end="")
print()
# another example
print("\n# 16 #")
label = ['seoul', 'pusan', 'daegu', 'incheon', 'kwangju', 'daejeon', 'ulsan']
ndata = np.array([5087, 1639, 1180, 1350, 664, 726, 544])
sum = ndata.sum()
rf = [f/sum for f in ndata]
for idx in range(ndata.size):
print("%10s\t%2d\t%1.3f\t%2.2f%%" %(label[idx], ndata[idx], rf[idx], rf[idx]*100))
print()
H = 20
star = np.array([f * H for f in rf])
star = star.round()
star = star.astype(np.int32)
star = [H-s for s in star]
for i in range(H):
c = [' ' if i < s else '*' for s in star]
d = all([c[idx]==' ' for idx in range(ndata.size)])
if (d == False):
for j in range(ndata.size):
print("%c" %c[j], end='')
print()
# pyplot
print("\n# 17 #")
import matplotlib.pyplot as plt
plt.plot(rf)
plt.bar(range(ndata.size), rf)
plt.xticks(range(ndata.size), label)
plt.show()
# data set -> relative freq., cumulative relative freq. table, histogram
# read data from file, data.csv
# pyplot: http://bcho.tistory.com/m/1201 pyplot 사용법
# numpy: http://taewan.kim/post/numpy_cheat_sheet/
data = (11, 9, 6, 14)
n = len(data)
for i in range(n):
print(data[i])
#
print()
print("# 2 #")
s = sum(data)
print("sum={0}".format(s))
#
print("\n# 3 #")
print("data = ( ", end="")
for i in range(n):
print(data[i], end=" ")
print(")")
#
print("\n# 4 #")
for i in range(n):
if (i==0):
print("data=( %d"%(data[0]), end="")
else:
print(", %d"%(data[i]), end="")
print(" )")
#
print("\n# 5 #")
for freq in data:
s += freq
print("sum={0}".format(s))
print()
#
print("\n# 6 #")
print("sum=%d"%(s))
print("sum=%5d"%(s))
print("sum=%-5d*"%(s))
print("sum=%05d"%(s))
print("sum=%05d %5.2f"%(s, s))
print("sum=%05d %6.2f"%(s, s))
#
print("\n# 7 #")
def show(list):
n = len(list)
for v in list:
print(v, end=" ")
print()
relativeFreq=[]
for freq in data:
relativeFreq.append(freq / s)
show(relativeFreq)
# initialize list
print("\n# 8 #")
lst = [0 for _ in range(10)]
lst = [0]*10
show(lst)
#
a = np.array([])
a = np.resize(a, 10)
a.size '10
a.shape '(10,)
#
a = np.arange(0, 3)
'a=[0,1,2]
# relative frequency
print("\n# 9 #")
relativeFreq = [0]*len(data)
for idx, freq in enumerate(data):
relativeFreq[idx] = freq / s
show(relativeFreq)
# label
print("\n# 10 #")
label = ['A', 'B', 'C', 'D']
for idx in range(len(data)):
print("%1c\t%2d\t%1.3f" %(label[idx], data[idx], relativeFreq[idx]))
# numpy
print("\n# 11 #")
import numpy as np
ndata = np.array([11, 9, 6, 14])
s = ndata.sum()
relativeFreq = [ freq / s for freq in ndata]
for idx in range(ndata.size):
print("%1c\t%2d\t%1.3f\t%2.2f%%" %(label[idx], ndata[idx], relativeFreq[idx], relativeFreq[idx]*100.0))
# * graph
print("\n# 12 #")
HEIGHT = 10
star = np.array([f * HEIGHT for f in relativeFreq])
show(star)
star = star.round()
star = star.astype(np.int32)
show(star)
space = [HEIGHT-s for s in star]
show(space)
for i in range(HEIGHT):
c = [i < s for s in space]
print(c)
c = [' ' if c[idx]==True else '*' for idx in range(len(star))]
print(c)
#
print("\n# 13 #")
for i in range(HEIGHT):
c = [i < s for s in space]
c = [' ' if c[idx]==True else '*' for idx in range(len(star))]
print(c)
#
print("\n# 14 #")
for i in range(HEIGHT):
c = [i < s for s in space]
c = [' ' if c[idx]==True else '*' for idx in range(len(star))]
for j in range(len(star)):
print("%c "%c[j], end="")
print()
# remove empty line
print("\n# 15 #")
for i in range(HEIGHT):
c = [i < s for s in space]
c = [' ' if c[idx]==True else '*' for idx in range(len(star))]
d = all([c[idx]==' ' for idx in range(len(star))])
if (d==False):
for j in range(len(star)):
print("%c "%c[j], end="")
print()
# another example
print("\n# 16 #")
label = ['seoul', 'pusan', 'daegu', 'incheon', 'kwangju', 'daejeon', 'ulsan']
ndata = np.array([5087, 1639, 1180, 1350, 664, 726, 544])
sum = ndata.sum()
rf = [f/sum for f in ndata]
for idx in range(ndata.size):
print("%10s\t%2d\t%1.3f\t%2.2f%%" %(label[idx], ndata[idx], rf[idx], rf[idx]*100))
print()
H = 20
star = np.array([f * H for f in rf])
star = star.round()
star = star.astype(np.int32)
star = [H-s for s in star]
for i in range(H):
c = [' ' if i < s else '*' for s in star]
d = all([c[idx]==' ' for idx in range(ndata.size)])
if (d == False):
for j in range(ndata.size):
print("%c" %c[j], end='')
print()
# pyplot
print("\n# 17 #")
import matplotlib.pyplot as plt
plt.plot(rf)
plt.bar(range(ndata.size), rf)
plt.xticks(range(ndata.size), label)
plt.show()
# data set -> relative freq., cumulative relative freq. table, histogram
# read data from file, data.csv
# pyplot: http://bcho.tistory.com/m/1201 pyplot 사용법
# numpy: http://taewan.kim/post/numpy_cheat_sheet/
피드 구독하기:
글 (Atom)