비트교육 13

windows_system_programming(1) - kernel object

YouTube 강의 -> 커널 오브젝트의 이해 이것을 참고했습니다. 커널 오브젝트 : 커널에 의해 관리되는 리소스 정보를 담고있는 데이터 블록 운영체제에 의해 생성 및 소멸되는 것을 리소스라고 합니다. 우리가 파일을 생성, 소멸 시키는 것도 리소스입니다. 하지만 운영체제에 의해 생성, 소멸되는 리소스가 있는데 이것이 커널 오브젝트입니다. 파일 뿐만아니라 핸들, 쓰레드 등등 os가 자동으로 생성해주는 경우에도 커널 오브젝트가 생기게 됩니다. 우리가 어떤 파일을 생성 소멸 시킬 경우 리소스에 대한 요구사항이 있습니다. 이 요구사항을 들어주는 것이 커널입니다. 요구사항을 들어주기 위해서는 리소스를 컨트롤할 수 있는 정보들(접근정보, 파일을 어디까지 읽었는지에 대한 정보)을 가지고 있어야 하는데 이런 정보를 담..

환경변수 나타내기

이번에는 환경변수를 콘솔창에 나타내는 실습을 하겠습니다. #include #include #include #include #include void GetEnv() { PTSTR pEnvBlock = GetEnvironmentStrings(); //환경블럭 내용을 가져와서 문자열 블럭으로 메모리에 생성 후 그 포인터를 반환 TCHAR szName[MAX_PATH]; TCHAR szValue[MAX_PATH]; PTSTR pszCurrent = pEnvBlock; HRESULT hr = S_OK; PCTSTR pszPos = NULL; int current = 0; ZeroMemory(szName, MAX_PATH); //메모리 0으로 초기화 ZeroMemory(szValue, MAX_PATH); while..

error 나타내주기

이번에는 error을 나타내주는 실습을 해보겠습니다. 이 코드는 윈도우속성-> 링커-> 시스템-> 창모드로 해야합니다. 시작하기에 앞서, 이것은 유니코드나 멀티바이트코드 어디에서나 사용가능하게 알아서 바꿔주는 매크로 함수입니다. LPTSTR, _tWinMain등 t가 붙어있는 것들은 f12로 들어가서 보면 유니코드 경우와 멀티바이트 경우와 다르다는 것을 볼 수 있습니다. #include #include //유니코드, 멀티바이트 코드 무엇을 쓰든지 확인해서 바꿔주는 메크로 #define MAX_LOADSTRING 100 TCHAR szTitle[MAX_LOADSTRING] = TEXT("Sample"); TCHAR szWindowClass[MAX_LOADSTRING] = TEXT("Bit"); HWND h..

API(8) -window destop으로 선 원 sin그래프 그리기

선, 원 ,sin그래프 등을 그려보도록 하겠습니다. 선을 그리는 방법1 MoveToEx(hdc, 10, 10, NULL); //선의 시작지점 LineTo(hdc, 200, 400); //선을 그려주고 다른 한점을 나타낸다. LineTo(hdc, 400, 200); MoveToEx로 선의 시작지점을 나타내주고 LineTo로 다른 점을 나타내주고 선을 나타내 주는 함수입니다. 그러면 이제 삼각형을 그려보도록 하겠습니다. 그냥 해도 되긴 하는데 이왕이면 수학적으로 접근해보도록 하겠습니다. 그러면 선행되어야 할 학습이 있습니다. sin, cos을 알아야하는데요 . 여기에서 y/x=cos(∂)이고 t/x=sin(∂) 인것은 알고 있다고 생각하겠습니다. 이렇게 원을 그렸을 경우 x, y좌표를 알수 있습니다. 이것을..

비트교육/API 2020.09.07

API(7) - realtime 방식과 button ,setTimer

