이 포스팅은 가능한 원론에 가깝게 설명하는 데 목표가 있는 포스팅입니다. (이전 포스팅에서 이걸 안 지켜서.....) 이런 디자인 패턴을 도입하는 건 처리와 UI를 분리하기 위한 목적입니다. 이렇게 되면 처리 부분의 재사용성이 높아지기 때문입니다. MVC 디자인 패턴은 뷰/컨트롤러/모델로 나뉩니다. - 뷰 : UI/UX에 대한 사용자 입출력을 관리합니다. 모델의 상태를 표시하기 위해 모델과 연결됩니다. - 컨트롤러 : 사용자로부터 받은 입력을 가공하고 모델로 전달합니다. 이 과정에서 모델과 뷰가 연결됩니다. - 모델 : 전달받은 입력을 처리합니다. 뷰와 연결되었다면 모델이 뷰에 바로 업데이트를 요청할 수 있습니다. 아래와 같은 형태가 된다고 설명합니다. 위 이미지에서는 모델과 뷰가 연결된 것처럼 보이지만..
간만에 c++로 샘플을 만들었는데 에러가... error C3861: 'ShowScreen': 식별자를 찾을 수 없습니다. 1. 재연하기 아래 코드를 넣고 빌드하면 에러가 납니다. int _tmain(int argc, _TCHAR* argv[]) { ShowScreen(); return 0; } void ShowScreen() { char sData[255]; printf("--------------아무숫자나 입력하세요------------\n"); scanf( sData); } 2. 해결 방법 이건 초보적인 실수인데 헤더로 따로 관리하지 않는 경우 모든 메소드는 순차적으로 접근해야 합니다. B함수에서 A를 호출하기 위해서는 B함수보다 위에 A를 만들어야 한다는 것이죠. 다른 방법으로 상단에 함수원형을 ..
언제나 조심해야 할것이 QT는 한글경로 인식을 못합니다. (설정하면 될라나?) 한글경로 안들어가게 조심해주시고 시작하세요. 1. 프로젝트 생성File > New File or Project 을 눌러 프로젝트를 생성합니다. 프로젝트 타입은 Qt Quick Project로 하시고 Qt Quick Application 을 선택하시면 됩니다. 다른건 그냥 Next하시면 되고 타켓설정에서 데스크탑을 꼭 체크해줍니다. 완료를 하면 이렇게 핼로월드 코드가 생성됩니다. 2.실행 왼쪽하단에 실행이나 디버기버깅버튼을 눌러 실행 해봅시다. 그냥 누르면 심비안 디바이스로 실행됩니다. 스크린 샷을 보시면 아시겠지만 이게 디버긴하기는 그닥 않좋습니다-_-;;; 물론 화면을 좀 설정하면 그래도 할만하긴 합니다 ㅎㅎㅎ 2-1. Mi..
어쩌다보니 QT를 해야할 일이 생겼습니다 ㅡ.-;;; 노키아에서 만든 컨트롤 컴퍼넌트 같은 것인데 모바일전용으로 만든거 같은데 어차피 아무대서나 쓸수 있는듯 하군요. 비주얼스트디오용 플러그인도 있지만.........아놔 비주얼스트디어오 C++이 프로젝트 파일이 없으면 해더와 소스파일을 자동으로 모아서 보여주다보니 개판입니다;;;; 그러다보니 파일트리가 재대로 로드됬는지 확인도 안되고;;;;; 그래서 결국 이클립스를 설정했습니다. 하지만 이것도 빌드는 안되죠-_-;;; 빌드는 Qt Creators로 하셔야 합니다. 1. QT SDK 설치Qt관련 다운로드는 노키아 Qt에서 받을수 있습니다. 노키아 Qt - 새 페이지 2. QT SDKQtSDK를 받아야 겠죠? ㅎㅎㅎ 노키아 Qt - Qt SDK 다운로드 위에..
이 글은 윈도우XP 기준입니다. 다른 운영체제에서는 해당 API가 작동하지 않거나 다른 동작을 할 수 있습니다. 제가 올린 대부분의 예제는 유니코드를 기준으로 합니다. (프로젝트 속성 -> 구성 속성 -> 일반 -> 문자 집합 -> 유니코드 문자 집합 사용) 'WinAPI'를 연습하기 참 좋은 소재가 메모장이죠 ㅎㅎㅎ 만만한게 메모장(으잌!) 1. 메모짱 어디 있니~ 메모장을 찾아 글을 출력해보겠습니다. 1-1. 적당한 곳에 변수 선언 //메모장의 핸들 저장용 HWND hwndNotepad; //차일드 핸들 저장용 HWND hwndNotepadChild; //이 문자열을 출력한다. LPCTSTR strText = L"메모짱 하악하악 (ㅡ.ㅡ;;;)"; 1-2. 적당한 곳에 출력 코드 입력 //메모장 핸들..
세상 살다 보면 별일이 다 발생한다지만 코딩 하다가 발생하는 난감함 중 하나가 사용자(여기서 말하는 사용자는 내가 만든 'dll'이나 클래스 등을 사용하는 사람을 말한다.)가 만든 코드를 호출해야 할 때입니다. 머.... 난감하다는 표현으로 하는 이유는 이런 방식은 내가 개발하고 있는 방향에서 반대로 간다고 생각하기 때문이지 별다른 뜻이 있는 건 아닙니다. ㅎㅎ (한마디로 심각하게 개인적인 견해라는 말씀) 1. 함수 포인터 콜백 이런 경우 흔gl 쓰는 방법이 함수 포인터를 이용한 콜백입니다. (CallBack) (닷넷에서는 델리게이트나 개체를 전달하여 구현 할 수 있죠.) 설명하자면.... 1) 클래스(dA) 내부에 사용자가 만든 함수의 포인터(dB)를 저장해둘 변수(?)를 만든다. 2) 사용자가 함수(..
C++에서 배열을 구하는 방법은 많습니다. 그중 포인터로 넘어온 배열의 개수를 구하는 방법을 알아보도록 하겠습니다. 1. 일반적으로 배열 구하는 방법 int a = inteof(Temp) / sizeof(Temp[0]); 그런데 이 방법은 정작 포인터로 넘어온 주소는 배열을 구하지 못합니다. 그래서 보통은 매개변수로 배열의 개수를 보내주는 방식을 많이 사용하죠. 어쩌면 당연한데.....'sizeof'는 변수의 크기를 리턴하므로 포인터를 넣으면 포인터의 대상이 아닌 포인터 자체의 크기를 리턴하기 때문입니다. (그래서 포인터를 위 코드로 구하면 '1'이 나옵니다.) 2. 포인터로 넘어온 배열 개수 구하는 방법 '_countof'를 이용하면 포인터로 넘어온 배열의 개수를 구할 수 있습니다. void Temp(..
어쿠.... 제가 진행하는 프로잭트는 거의 Win32프로젝트 입니다. 닷넷환경에 익숙한 저한테는 너무 가혹한 ㅜㅡ 어찌됬건 MFC조차 사용하면 안되는 환경에서 코딩을 하다보니 MFC로 된 자료를 보면 혈압이 올라서 정리해 둡니다. .txt 파일을 읽고쓰는건 기초중에 기초라고 할수 있는데도 불구하고 MFC자료만-_-;;; 1. 기본 쓰기 읽기 #include "stdafx.h" #include #include #include void LoadFile() { //*.txt에 쓰기 FILE *fp; fp = fopen("test.txt","wt"); fwrite("sddfsfasd", sizeof(char[10]), 1, fp); fclose(fp); //*.txt를 읽기 FILE *fp; int i = 0;..
1. 오류 error C2146: 구문 오류 : ';'이(가) 'PVOID64' 식별자 앞에 없습니다. 에러... 무려 winnt.h에서 나는 에러입니다 ㅡ,.ㅡ; 머 어쩌라는 겨 ㅎㅎㅎㅎ 2. 해결 방법 typedef void* PVOID; typedef void* POINTER_64; typedef void POINTER_64 PVOID64; 요걸 typedef void* PVOID; typedef void* POINTER_64; typedef POINTER_64 PVOID64; 요렇게 바꾸면 됩니다. 은근히 코드 3줄 다 뭔가 다르니, 그냥 3줄 한 번에 복사해서 쓰시길 권장합니다. 마무리 되도록 이해하면서 쓰면 좋지만..... 이해 못할 때는 그냥 따라 하는 것도 방법입니다 ㅎㅎㅎ
키보드 후킹을 해봤으니 마우스 후킹을 해봅시다. 연관글 영역 1. 훅(Hook) 설치 마우스 후킹은 키보드 후킹이랑 방식이 같습니다. 단지 훅을 설치할때 'WH_KEYBOARD_LL'대신 'WH_MOUSE_LL'를 사용해야 합니다. // 키보드 hook 설치 hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hInst, 0); // 마우스 hook 설치 hMouseHook = SetWindowsHookEx(WH_MOUSE_LL, LowLevelMouseProc, hInst, 0); 2. 마우스 좌표 얻기 마우스를 후킹 하여 좌표를 얻어옵시다. 이때 사용하는 API는 'GetCursorPos'입니다. (참고 : MS Learn -..