본문 바로가기

728x90
반응형

Programming

(151)
메뉴 만들기 익스플로러나 오피스 등을 사용하다 보면 메뉴를 눌러서 해당 기능 선택할 때 가 있습니다. 그럼 그 메뉴들은 어떻게 만들어지는 걸까요? 오늘은 그 메뉴를 생성하는 방법에 대해서 알아 보려고 합니다. 윈도우 프로그래밍을 C# 윈폼으로만 만들어본 저로써는 어떻게 만드는지 전혀 감을 못잡았었죠. 그래서 책을 보는 순간 C#과는 많이 틀리다는걸 알았습니다. C#이야 그냥 열심히 폼에 붙여넣기를 하거나 컨트롤 객체 생성해서 소스로 넣어주면 끝이었죠. 하지만 WIN API로 생성할 때는 좀 다르게 리소스라는 녀석으로 작성하게 됩니다. 한마디로 메뉴 자체가 데이터로써 뽑아져 있다는 거지요. 그 리소스는 RC라는 파일명을 가지고 있고 Resource.h에 해당 리소스에 대해서 해더로 잡히게 됩니다. 그럼 리소스 작성하는..
포커스가 있는 윈도우 캡쳐 전체화면 캡쳐에 이어서 포커스가 있는 윈도우의 캡쳐하는 소스에 대해서 보도록 하겠습니다. 이번에는 핫키를 이용해서 해당 핫키를 눌렀을때 지금 포커스가 있는 윈도우를 캡쳐하게 하는 소스입니다. 우선 전체 화면 캡쳐와는 많은 차이가 없으므로 바로 소스와 약간의 분석을 하도록 하겠습니다. #include LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); HBITMAP ScreenCapture(HWND); HINSTANCE g_hInst; LPCTSTR lpszClass=TEXT("ScreenCapturTest"); HBITMAP hBit = NULL; int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstan..
API로 구현한 전체화면 캡쳐 소스 오늘은 API로 전체화면을 캡쳐하는 방법을 공부할 것인데요. 저같은 아무것도 모르는 초보가 하기에는 살짝 어려운듯 했지만 삽질의 연속으로 겨우 성공을 하게 되었네요. 화면캡쳐에는 DC가 꼭 필요합니다. 그래서 어제 DC를 먼저 공부해 보았던 것이고요. 그럼 어제 DC에 대한 것과 화면캡쳐에 필요한 함수들을 살펴보도록 하지요. 간단한 소스와 함께 알아보도록 하죠. #include LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); HBITMAP ScreenCapture(HWND); HINSTANCE g_hInst; LPCTSTR lpszClass=TEXT("ScreenCapturTest"); HBITMAP hBit = NULL; int APIENTRY WinMa..
DC 구조체에 관해.... 이번에는 DC에 대해서 공부해보았습니다. 이것은 화면 처리, 그래픽를 담당하는 GDI 모듈에 의해 관리되는 구조체입니다. 화면에 출력을 하기 위해서는 반드시 DC가 있어야 합니다. DC는 그리기에 필요한 다양한 정보들의 저장소 역활, 그리기 함수들이 참조하는 원점의 정보를 제공하고, 윈도우끼리의 출력 결과가 서로를 방해하지 않도록 완충역할을 하게 됩니다. 이 DC를 얻는 방법은 두가지가 있습니다. 첫번째는 GetDC함수를 사용하는 방법, 또 다른 한가지는 WM_PAINT 메시지 처리 루틴에서 BeginPaint 함수를 통해서 얻는 방법이 있습니다. GetDC 함수 사용하여 DC얻는방법 HDC GetDC(HWND hWnd); int ReleaseDC(HWND hWnd,HDC hDC); BeginPaint ..
버튼 생성 오늘은 윈도우 창에 버튼을 만드는것을 공부했습니다 역시 C#에 충실해 있던 저에게는 API로 버튼 만드는건 참 생소한 환경이었죠 이제 본론으로 들어가겠습니다. Win 32 api에서는 컨트롤들이 다 하나의 윈도우로 여겨집니다. 그래서 컨트롤을 만들때도 CreateWindow 함수를 쓰게 되죠. 그리고 컨트롤이 생성 되는 시기도 부모 윈도우가 생성될 때, WM_CREATE 메시지가 발생했을 때 생성하게 됩니다. 또 여기서 한가지 알고 넘어갈 것은 일반적으로 우리가 알고 있는 버튼 말고도 체크박스, 라디오 버튼 또한 버튼으로 구분된다는 것입니다. 그리고 컨트롤들은 부모 윈도우의 차일드 이므로 WS_CHILD 스타일을 반드시 주게 됩니다. 또한 WS_VISIBLE 스타일을 주어야 ShowWindow 함수를 호..
API의 첫 시작 오늘 처음으로 API에 대해서 공부를 했습니다. 일반 학교들은 API, MFC는 기본으로 배운다는데 울 학교는 전문대라서 그런지 C, java 정도는 배우고는 그냥 끝이어서 제대로 배우질 못했었죠 그러다가 지금 약간의 여유가 생기어서 한번 WIN API에 대해서 공부해보기로 하였고 드디어 공부를 시작하게 되었습니다. 제가 공부한 것을 포스팅 하는 것이기에 상당히 초보적인 수준이라는 점. 그리고 잘못 된 점이 있을 수 있다는거 꼭 인지하시길 부탁드립니다 ^ㅡ^ 개발 환경은 VC++ 6.0 이후의 어떤 버전이라도 상관은 없습니다 ㅎ 오늘은 그냥 아무것도 없는 윈도우 창 하나를 띄우는 프로그램을 만들려고 합니다. C#이나 비주얼 베이직에서는 진짜 간단하게 만들 윈도우창 하나도 API로 만들게 되면 상당히 긴 ..
MS-SQL 구분자로 나누기 sql문에서 구분자를 통해서 정해지지 않은 갯수의 데이터를 반복해서 찾아야 하는 경우를 접하게 되었습니다. 근데 도저희 생각이 나지 않다고 SubString과 CharIndex를 통해서 쉽게 할 수 있다는것을 알게 되었죠. 그러면 그 구분자로 나누는 방법을 알아 보도록 하겠습니다. 어렵진 않으니 쉽게 따라 오실수 있을겁니다. Declare @Name varchar(100) Declare @TName varchar(10) Set @Name = '고수/이나영/손예진/정지훈/문근영/박예진' While charindex('/', @Name) 0 OR Len(rtrim(@Name)) > 0 begin If (charindex('/', @Name) = 0) Begin set @TName = @Name set @Na..
Windows Forms의 시작 이제 드디어 거무스스르한 커맨드 창을 벗어나 윈도우창에서 테스트를 할 시간이 왔습니다. 왠지 기분이 도스를 쓰다가 윈도우 95가 나와서 새로운 환경을 경험하는 느낌이 드네요. 윈도우 응용 프로그램를 만드는 시작과 간단한 응용을 공부해 볼것인데요. 우선 윈도우 폼 응용 프로그램을 만드는 방법부터 나가보려고 합니다. 우선 프로젝트를 새로 만들겠습니다. 그러면 다음과 같은 화면이 나옵니다. 그럼 여기서 Windows Forms 응용 프로그램을 지정하고 이름을 입력후 확인을 누립니다. 그러면 다음과 같은 폼이 나타나죠. 이 화면이 윈도우 응용 프로그램을 만드는 첫 시작입니다. 솔루션 탐색기에서 program.cs를 열어 보시면 다음과 같이 입력되어 있는걸 보실수 있죠. 1 using System; 2 using..

728x90
반응형