ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C언어 공부 되새김 Win32Api구현해보기 1편 화면출력
    C언어 공부 되새김 Win32api로 구현해보기 2019. 10. 15. 22:19

    컴퓨터 프로그래밍 C언어 공부를 콘솔로 공부하고 윈도우 프로그래밍으로 구현하는데 

     

    콘솔로 공부하던 소스를 윈도우 프로그래밍 기본코드를 제외하고 함수형식으로 콘솔 소스와

     

    비슷하게 구현해보려고 합니다.

     

    콘솔은 쉽고 윈도우는 어렵다가 아니고 윈도우 프로그래밍을 시작부터 접하면서 친숙해졌으면 합니다.

     

    구현은 무료 통합개발 환경인 Dev-C++ 4.9.9.2로 구현합니다.

     

    ◈ 기본 통합환경 설정 방법입니다.

     

    ▷ 프로젝트 시작하기

    File → New → Project

     

     환경 선택하기

    Console Application 선택 Windows Application 선택

    Console와 Windows 선택하여 생성할 수 있습니다.

     

    저는 Console에서 작성된 코드를 기준으로 Windows Application에서 비슷하게 구현합니다.

     

    최초 "시작하기"화면 출력

    #include <stdio.h> 
    #include <stdlib.h>

    int main(int argc, char *argv[])
    {
      printf("C 언어 시작하기\n"); 

      system("PAUSE");
      return 0;
    }

     

    콘솔코드는 간단하지만 윈도우 코드는 기본 윈도우창 보이게하는 기본코드가 있으나 기본코드를 제외하면 

     

    많이 차이나지는 않습니다.

    #include <windows.h>

     

    /*  Declare Windows procedure  */

    LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

     

    /*  Make the class name into a global variable  */

    char szClassName[ ] = "myadmonWindowsApp";

     

    int WINAPI WinMain (HINSTANCE hThisInstance,

                        HINSTANCE hPrevInstance,

                        LPSTR lpszArgument,

                        int nFunsterStil)

     

    {

        HWND hwnd;               /* This is the handle for our window */

        MSG messages;            /* Here messages to the application are saved */

        WNDCLASSEX wincl;        /* Data structure for the windowclass */

     

        /* The Window structure */

        wincl.hInstance = hThisInstance;

        wincl.lpszClassName = szClassName;

        wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */

        wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */

        wincl.cbSize = sizeof (WNDCLASSEX);

     

        /* Use default icon and mouse-pointer */

        wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);

        wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);

        wincl.hCursor = LoadCursor (NULL, IDC_ARROW);

        wincl.lpszMenuName = NULL;                 /* No menu */

        wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */

        wincl.cbWndExtra = 0;                      /* structure or the window instance */

        /* Use Windows's default color as the background of the window */

        wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

     

        /* Register the window class, and if it fails quit the program */

        if (!RegisterClassEx (&wincl))

            return 0;

     

        /* The class is registered, let's create the program*/

        hwnd = CreateWindowEx (

               0,                   /* Extended possibilites for variation */

               szClassName,         /* Classname */

               "myadmon Windows App",       /* Title Text */

               WS_OVERLAPPEDWINDOW, /* default window */

               CW_USEDEFAULT,       /* Windows decides the position */

               CW_USEDEFAULT,       /* where the window ends up on the screen */

               544,                 /* The programs width */

               375,                 /* and height in pixels */

               HWND_DESKTOP,        /* The window is a child-window to desktop */

               NULL,                /* No menu */

               hThisInstance,       /* Program Instance handler */

               NULL                 /* No Window Creation data */

               );

     

        /* Make the window visible on the screen */

        ShowWindow (hwnd, nFunsterStil);

     

        /* Run the message loop. It will run until GetMessage() returns 0 */

        while (GetMessage (&messages, NULL, 0, 0))

        {

            /* Translate virtual-key messages into character messages */

            TranslateMessage(&messages);

            /* Send message to WindowProcedure */

            DispatchMessage(&messages);

        }

     

        /* The program return-value is 0 - The value that PostQuitMessage() gave */

        return messages.wParam;

    }

     

     

    /*  This function is called by the Windows function DispatchMessage()  */

     

    LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

    {

        HDC hdc;

        PAINTSTRUCT ps;

       

        switch (message)                  /* handle the messages */

        {

     

     

            case WM_PAINT:

                hdc=BeginPaint(hwnd,&ps);

                TextOut(hdc,0,0,"C 언어 시작하기",15);

                EndPaint(hwnd,&ps);

            break;

     

            case WM_DESTROY:

                PostQuitMessage (0);       /* send a WM_QUIT to the message queue */

                break;

            default:                      /* for messages that we don't deal with */

                return DefWindowProc (hwnd, message, wParam, lParam);

        }

     

        return 0;

    }

     

    비슷하게 구현했습니다.

     

    printf 명령어가 TextOut 명령어로 대체되어 사용되었습니다.

     

    다음편에 좀더 다양하게 화면 출력해 보겠습니다.

     

    오늘은 이만...

Designed by Tistory.