8월, 2024의 게시물 표시

교재 소개

다음과 같은 자료들이 있다. 무료 교재 소개 https://open.umn.edu/opentextbooks/ http://bigbook.or.kr/ Green Tea Press – Free books by Allen B. Downey Gilbert Strang, Calculus  https://ocw.mit.edu/courses/res-18-001-calculus-fall-2023/pages/textbook/ Open Logic Project https://builds.openlogicproject.org/ Open Logic Text Complete Version (2024-12-01) 이상구, 선형대수 https://ibook.skku.edu/Viewer/LA-Texbook http://matrix.skku.ac.kr/LA/ David Cherney, Tom Denton, Rohit Thomas and Andrew Waldron, Linear Algebra https://www.math.ucdavis.edu/~linear/

Docs - 빌드 시스템

https://github.com/zhiayang/nabs https://github.com/tsoding/nobuild

Docs - 컴퓨터 과학 스스로 학습하기

https://github.com/minnsane/TeachYourselfCS-KR 독학자를 위한 정리된 사이트

WinAPI - COM in plain C

https://github.com/rubberduck-vba/Rubberduck/wiki/COM-in-plain-C 순수 C로 COM을 구현하는 내용에 대한 사이트

WinAPI 0003 - CreateWindowExW 함수

CreateWindow 함수는 CreateWindowEx 함수의 매크로로 구성되며, 이때 dwExStyle 의 값은 0L이 된다. 따라서 CreateWindowEx 함수만을 알고 있으면 된다. HWND CreateWindowExW(      [in] DWORD dwExStyle,      [in, optional] LPCWSTR lpClassName,      [in, optional] LPCWSTR lpWindowName,      [in] DWORD dwStyle,      [in] int X,      [in] int Y,      [in] int nWidth,      [in] int nHeight,      [in, optional] HWND hWndParent,      [in, optional] HMENU hMenu,      [in, optional] HINSTANCE hInstance,      [in, optional] LPVOID lpParam ); 소스 코드는 다음과 같다. #ifndef UNICODE #define UNICODE #endif #include <windows.h> LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_DESTROY: PostQuitMessage(0); return 0; case WM_PAINT: { PAINTSTRUCT ps; HDC hdc = BeginPaint(hwnd, ...

WinAPI - 윈도 프로시저 콜백

https://learn.microsoft.com/ko-kr/windows/win32/learnwin32/your-first-windows-program https://learn.microsoft.com/ko-kr/windows/win32/learnwin32/writing-the-window-procedure WinAPI의 가장 기본적인 단위 중 하나는 윈도우입니다. 다음 예제는 윈도우를 생성하고 처리하는 방법을 보여줍니다. #ifndef UNICODE #define UNICODE #endif #include <windows.h> LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow) { // Register the window class. const wchar_t CLASS_NAME[] = L"Sample Window Class"; WNDCLASS wc = { }; wc.lpfnWndProc = WindowProc; wc.hInstance = hInstance; wc.lpszClassName = CLASS_NAME; RegisterClass(&wc); // Create the window. HWND hwnd = CreateWindowEx( 0, // Optional window styles. CLASS_NAME, // Window class L"Learn to Program Windows", // Window tex...

WinAPI 0000 - 시작과 개발환경 갖추기

가장 간단한 개발환경을 갖추고 WinAPI를 공부해보자. 우선 컴파일러를 설치한다. 컴파일러: TDM-GCC  https://jmeubank.github.io/tdm-gcc/ 여기에서 64비트 버젼 TDM-GCC를 다운로드 받아 설치한다. 예) tdm64-gcc-10.3.0-2.exe 에디터는 각자 손에 익은 편한 것을 사용하자. 글쓴이는 neovim을 사용할 것이다. 에디터: neovim  https://neovim.io/ 이제 최초의 소스코드를 입력하고 main.c 라는 이름으로 저장하자. #ifndef UNICODE #define UNICODE #endif #include <windows.h> int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow) {     return 0; } 명령행에서 gcc main.c -o main -municode 라고 입력해보자. 컴파일이 되면서 main.exe가 만들어진다. 지금 당장은 main.exe를 실행해도 아무런 동작도 이루어지지 않는다. 일단은 기본적인 개발환경을 갖춘 것에 만족하자.  

WinAPI 0001 - wWinMain 함수

64비트 유니코드 윈도11 환경에서의 wWinMain 함수는 다음과 같다. https://learn.microsoft.com/ko-kr/windows/win32/learnwin32/winmain--the-application-entry-point wWinMain 함수의 원형은 다음과 같다. int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow); 각 인자의 의미는 다음과 같다. hInstance 는 인스턴스에 대한 핸들 이거나 모듈에 대한 핸들입니다. 운영 체제는 이 값을 사용하여 메모리에 로드될 때 실행 파일 또는 EXE를 식별합니다. 특정 Windows 함수에는 인스턴스 핸들이 필요합니다(예: 아이콘 또는 비트맵 로드). hPrevInstance는 의미가 없습니다. 16비트 Windows에서 사용되었지만 이제는 항상 0입니다. pCmdLine에는 명령줄 인수가 유니코드 문자열로 포함되어 있습니다. nCmdShow 는 기본 애플리케이션 창이 최소화, 최대화 또는 정상적으로 표시되는지 여부를 나타내는 플래그입니다.