이번에는 realtime 방식과 button ,setTimer을 해보겠습니다. 들어가기에 앞서 int APIENTRY wWinMain(_In_ HINSTANCE hInstance, // 응용 프로그램의 고유 아이디 중요!! _In_opt_ HINSTANCE hPrevInstance, // _In_ LPWSTR lpCmdLine, // _In_ int nCmdShow) // 윈도우의 초기 상태 지정 WinMain의 인수에 대한 것입니다. 마지막 인수 nCmdShow 를 보시면 ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); 밑에 코드에 이것이 있습니다. nCmdShow 는 그냥 초기상태 값이라고 보면되는데 howWindow(hWnd, SW_SHOWDEFAULT); //..

비트교육/API 2020.09.05

API(6) -WinMain함수 알아보기

이제 WinMain을 알아보겠습니다. HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_EX200903)); //리소스 파일 로딩 MSG msg; // 기본 메시지 루프입니다: while (GetMessage(&msg, nullptr, 0, 0)) //이벤트가 일어나면 큐에 하나씩 쌓이고 GetMessage로 큐에 있는것을 빠져나오게한다. { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) //단축키 적용하려는 함수 { TranslateMessage(&msg); //키보드를 누르거나 때면 WM_CHAR 메세지를 발생시킨다. DispatchMessage(&msg); //WinProc..

비트교육/API 2020.09.05

API(5) -WM_PAINT에 대해 알아보기!

WM_PAINT에 대해서 다뤄볼 것입니다. case WM_PAINT: { PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, &ps); // TODO: 여기에 hdc를 사용하는 그리기 코드를 추가합니다... EndPaint(hWnd, &ps); } break; 일단 먼저 BeginPaint 로 시작해서 EndPaint 로 끝나는 것이 있다. 이처럼 세트로 묶여져 있는 것은 대부분 메모리 할당 하고나서 해제해는 함수이다. //RECT r; //사가형의 lefttop, right bottom //SIZE s; //가로세로 길이 (width, height)(horizontal, vertical) //POINT p; //좌표 //--> 이 3개 구조체는 꼭 알아두기! 이 3개 구조체는 ..

비트교육/API 2020.09.03

문법

이런식으로 대문자로 나타낸 단어는 새로 정의 해준 단어이거나 구조체일 확률이 높다. f12로 들어가서 보면 typedef wchar_t WCHAR; 이렇게 나타나있다. wchar_t 를 WCHAR로 나타내주겠다고 쓴것이다. 그리고 구조체에서도 이런경우를 많이 볼 수 있다. struct APPLE { int a; int b; }; typedef struct APPLE { int a=10; int b; } newAPPLE; APPLE이란 구조체를 newAPPLE이라고 쓰겠다고 하는것이다. typedef struct tagAPPLE { int a ; int b; } APPLE, *PAPPLE; 그리고 이것처럼 2개 이상도 되고 포인터변수로도 표현 할 수 있다. function에 &ps 처럼 &가 붙은 것이 있..

비트교육/문법 2020.09.03

API(4) -win32의 WndProc에 대해 알아보기!

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 이 WndProc함수를 알아보겠습니다. WndProc(발생할 주체, 메세지, wParam, lParam) 에서 lParam은 우리 마우스의 좌표입니다. int x = LOWORD(lParam); int y = HIWORD(lParam); LOWORD에 들어가 보면 ((WORD)(((DWORD_PTR)(l)) & 0xffff)) 로 정의가 되어있습니다. 여기서 0xffff 는 0x0000ffff인데 이것을 & 하면 앞에 4비트는 0이되고 뒤에 4비트는 숫자 그대로인 것을 알 수 있습니다. ((WORD)((((DWORD_PTR)(l)) >> 16) & 0xffff))..

비트교육/API 2020.09.03

API(3) -win32의 WinProc에 대해 알아보기!

이번에는 WinProc의 함수를 보겠습니다. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_COMMAND: { int wmId = LOWORD(wParam); // 메뉴 선택을 구문 분석합니다: switch (wmId) { case IDM_ABOUT: DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); break; case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); ..

비트교육/API 2020.09.03