일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Visual Studio
- Kotlin
- 지식나눔강좌
- VS ERROR
- Tips프로그래밍강좌
- 리뷰
- 함수
- 티스토리
- c#
- Direct2D
- 백준
- 프로그래밍
- Javascript
- CS
- c++
- c
- 문법
- Windows
- 연산자
- Desktop
- tipssoft
- doit코틀린프로그래밍
- Programming
- 배열
- 김성엽
- 이지스퍼블리싱
- 알고리즘
- Win32
- Tips강좌
- 포인터
- Yesterday
- Today
- Total
목록Desktop (10)
F.R.I.D.A.Y.
Windows의 기본 바탕화면에 윈도우를 배치하는 방법입니다. 윈도우 핸들 뽑기 윈도우 핸들은 Visual Studio 2019의 내장 프로그램인 Spy++를 이용하면 쉽게 뽑을 수 있습니다. 프로그램 매니저라 불리는 프로세스가 있습니다. 쌍따옴표로 묶인 문자열은 윈도우 텍스트, 그 옆의 문자열은 윈도우 클래스 이름입니다. 우리는 프로그램을 "FolderView" SysListView32의 하위 윈도우로 구성할 것입니다. 최상위 윈도우. 즉 확장을 하지 않은 WorkerW나 Progman의 경우는 핸들값 없이 찾을 수 있지만, 하위 윈도우를 찾으려 할때는 부모 윈도우의 핸들 값이 필요합니다. 따라서 우리는 FindWindow와 FindWindowEx를 모두 사용할 것입니다. FindWindow 가장 최상..
이전 포스트에서 작성한 BaseWindow를 기반으로 한 MainWindow를 구성하겠습니다. MainWindow 먼저 파일을 분리하겠습니다. mainWin.h 파일을 생성합니다. 그리고 BaseWindow를 상속하기 위해 baseWin.h를 추가합니다. 그리고 BaseWindow를 상속하는 MainWindow를 생성합니다. class MainWindow :public BaseWindow { }; public 함수 구성하기 BaseWindow 클래스에는 두 개의 순수 가상 함수가 존재합니다. 따라서 MainWindow를 사용해도 BaseWindow를 상속했기 때문에 객체를 생성할 수 없습니다. 이제 객체를 생성할 수 있도록 MainWindow에서 두 개의 가상함수를 오버라이드 하겠습니다. 그리고 클래스 ..
마우스 입력을 받도록 프로그램을 구성해보겠습니다. 마우스 입력 우리는 마우스 왼쪽 버튼[# Windows에서는 물리버튼의 위치를 말하지 않습니다. 오른손잡이는 왼쪽 버튼이 되겠지만, 왼손잡이들에게는 오른쪽 버튼이 되기 때문이죠. 그래서 여기에서 설명하는 버튼도 Windows에서 설명하는 것처럼 왼쪽 버튼이 주버튼, 오른쪽이 보조버튼입니다.]의 입력만 받도록 하겠습니다. WM_LBUTTONDOWN 마우스 왼쪽 버튼이 눌렸을 때 발생하는 메시지는 WM_LBUTTONDOWN입니다. 이 메시지의 WPARAM과 LPARAM은 다음과 같은 값을 가지고 있습니다. wParam 마우스 왼쪽 버튼이 눌린 시점에 어떤 가싱 키가 추가로 눌려있는지를 확인할 수 있는 플래그 집합이 들어 있습니다. 이 플래그 집합에서는 CTR..
Windows에서는 사진 암호라 해서 제스쳐를 이용한 로그인 기능을 제공하고 있습니다. 실제 사진 암호처럼 구성하는 것은 어렵겠지만 여러 지점을 순서대로 눌러서 인증을 하는 프로그램을 한 번 생성해보겠습니다. ⁂ 이전 Win32 프로그램 생성하기 5의 최종 코드에서 시작합니다. 격자 생성하기 현재 생성한 윈도우는 아무 무늬가 존재하지 않습니다. 각 지점을 구분지을 수 있는 무언가가 필요합니다. 그래야 정확히 지점을 선택할 수 있으니까요. 우리가 사용할 것들입니다. HDC PAINTSTRUCT MoveToEx LineTo 이 항목을 이용해 WM_PAINT 메시지가 들어왔을 때 격자 무늬를 생성할 겁니다. 이벤트 핸들링 먼저 윈도우가 그려야할 필요가 있을 때 받는 WM_PAINT를 위한 메시지 핸들러가 필요..
윈도우 프로시저를 이제 작성해보겠습니다. 윈도우 프로시저 윈도우 프로시저는 Windows에서 수신한 정보를 토대로 그에 알맞은 행동을 정의해놓은 공간이라고 생각할 수 있습니다. 윈도우 프로시저는 아래의 모양을 가지고 있습니다. LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); 뭐 하나 알만한 것이 없습니다. 그렇지만 차근차근 알아가면 못할 것도 없죠. 함수의 자세한 설명은 이 포스트를 참고하세요. 작성하면 기본으로 반환해줄 값이 하나 있습니다. DefWindowProc 함수를 이용하는 것인데요. DefWindowProc 윈도우에서는 기본으로 처리하는 작업이 있습니다. 윈도우의 이동이 타이틀바에 존재하는 시스템 ..
이어서, 윈도우를 노출시키고 메시지를 받는 코드를 작성하겠습니다. 코드 확인 여기까지 완료하면 코드는 아래와 같습니다. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR, int nCmdShow) { WNDCLASS wc{}; wc.lpfnWndProc = nullptr; wc.lpszClassName = L"Hello world"; wc.hInstance = hInstance; RegisterClass(&wc); HWND hWnd = CreateWindow(L"Hello world", L"My First Win32 Program", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW..
이제부터 코드를 사용합니다. 메인 함수 생성하기 Win32 프로그램은 Windows.h 헤더가 필요합니다. 그러니까 이전에 만들었던 main.cpp 첫 줄에 헤더를 추가합니다. 그리고 나서 메인 함수를 생성합니다. 자세히 보면, WinMain 함수의 세 번째 인짜 LPSTR은 변수 값이 존재하지 않습니다. 우리는 명령줄 인수를 받지 않을 것이므로 변수 이름은 작성하지 않았습니다.[# 그럼 지우면 안되냐구요? 안됩니다. 그럼 운영체제에서 프로그램을 실행시키는 WinMain을 못찾아요] 여기까지 하면 일단 실행은 하는 프로그램이 만들어졌습니다. 그런데 우리는 이걸 원하지 않습니다. 창이 뙇! 하고 나오는 그런 프로그램을 원합니다. 아쉽게도 아직 그 자리까지 가기에는 멀었습니다.[# C++을 기반으로 아무 서..
프로그램을 생성하려면 일단 프로젝트가 있어야하니, 이번까지는 코드를 작성하는 일이 없습니다. 프로젝트 생성하기 새 프로젝트 만들기에서 데스크톱 마법사를 선택하고 다음을 누릅니다. 간단히 프로젝트 이름을 생성하고 만들기를 클릭합니다.. 여기에서는 WinUI로 했습니다. 애플리케이션 종류에서 데스크톱 애플리케이셔(.exe)를 선택하고, 추가 옵션에서는 빈 프로젝트를 선택합니다.[# 자질구레한거 싫어하니까] 프로젝트에 메인이 될 파일 하나를 생성합니다. cpp 파일로 만들어주세요. c로 만들어도 되지만, 언젠가 cpp 기술을 사용할 것 같아서요. cpp를 추천드립니다.
Win32 프로그래밍을 진행합니다. ⁕ 참고 본 문서는 Win32를 마스터하지 않은 상태로 '나'에게 맞추어 작성되었으므로 용어나 설명에 있어 난해한 부분이 일부 존재할 수 있습니다. 수정이 필요한 부분, 혹은 함께 글을 읽으면서 이해하기 어렵거나 부연 설명이 필요한 부분이 있다면 댓글로 달아주시기 바랍니다. 엔트리 포인트 우리가 C/C++ 콘솔 프로그램[# 이하 콘솔 프로그램]을 작성할 때 가장 먼저 작성하는 함수는 main이었습니다. 콘솔 프로그램은 여러 복잡한 UI 요소가 존재하지 않고, 텍스트로 이용자와 소통합니다. 그리고 대개 동시 처리를 하지 않고 순차적으로 일을 처리하는 절차 지향을 따르고 있습니다. 따라서 main 하나만 있으면 어떤 프로그램이던 일단 실행은 합니다. Win32, 지금은 W..
https://blog.naver.com/tipsware/221424298273 대표님께서 내주신 과제(?)로 한번 만들어보게 되었다. 정확히 맞는지는 모르겠지만 프로그램은 정상적으로 작동한다. 프로그램 만들어놓은걸 삭제해버리기도 했고, 프로젝트 크기가 MFC 특성상 크기때문에 TISTORY에 올릴 수도 없다. 따라서 이번엔 OneDrive로.. 언제 삭제될지는 모르겠다. https://1drv.ms/f/s!AjtV4g1Eht2Phg-oPi46xJJm-IuH 파일 Download