본문 바로가기

Programming/Win32 API

09. 템플릿 싱글톤 패턴 #include int atexit(void (*func)(void)); atexit()는 성공시 0, 오류시 0이 아닌 값을 반환합니다. 인자로 전달된 포인터함수가 프로그램 종료 시 자동으로 호출되어야 할 함수는 32개 까지 등록할수있다 등록된 순서의 역순으로 호출 된다 프로그램이 정상적으로 호출 됄때에만 호출 된다 // 싱글톤 template class JSingleton { protected: JSingleton() {} virtual ~JSingleton () {} JSingleton(const JSingleton& s) {} private: static T * mSingleton; static void destroy() { delete mSingleton ; } public: static T *.. 더보기
07. 정적 라이브러리(.lib) 정적 라이브러리란.... 라이브러리 파일을 컴파일후 링커시에 라이브러리 파일을 exe 파일에 포하누시킨다 정적 라이브러리 프로젝트 속성 설정 구성 속송 -> 일반 1. 출력 디렉토리 (../../output/TBasis2D\) 2. 중간 디렉토리 (../../output/TBasis2D\) 구성 속송 -> 라이브러리 관리자 -> 일반 1. 출력 파일 (TBasis2D.lib) 2. 추가 종속성 (winmm.lib) 구성 속송 -> 빌드 이벤트 ->빌드 후 이벤트 1. 명령줄 -> copy "*.h" "../../include" copy "TBasis2D.lib" "../../lib/TBasis2D.lib" C/C++ -> 일반 추가 포함 디렉터리 (../../include) 2. 구성 속송 -> 링커 -.. 더보기
08. 고해상고 타이머 시간을 정확하게 측정할 수 있습니다. 정확한 시간 측정이 중요한 응용 프로그램에서 고해상도 타이머를 사용하면 최상의 결과를 얻을 수 있습니다. 예를 들어, 일부 Direct3D 응용 프로그램은 애니메이션이 고해상도 타이머를 기반으로 하는 경우에 보다 부드럽게 표시됩니다. int main(void) { LARGE_INTEGER start, end, frequency; double runTime; QueryPerformanceFrequency(&frequency); // 초당 틱 수 QueryPerformanceCounter(&start); // 시작 틱의 개수 ... // 수행할 내용 QueryPerformanceCounter(&end); // 종료 틱의 개수 runTime = ((double)(end.Q.. 더보기
0.7. WndProc 메세지 처리 함수 0.7. WndProc 메세지 처리 함수 // 메세지처리함수 LRESULT CALLBACK WndProc( HWND hWnd , UINT message, WPARAM wParam, LPARAM lParam ) { int wmId , wmEvent; PAINTSTRUCT ps ; HDC hdc ; switch(message ) { case WM_DESTROY : // 종료 PostQuitMessage(0 ); break; default: // 사용자가 처리하고 남은 메세지 들을 운영체제 에게 넘긴다 return DefWindowProc (hWnd, message,wParam ,lParam); } return 0 ; } 더보기
06. 윈도우크기위치변경함수 06. 윈도우크기위치변경함수 // 마지막 bool 인자는 화면을 갱신 하냐 안하냐 MoveWindow(hWnd ,iStartX, iStartY, windowWidth , windowHegith, true); 더보기
05. 기본 메세지 루프 05. 기본 메세지 루프 // 기본메시지루프입니다 MSG msg ; // GetMessage 함수안에서운영체제에서의이벤트감지후리턴한다 // GetMessage 은이벤트감지시까지락이걸린다 // PeekMessage 은이벤트감지시까지락이없고이벤트감지후리턴한다 while (GetMessage (&msg, NULL, 0 , 0)) { // 키보드에대한 메세지 해석을 해서 msg에담는다 TranslateMessage(&msg ); // 우리가 정의한 메세지프로시져로 msg 를보넨다 DispatchMessage(&msg ); } // wWinMain 종료리턴값 return (int ) msg. wParam; 더보기
04. 윈도우 생성 CreateWindow 04. 윈도우 생성 CreateWindow // 레지스트에WNDCLASSEX를동록하고 // 윈도우를생성한다 HWND hWnd = CreateWindow( _T("KGCA_windows" ), WNDCLASSEX 등록 할때 설정한 클래스 이름 _T(" 장지환"), 타이틀바의 이름 WS_OVERLAPPEDWINDOW, 윈도우 설정 0, 윈도우 생성시 X 좌표 0, 윈도우 생성시 Y 좌표 800, 윈도우 생성시 Width 크기 600, 윈도우 생성시 Hegith 크기 NULL, 부모 윈도우가 있을 경우 부모 윈도우의 핸들을 지정해 준다 NULL, 윈도우에서 사용할 메뉴의 핸들을 지정한다. hInstance, 윈도우를 만드는 주체, 즉 프로그램의 핸들을 지정한다 NULL); CREATESTRUCT라는 구조체의 .. 더보기
03. 윈도우 클래스 구조체 WNDCLASSEX 03. 윈도우 클래스 구조체 WNDCLASSEX 원형 WNDCLASS -> 확장형(기능추가) WNDCLASSEX // WINDCLASS 구조체생성및설정 DWORD MyRegisterClass (HINSTANCE hInstance) { // 원형 WNDCLASS -> 확장형(기능추가 ) WNDCLASSEX WNDCLASSEX wcex ; // WNDCLASSEX 크기설정 wcex.cbSize = sizeof( WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW ; // 메세지처리함수ㅎ마수포인터로넘긴다 wcex.lpfnWndProc = WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; // 인스턴스넘긴다 wcex.hInstance.. 더보기
02. WinMain OR wWinMain 함수 파라미터 해석 02. WinMain OR wWinMain 함수 파라미터 해석 int APIENTRY wWinMain ( HINSTANCE hInstance, HINSTANCE hPrevlenstance , LPWSTR lpaszCmdParam , int nCmdShow ) 1. APIENTRY 함수 호출 규약 stdcall 2. HINSTANCE hInstance 현재 프로그램의 인스턴스 핸들 3. HINSTANCE hPrevlenstance 바로 앞에 실행된 현재 프로그램의 인스턴스 핸들. 없을 경우는 NULL이 되며 WIN32에서는 항상 NULL이다. 호환성을 위해서만 존재하는 인수이므로 신경쓰지 않아도 된다. 4. LPWSTR lpaszCmdParam 명령행으로 입력된 프로그램 인수이다. 도스의 argv인수에 해.. 더보기
01. 유니코드 OR 멀티바이트 문자 지원 여부 따라 대체 방법 01. 유니코드 OR 멀티바이트 문자 지원 여부 따라 대체 방법 WinMain (멀티바이트 ) -> wWinMain (유니코드) #include 유니코드 지원 함수들 L"KGCA_windows" 문자열 앞에 L을 붙이면 유니코드로 문자열로 변경 _T"KGCA_windows" 문자열이 유니코드 OR 멀티바이트 상관 없이 쓸수 있게함 TEXT(문자열) 문자열이 유니코드 OR 멀티바이트 상관 없이 쓸수 있게함 char* 형은 PTSTR이나 LPTSTR형을 쓰고, const char*형은 PCTSTR,LPCTSTR형을 쓰는 것이 좋다. 유니코드만 지원한다면 T를 W로 바꿔 PWSTR,LPWSTR형을 쓰고 const char*형은 PCWSTR,LPCWSTR형을 쓴다. API는 유니코드와 ANSI를 구별하고,변수명.. 더보기