본문 바로가기

Test Code/C++

WinAPI - 윈도우폼에 아이콘 넣기

WinApi 폼에 아이콘 적용할려면 Resource를 활용하여야 합니다.


 // Resource.h


#define ID_BTN_EXIT           5001

#define IDC_APP                        5002



 // Resource.rc


#include "Resource.h"

IDC_APP ICON "app.ico"



 // main.cpp


#include <windows.h>

#include "Resource.h"


HWND btn_Exit;

HINSTANCE g_hInst;

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


int WINAPI WinMain (HINSTANCE hThisInstance,

                    HINSTANCE hPrevInstance,

                    LPSTR lpszArgument,

                    int nFunsterStil)

{

HWND hwnd;

MSG messages;

WNDCLASSEX wcls;

char szClassName[10] = "Icon Test";

g_hInst = hThisInstance;

wcls.hInstance = hThisInstance;

wcls.lpszClassName = szClassName;

wcls.lpfnWndProc = WinProc;

wcls.style = CS_DBLCLKS;

wcls.cbSize = sizeof (WNDCLASSEX);


wcls.hIcon = LoadIcon (g_hInst, MAKEINTRESOURCE(IDC_APP ));

wcls.hIconSm = LoadIcon (g_hInst, MAKEINTRESOURCE(IDC_APP));


wcls.hCursor = LoadCursor (NULL, IDC_ARROW);

wcls.lpszMenuName = NULL;

wcls.cbClsExtra = 0;

wcls.cbWndExtra = 0;

wcls.hbrBackground = (HBRUSH)COLOR_WINDOW;


if (!RegisterClassEx (&wcls))

return 0;


hwnd = CreateWindow(

szClassName, 

szClassName,

WS_OVERLAPPEDWINDOW,

0,

0,

300,

300,

NULL, NULL, hThisInstance, NULL);


ShowWindow (hwnd, nFunsterStil);

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

{

TranslateMessage(&messages);

DispatchMessage(&messages);

}

return messages.wParam;

}

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

{

    switch (message)

    {

        case WM_CREATE:

        btn_Exit = CreateWindow(

        "button",

        "Exit",

        WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,

        10,10,70,30,

        hwnd,

        (HMENU)ID_BTN_EXIT,

        g_hInst,

        NULL);

    break;

    case WM_COMMAND :

        switch(LOWORD(wParam))

        {

        case ID_BTN_EXIT :

        PostQuitMessage(0);

        return 0;

        break;

        default:

        return 0;

        }

    break;

        case WM_DESTROY:

            PostQuitMessage (0);

            break;

        default:

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

    }

    return 0;

}



**. 컴파일

windres -i Resource.rc -o Resource.o

g++ *.cpp Resource.o -o TestCode.exe -mwindows


컴파일을 쉽게하기 위해서 배치파일을 만듭니다. Makefile을 만들어서 해도 됩니다.

rem cmd_Build.bat 


windres -i Resource.rc -o Resource.o

g++ *.cpp Resource.o -o TestCode.exe -mwindows


pause



'Test Code > C++' 카테고리의 다른 글

Mingw - Split 함수 만들기  (0) 2013.12.21
WinAPI - GetTickCount 함수로 sleep 함수 만들기  (0) 2013.12.21
WinAPI - SYSTEMTIME  (0) 2013.12.20
MingW - DLL 생성 및 사용  (0) 2013.12.20
MingW - 컴파일 및 옵션  (0) 2013.12.20