[C API] Window Form 생성하기


Study/C , C++ , MFC  2012.10.21 09:00

안녕하세요. 명월입니다.


이번 포스팅에서는 CAPI 만을 이용해서 Window Form 을 띄우는 방법에 대해 소개를 하겠습니다. 솔직히 C#강좌도 같이 하고 있지만 최근에는 C#으로 코딩을 하는게 생산성면에서 훨씬 높기 때문에 API 나 MFC 로 윈도우 폼을 짜는 일은 거의 없어지고 있습니다.

 

그러나 CAPI 는 C#도 그렇고 Java 로써도 그 언어의 뿌리(?) 라고 볼 수 있기 때문에 API에 대해서 알아두면 오히려 C#, JAva 를 이해함에 있어서 더 편합니다.

앞으로 강좌에 앞서 간단하게 윈도우 폼을 생성하는 것에 대해서 알아보도록 하겠습니다.

파일을 생성후에 코드를 입력하도록 하겠습니다.

#include <Windows.h>

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst;
LPCTSTR LpszClass=TEXT("Main");
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;
  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,NULL,0,0)){
    TranslateMessage(&Message);
    DispatchMessage(&Message);
  }
  return (int)Message.wParam;
}

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam){
  switch(iMessage){
    case WM_DESTROY:
      PostQuitMessage(0);
      return;
  }
  return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

여기서 소스 설명을 하자면 우리가 시작하는 Main 의 역할이 CAPI window는 WinMain이라는 시작점으로 시작 됩니다. 여기에서 인수 hInstance 는 프로그램 인스턴트입니다. 그 다음 인수는 hPrevInstance는 그냥 Null 사용하는 인수입니다.(옛날 16비트 시절에 사용하던 인수라는데 잘 모르겠습니다.다.) lpszCmdParam은 외부 입력 인수이고 nCmdShow 는 프로그램이 최초 실행 될때의 형태입니다.

 

그리고 C언어는 Java, C# 과 다르게 메시지 전처리기를 선언해야 합니다. 그것이 CallBack WndProc 입니다.앞으로 차차 이 부분을 분석하고 사용할 터이니 확인하고 가겠습니다.
그럼 결과 화면을 확인 하겠습니다.

참고 소스 : Blog20121020.zip


댓글 0개가 달렸습니다.
댓글쓰기