Programming Language/Windows API24

C로 작성한 실행파일(exe)에 음악넣기 갑자기 실행파일에 음악포함? 배경은 어셈블리와 리버싱 기초 스터디를 진행하면서 간단한 크랙미 형태의 문제를 내주었는데 그 때 사람들이 음악을 들으면서 하면 좋을 것 같아서 음악을 실행파일에 포함해 보았지요. 안그래도 답답할텐데 노이로제걸릴만한 음악이 자꾸 나오면 ^___^ 강한 멘탈을 심어주기 위한 저의 세심한 배려?라고 볼 수 있겠네요. 자 이제 시작해봅시다!! visual studio 2017을 사용했구요. .c형태의 C언어로 작성하였습니다. 먼저, 프로젝트를 만들고 리소스파일을 우클릭 합니다. [그림1]과 같이 [리소스파일]을 우클릭 후 [추가] - [리소스] 를 누릅니다. [그림2]를 보면 icon을 가져오기해서 추가할 수도 있습니다. 맨 아래에 "WAVE"라고 나오는 부분이 있는데 원래는 없어야.. 2019. 7. 27.
대화상자 생성 1. 대화상자 만들기1) 대화상자▶ 메뉴리소스 생성한 방식과 유사하게 생성할 수 있다.▶ 다양한 동작에 배치할 수 있다. (동작 시 대화상자 발생) 2) 동작방식 [1] 리소스에서 새로운 대화상자를 생성한다. [2] 대화상자에 대한 메세지처리함수를 작성한다. [3] 대화상자를 호출한다. 3) 리소스파일 [1] 리소스파일 추가 ▶ [리소스파일(우클릭) - 추가 - 리소스] 를 클릭한다. [2] Dialog 생성 ▶ Dialog 리소스를 클릭하고 새로만들기를 누른다. [3] 현재 프로젝트의 리소스 뷰에 접근 ▶ 리소스 뷰를 누르고 IDD_DIALOG1을 확인한다. [4] 다이얼로그 제작 ▶ [3]에서 IDD_DIALOG1을 더블클릭한다. ▶ 현재 대화상자가 기본상태이다. ▶ 확인(IDOK)와, 취소(IDCA.. 2018. 12. 9.
리소스파일 1. 리소스파일- 윈도우 프로그램은 입출력 외의 코드부분이 존재하는데 이를 리소스라고 한다.- 리소스는 화면에 시각적으로 보여지며 메뉴바, 툴바, 비트맵, 단축키, 대화상자 등으로 구성되어 있다.- 기존의 프로그램보다 완성도를 높이고 사용자의 프로그램 사용을 돕는데 사용된다. - 한 번 만든 리소스는 다른 프로젝트에서도 사용되므로 다시 만들지 않아도 된다. - .rc파일은 프로젝트에서 만든 리소스가 스크립트형태로 저장된다.- Resource.h 파일은 리소스에서 사용할 ID가 매크로를 이용해 정수로 선언된다.- ID는 리소스를 구분하기위해 붙인 이름이다.- 즉, 프로그램에서 ID를 사용하여 리소스를 윈도우에 붙이거나 어떤 리소스가 보낸 메세지인지 구분이 가능하다. 2018. 12. 9.
메뉴 및 공용대화상자 1. 메뉴만들기1) 리소스 파일[1] 리소스파일 생성- [리소스파일(우클릭) - 추가 - 리소스] 를 클릭한다. [2] 메뉴리소스 추가- Menu 리소스를 클릭하고 새로만들기를 누른다. [3] 현재 프로젝트의 리소스 뷰에 접근- 리소스를 만들면 .rc확장자를 가지는 리소스 파일이 생성되고 헤더파일에 Resource.h 파일이 만들어진다.- [프로젝트명.rc] 파일을 더블클릭하면 현재 프로젝트의 리소스 뷰에 접근하게 된다. [4] 메뉴리소스 확인- 여러가지 리소스중에 우리가 만든 메뉴리소스를 더블클릭한다. [5] 메뉴에 원하는 문자를 넣어 메뉴를 구성할 수 있다.- [여기에 입력] 부분을 클릭하여 작성 후 Enter키를 누르면 저장된다. [6] Popup - True- FILE이라고 적은 것의 속성을 확인.. 2018. 10. 9.
지렁이게임 1. 뱀 그리기 - 먼저 게임을 만들기 위해 규칙이 여러가지 필요하지만 게임에 대한 깊이가 낮아 핸디캡이나 죽는 것이 없다. [1] 화면 영역 내에서 뱀이 자유롭게 움직일 수 있다. [2] 화면 영역 내에 뱀의 먹이가 파란색으로 표시된다. [3] 뱀의 먹이는 일정 시간이 흐른 후에 없어지며, 다른 곳에 새로 먹이가 생성된다. [4] 뱀은 먹이를 먹으면 꼬리가 1씩 증가한다. [5] 뱀의 머리는 빨간색이다. [6] 뱀의 몸은 녹색이다. ----------------미 추가사항------------------ [7] 머리가 자신의 몸에 닿으면 죽는다. [8] 화면 영역 밖으로 나가도 죽는다. [9] 30초에 한 번은 먹이를 먹어야 한다. (안 그럴 경우 가만히 있으면 죽지 않기 때문이다.) 2. 소스 1) .. 2018. 9. 30.
두더지잡기 게임 1. 두더지잡기 게임을 모티브로 한 원 잡기. [1] 게임을 진행할 영역을 얻어와야 한다. [2] 마우스 좌표가 원의 영역내에 있다면 점수가 증가한다. [3] 1000점이 초과되면 스테이지가 증가한다. [4] 10스테이지가 되면 메세지가 출력된다. [5] 원은 1초에 한번씩 좌표가 변경된다. [6] 스테이지가 올라갈 수록 원의 크기는 줄어든다. 2. 소스 1) 사용자 정의함수#include #include void Init(HWND hWnd, LPRECT rect, int *x, int *y, int *r, int *score, int *stage) { srand(time(NULL)); GetClientRect(hWnd, rect); //창 생성 시 화면의 좌표영역을 얻어온다. *x = rand() % .. 2018. 9. 30.
입력된 방향키 확인 1. 상하좌우와 가운데 사각형을 그리고 입력된 방향의 색상을 변경 [1] 방향키를 누르면 해당 방향의 색상은 빨간색으로 변경되어야 한다. [2] 키를 떼면 원래대로 돌아와야 한다. [3] 누르고 있는 동안은 해당방향의 사각형은 빨간색으로 유지해야 한다. 2. 소스 1) 사용자 정의함수void my_init(HDC hdc, int x, int y, int *flag, HBRUSH *hBrush) { for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { int value = (3 * i) + j + 1; //value = 현재 for문의 횟수 if (value % 2 == 0 || value == 5) { //2로 나누어 떨어지거나 5이면? //즉 대각선.. 2018. 9. 30.
사각형 그리기 1. 이중 for문을 이용하여 사각형 그리기 [1] 사각형을 그리고 내부에 몇 번 사각형인지 숫자를 부여한다. 2. 소스 1) 사용자 정의함수void my_init(HDC hdc, int x, int y) { for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { Rectangle(hdc, x + j * 100, y + i * 100, x + (j + 1) * 100, y + (i + 1) * 100); TCHAR tmp[20]; _stprintf_s(tmp, _T("%d"), (3 * i) + j + 1); TextOut(hdc, x + j * 100 + 50, y + i * 100 + 50, tmp, _tcslen(tmp)); } } } 2) 윈도우.. 2018. 9. 30.
도형 자동이동 1. 상하좌우버튼으로 원 자동이동 [1] 상하좌우 중 하나의 버튼이 한 번 눌렸을 때 그 방향으로 1초마다 20씩 이동한다. [2] 이동할 때마다 원의 색상이 랜덤하게 변경된다. [3] 동작 시 버튼을 누르면 원이 멈추고, 멈춘상태에서 버튼을 누르면 다시 이동한다. 2. 소스 1) 사용자 정의함수#include void my_init(HDC hdc, HBRUSH *hBrush, int *x, int *y) { srand(time(NULL)); int a = (rand() % 1000 + *x*100) % 256; int b = (rand() % 10000 + *x * 100) % 256; int c = (rand() % 5000 + *x * 100) % 256; SelectObject(hdc, Creat.. 2018. 9. 30.
마우스로 도형 옮기기 1. 마우스로 드래그해서 원 옮기기 [1] 마우스가 클릭되었을 때의 좌표가 원 내에 있는지 확인 [2] 원 내에 있다면 WM_MOUSEMOVE 메세지가 발생했을 때 원의 좌표를 마우스 좌표로 변경 [3] 마우스 드래그 중일 때는 원의 색상을 빨간색으로 변경 2. 소스 1) 윈도우 메세지 처리함수LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { PAINTSTRUCT ps; HDC hdc; static int x, y; //원의 좌표 int mx, my; //마우스의 좌표 static BOOL flag; //마우스가 원의 영역안에 있는지 상태 case WM_CREATE: { x .. 2018. 9. 30.
keyboard[마지막] 1. 연습장만들기 - 입력하는 글자를 출력 - Enter 시 줄바꿈 - BackSpace 시 지우기 - 라인 수 보이기 - 가로 길이, 세로 길이, 총 문자수 보이기 2. 소스 1) source.h void my_input(HWND hWnd, HDC hdc, WPARAM wParam, TCHAR (*lpString)[100], int *nLength, int *size, int *y); void my_paint(HDC hdc, int *nLength, int *size, int *y, TCHAR(*lpString)[100]); 2) source.cpp #include "stdafx.h" #include "practice2_3.h" #include "source.h" void my_input(HWND hW.. 2018. 9. 10.
shape 1. 도형그리기 1) my.h 소스void my_point(HDC hdc); void my_movedraw(HDC hdc); void my_circle(HDC hdc); void my_rectangle(HDC hdc); void my_polygon(HDC hdc, LPPOINT point, int cnt); 2) my.cpp 소스#include "stdafx.h" #include "shape[1].h" #include "my.h" void my_point(HDC hdc) { MoveToEx(hdc, 150, 100, NULL); //4번째 매개변수는 LPPOINT 타입으로 POINT * 형과 같고, //POINT 타입은 한 점의 좌표을 저장하는 구조체 타입으로 //long형인 x와 y 2개가 존재한다. .. 2018. 8. 27.