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  

댓글 없음:

댓글 쓰기