Post List

2017년 7월 27일 목요일

win32 api 시작하기

 c, c++를 배우고 나니 직접 응용프로그램을 만들고 싶어졌다. c++언어로 프로그램을 만들 수 있는 애플리케이션이 win32 api와 MFC가 있어서 뭘 배워야 할지 고민했다. MFC가 좀 더 세련된 툴을 제공하는 것 같아 보였지만 많이 복잡해 보여서 열심히 구글링을 해본 결과 아주 자세히 설명된 블로그를 찾을 수 있었다.

 링크 여기에 들어가보면 응용 프로그램 개발에 대한 커리큘럼(?)이 이해되기 쉽게 나와 있으니 참고해보자!

 위의 글에서 win32 api를 먼저 배워 윈도우 메시지에 대한 전반적인 이해를 하고 MFC를 시작하면 좋다고 한다.  SoEn:소프트웨어 공학 연구소 여기에 win32 api에 대한 기초강의가 잘 설명돼 있으니 굳이 책을 사지 말고 무료로 기초를 다져 봅시다.


1. 프로젝트 만들기

1. visual studio 에 들어가 새 프로젝트를 누른다.


2. 다음

3.

위의 과정으로 win 32 api 개발을 위한 프로젝트 환경이 모두 준비됐다.


2. 빈 창을 띄우는 코드 실행하기  


1. 소스 파일에 새 항목을 추가하여 main.cpp 파일을 만들자!

2. 추가된 메인 파일에 아래 코드를 복붙 하면 완료!!!

빈 창을 띄우는 winapi 코드 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#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));
}
cs



3. 에러 잡기!


위의 코드를 컴파일 하면 되부분 될 텐데 안되는 사람도 있을 거다.
error C2440: '=' : 'LPSTR'에서 'LPCWSTR'(으)로 변환할 수 없습니다.
error C2664: 'CreateWindowExW' : 매개 변수 2을(를) 'LPSTR'에서 'LPCWSTR'(으)로 변환할 수 없습니다.

위와 같은 에러가 뜨면서 안되는 사람들은 아래와 같은 방법으로 해결 할 수 있다.

1. 프로젝트 속성에 들어가기

2. 구성속성/일반/문자 집합 항목에서 "멀티바이트  문자 집합 사용" 을 선택한다.

3. 구성속성/링커/중분 링크 사용 항목에서 "아니요" 를 선택한다.


오류 해결 끝~~

다음에는 win32 api를 통해 메모장을 제어하는 것을 구현해보자!

댓글 없음:

댓글 쓰기