2011-01-31

Codelite로 Win32 프로그래밍하기

MinGW와 함께 배포되는 Codelite에서도 Win32 API 프로그래밍이 가능하지만, 프로젝트 생성 다이얼로그박스에서 Win32에 대한 항목이 없다. 그래도 MinGW에서 Win32 API 를 지원하고 있기 때문에 옵션 설정으로 간단히 Windows 프로그래밍을 할 수 있다.
  1. 메뉴에서 Workspace > New Project 를 클릭한다.
  2. Categories 에서 Console 을 선택하고,
  3. Simple Executable (g++) 을 선택한다.
  4. Project Name 을 원하는 이름으로 입력하고, OK 버튼을 클릭한다.
  5. 그러면 프로젝트가 생성되고, 이제 프로젝트의 옵션을 설정할 차례이다.
  6. 메뉴에서 Workspace > Open Active Project Settings… 를 클릭한다.
  7. 새로운 창이 뜨면, Linker를 클릭한다.
  8. 이제, Options 에 -mwindows 를 입력하거나,
  9. Libraries 에 user32;kernel32;gdi32 를 입력하고 OK버튼을 누른다.
  10. 이로써 설정이 완료되었으며, main.cpp 에 다음을 입력하고 빌드/실행해본다.
    #include <windows.h>
     
    LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
    HINSTANCE g_hInst;
    LPSTR lpszClass="First";
     
    int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
        ,LPSTR lpszCmdParam,int nCmdShow)
    {
     HWND hWnd;
     MSG Message;
     WNDCLASS WndClass;
     g_hInst=hInstance;
     
     WndClass.cbClsExtra=0;
     WndClass.cbWndExtra=0;
     WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
     WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
     WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
     WndClass.hInstance=hInstance;
     WndClass.lpfnWndProc=(WNDPROC)WndProc;
     WndClass.lpszClassName=lpszClass;
     WndClass.lpszMenuName=NULL;
     WndClass.style=CS_HREDRAW | CS_VREDRAW;
     RegisterClass(&WndClass);
     
     hWnd=CreateWindow(lpszClass,lpszClass,WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
        NULL,(HMENU)NULL,hInstance,NULL);
     ShowWindow(hWnd,nCmdShow);
     
     while(GetMessage(&Message,0,0,0)) {
      TranslateMessage(&Message);
      DispatchMessage(&Message);
     }
     return Message.wParam;
    }
     
    LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
    {
     switch(iMessage) {
     case WM_DESTROY:
      PostQuitMessage(0);
      return 0;
     }
     return(DefWindowProc(hWnd,iMessage,wParam,lParam));
    }
  11. 실제 빌드를 해보면 아래와 같이 링크되는 것을 확인할 수 있다.
    g++ -o ./Debug/Test01 ./Debug/main.o  "-L."  -mwindows
    or
    g++ -o ./Debug/Test01 ./Debug/main.o  "-L."  -luser32 -lkernel32 -lgdi32  

2011-01-29

MinGW 설치

MinGW는 윈도우용 gcc 패키지이다. 이것으로 C/C++ 프로그래밍을 할 수 있으며, Win32 API 로 윈도우 프로그램도 만들수 있다. Codelite, Codeblocks 와 같은 IDE를 설치하면 MinGW 가 함께 설치되는 배포본도 있어서, 별도로 설치할 필요가 없지만, 어떻게 설치하는지를 알아보는 것도 나름대로 의미가 있을 것이라고 생각한다. 아주 간단하니, 한번 해보도록 하자.

  1. Automated MinGW Installer (mingw-get-inst : mingw-get-inst-20101030.exe : 2011년 1월 29일 현재) 를 다운로드 받는다.
  2. 다운로드 받은 mingw-get-inst-20101030.exe 를 실행한다.
  3. Repository Catalogues 에서 Use pre-packaged repository catalogues 를 선택한다.
  4. Select Destination Location 에서 C:\MinGW (기본값)를 입력하고 Next 를 누른다.
  5. Select Start Menu Folder 에서 MinGW (기본값)를 입력하고 Next 를 누른다.
  6. Select Components 에서 C++ CompilerMSYS Basic SystemMinGW Developer Toolkit 를 추가 선택하고, 설치를 진행한다.
  7. 그러면, 필요한 파일들을 다운로드 받으며, 설치를 진행한다.
  8. 설치가 완료된 후에, C:\MinGW\bin 를 환경변수 PATH 에 등록한다.
  9. 마지막으로, 커맨드창에서 mingw32-make.exe 를 실행해본다. 아래와 같이 나오면, 정상적으로 설치된 것이다.
    C:\>mingw32-make.exe
    mingw32-make.exe: *** No targets specified and no makefile found.  Stop.

위와 같이 설치를 완료한 후에, Eclipse, CodeLite, CodeBlocks 등의 IDE 에 연동하여 사용하면 편리하게 사용할 수 있을 것이다. 비록 MFC는 없지만, wxWidgets 등의 위젯 프레임워크를 이용하면 미려하면서도 편리하게 GUI 를 구현할 수도 있다.