ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Visual Studio 2017에서 WinAPI 프로젝트 생성하는 방법
    개발 환경/Visual Studio 2017&2019 2018. 7. 9. 13:33



    Visual Studio 2017에서 WinAPI(  Windows API )를 사용한 프로그램을 작성하는 방법을 설명합니다.




    Visual Studio 2017 설치하는 방법은 다음 포스팅을 참고하세요


    C++, Win32 API, MFC 개발을 위해 Visual Studio Community 2017 설치하는 방법

    http://webnautes.tistory.com/1131



    2018. 7. 9 - 최초작성




    1. 메뉴에서 파일 > 새로 만들기 > 프로젝트를 선택합니다.



    2. 왼쪽 항목에서 Visual C++ > Windows 데스크톱을 선택하면 중앙에 보이는 항목에서  Windows 데스크톱 마법사를 선택합니다.




    3. 응응 프로그램 종류로 Windows 응용 프로그램을 선택하고 빈 프로젝트를 체크합니다.

    SDL을 체크하면 보안상 대체해서 사용해야 하는 함수들을 알려줍니다. 예를 들어 scanf() 대신 scanf_s() 를 사용하라는 메시지가 보입니다.




    4. 리소스 뷰에 보이는 프로젝트 이름에서 마우스 우클릭하여 보이는 메뉴에서 추가 > 리소스를 선택합니다.

    리소스 뷰가 보이지 않으면 Ctrl + Shift + E를 누릅니다.




    5. 리소스 추가 창이 보이면 Dialog를 선택하고 새로 만들기 버튼을 클릭합니다.




    6. 화면에 다이얼로그가 보입니다. Ctrl + S를 눌러 저장합니다.




    리소스 뷰에도  다이얼로그가 추가됩니다.




    7. 각 항목을 선택하여 ID를 확인해둡니다.


    다이얼로그 IDD_DIALOG1  

    확인 버튼 IDOK

    최소 버튼 IDCANCEL



    8. 솔루션 탐색기에서 소스 파일을 선택하고  마우스 우클릭하면 보이는 메뉴에서 추가 > 새 항목을 선택합니다.




    9. C++ 파일(cpp)를 선택하고  추가버튼을 클릭합니다.




    10. 앞에서 확인했던 ID를 이용해서 Windows API 코드를 수정한 상태입니다.

    코드 출처 - http://www.winprog.org/tutorial/dialogs.html


    #include <windows.h>
    #include "resource.h"

    HBRUSH g_hbrBackground = NULL;

    BOOL CALLBACK DlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
    {
    int msgboxID;

    switch (Message)
    {
    case WM_INITDIALOG:
    g_hbrBackground = CreateSolidBrush(RGB(128, 128, 128));

    SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM)LoadIcon(NULL,
    MAKEINTRESOURCE(IDI_APPLICATION)));
    SendMessage(hwnd, WM_SETICON, ICON_BIG, (LPARAM)LoadIcon(NULL,
    MAKEINTRESOURCE(IDI_APPLICATION)));
    break;
    case WM_CLOSE:
    EndDialog(hwnd, 0);
    break;
    case WM_CTLCOLORDLG:
    return (LONG)g_hbrBackground;
    case WM_CTLCOLORSTATIC:
    {
    HDC hdcStatic = (HDC)wParam;
    SetTextColor(hdcStatic, RGB(255, 255, 255));
    SetBkMode(hdcStatic, TRANSPARENT);
    return (LONG)g_hbrBackground;
    }
    break;
    case WM_COMMAND:
    switch (LOWORD(wParam))
    {
    case IDOK:
    msgboxID = MessageBox(hwnd, L"OK 버튼이 눌러졌습니다. 프로그램을 종료할까요?", L"정보", MB_YESNO);

    if (msgboxID==6) EndDialog(hwnd, 0);
    break;
    case IDCANCEL:
    msgboxID = MessageBox(hwnd, L"CANCEL 버튼이 눌러졌습니다. 프로그램을 종료할까요?", L"정보", MB_YESNO);

    if (msgboxID == 6) EndDialog(hwnd, 0);
    break;
    }
    break;

    case WM_DESTROY:
    DeleteObject(g_hbrBackground);
    break;
    default:
    return FALSE;
    }
    return TRUE;
    }

    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPSTR lpCmdLine, int nCmdShow)
    {
    return DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DlgProc);
    }



    11. 실행결과입니다.






    포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
    댓글로 알려주시면 빠른 시일내에 답변을 드리겠습니다.

    여러분의 응원으로 좋은 컨텐츠가 만들어집니다. 지금 본 내용이 도움이 되었다면 유튜브 구독 부탁드립니다. 감사합니다 : )

    유튜브 구독하기


    댓글 0

Designed by Tistory.