본문 바로가기

C#, C++

(8)
SDI(Single Document Inteface)패턴을 활용한 영상처리 MFC프로그램 개발 튜토리얼 (4) - 클래스 구조 정의 UI의 계획서인 Mock을 작성했으니,이번에는 Class의 계획서인 UML을 그려보겠습니다.이번 프로그램은 구조가 그렇게 복잡하지는 않습니다.뼈대가 되는 MainFrame이 존재하고, View , Document(Logic) 3가지로 나누어서 그려봤습니다. 아래부터 설명해보자면1. Logic (Document)우리의 프로그램은 Image라는 데이터를 다루게 됩니다.따라서, Document에서 이러한 Image의 데이터를 가지고 원하는 동작을 수행해야 합니다.Logic의 코드를 다룰 때에는 View와 관련된 사항들은 신경쓰지 않고 진행 할 수 있어야 합니다.Image는 .bmp, jpg등의 File에서부터 읽어와서 Memory의 포인터에 저장 할 예정입니다.MemoryTool에서 이렇게 저장하기 위한 포인..
SDI(Single Document Inteface)패턴을 활용한 영상처리 MFC프로그램 개발 튜토리얼 (3) - MockUp 그리기 지난 포스트에서 MockUp Tool에 대해서 소개 한 적이 있다.Java and Python 파워포인트에서 사용하는 간편한 목업(와이어프레임)툴 PowerMockUp파워포인트에 결합되어 간편하게 사용 가능 한 와이어프레임 툴 PowerMockup을 소개한다. 다운받는 사이트는 아래의 링크를 찾아가면 된다. PowerPoint Wireframe and Prototyping Tool | PowerMockup PowerPoint Wirefrahihaoun.tistory.com 이 툴을 사용해서 이번 프로젝트에서 개발 할 프로그램의 Mock을 그려봅니다.파워포인트에 Plugin으로 붙은 PowerMockup창에서 원하는 Shape을 검색해서 간단 한 Mock을 그려볼 수 있습니다.  이번 포스팅에서는 영상처리..
SDI(Single Document Inteface)패턴을 활용한 영상처리 MFC프로그램 개발 튜토리얼 (2) - SDI란?? 1강에서 문서/뷰 아키텍처를 이용해서 프로젝트를 생성했다.따라서 우리의 프로젝트 내부에는 App, MainFrame, View, Document 4개의 코드가 존재한다.   SDI아키텍처의 가장 큰 목적은 Logic과 유저인터페이스의 분리이다.유저인터페이스(UI)는 View코드에만 작성하고, 이 View코드에 표시되는 Data는 Document코드에서 작성한다.예를들어서 메모장 프로그램을 생각해본다면 텍스트를 입력받고 삭제하고 수정하는 코드는 Document에서 소유하고이런 작업들이 이루어지는 과정을 사용자에게 보여주는 코드는 View에 작성하게 되는 것이다.메인프레임은 이를 위한 뼈대이고, App코드는 기본적인 초기화 과정과 SDI요소들을 이어서 문서템플릿으로 등록시켜주는 진입코드라고 보면 쉬울 것 같..
SDI(Single Document Inteface)패턴을 활용한 영상처리 MFC프로그램 개발 튜토리얼 (1) - 프로젝트생성 PC를 사용하는 대부분의 사람들은 Windows 운영체제를 사용한다.우리는 윈도우를 사용하면서 특정한 목적을 위해서 많은 프로그램을 활용하는데 이를 윈도우 애플리케이션 이라고 부른다.윈도우 프로그램은 다양한 언어와 플랫폼을 활용해서 구현할 수 있다.대표적으로 아래와 같은 방법들이 있다.C : Win32 APIC++ : MFCC# : WPFPython : Tkinter, PysideJava : Swing최근에는 C#을 많이 사용하고, 비교적으로 오래됐기는 하지만 MFC와 Win32API도 빈번하게 사용된다.Pyhon과 Java등에서도 개발이 가능하지만, 대부분의 윈도우 애플리케이션 개발은 C계열 언어를 사용한다.우리가 사용하고있는 메모장, 엑셀, 파일탐색기 등의 대부분 Windows 프로그램은 WPF, W..
c#을 이용한 TCP/IP 서버-클라이언트 소켓(Socket)통신 2개의 컴퓨터에서 데이터를 주고받을때 가장 자주 사용되는 방식이 소켓을 이용한 방식이다. C#에서는 다른 플랫폼과 마찬가지로 소켓을 사용하기 위한 간편한 라이브러리를 제공한다. 우리는 서버쪽 s_socket과 클라이언트쪽 c_socket을 만들 것이다. 서버는 계속 켜져있는 컴퓨터라고 생각하면 쉽다. 계속 켜져있는 채로 클라이언트 PC의 접속을 대기(Listen)한다. 클라이언트는 항상 켜져있을 필요는 없다. 필요할 때 서버쪽으로 Connect신호를 보내면, 서버쪽에서 이를 받아들이고 클라이언트와의 연결을 성립시킨다.(Accept) 연결이 성립되었다면 우리는 본격적으로 데이터를 주고 받을 수 있다. 먼저, 서버쪽 소켓의 Start() 와 Close()를 만들어보자. Start()는 Server 메인소켓을..
WPF ItemsControl을 이용해서 UIelement를 반복해서 표현하는 방법(xaml에서 for문, foreach문을 대신해서 사용할 수 있는 방법) WPF는 xaml, xaml.cs, viewmodel로 나누어서 프로그램을 만든다. viewmodel이나 xaml.cs(비하인드 코드) 에서는 for문이나 while문, foreach문 같은 반복문을 손 쉽게 사용할 수 있다. 하지만, xaml에서 직접적으로 반복문을 사용하는 방법은 없는데 똑같은 이미지를 반복해서 넣는다거나 똑같은 버튼, 텍스트박스를 반복해서 넣는 경우, 또는 각 element마다 들어가는 Content가 조금씩 다르다거나 Grid.Row 나 width같은 속성들이 규칙적으로 바뀌어서 여러개가 들어가야 하는 경우, xaml에서 for문이나 while문 같은 것들이 사용되면 좋겠다고 생각하게 되는 경우가 많았다. 하지만 이는 현실적으로 불가능하고, 비하인드 코드에서 for문을 써서 넣으려..
C# 바인딩 (onetime, oneway, twoway, onewaytosource) C#에서 인터페이스에 나타나는 값을 동적으로 표현할때 데이터바인딩을 사용한다. XAML의 내용이 이렇게 선언하면 TEXTBOX안에 표시되는 내용이 ViewModel이라는 뷰모델 클래스의 name이라는 요소와 연결되게 된다. 여기서 설정하는 MODE는 onetime, oneway, twoway, onewaytosource 중에 하나로 설정하는데, -onetime 만약에 현재 뷰모델의 name이라는 요소가 string타입의 "사과"라고 저장되어 있다고 하자. 만약 MODE를 onetime으로 연결 한다면, 인터페이스의 텍스트블록 안에 "사과"라는 글자가 뜨게 된다. 하지만, 이때 단 한번만 바인딩이 되고 이후로는 연결이 끊어지게 되서 뷰모델 안의 string name을 바꿔도 텍스트 박스의 값이 영향을 받지..
C# 제네릭 <generic> c# 클래스를 정의할 때, 들어가는 인자값이나 리턴값 등 클래스 내의 모든 데이터 타입을 지정한다. 하지만, 어떤 경우에는 거의 모든 내용이 같은데, 일부 데이터타입만 다른 경우가 존재한다. 예를들어, public class MyStack { int[] _elements; int pos = 0; public MyStack() { _elements = new int[100]; } public void Push(int element) { _elements[++pos] = element; } public int Pop() { return _elements[pos--]; } } class Program { static void Main(string[] args) { MyStack stack1 = new MySt..