<4D F736F F D204B FC7C1B7CEB1D7B7A55FB4D9C0CCB7BAC6AE20B5E5B7CEBFEC20B3BBBFA120B4EBC8AD20BBF3C0DA20BBE7BFEBC7CFB1E25FB1E8B5BFC3B62E646F63>

Size: px
Start display at page:

Download "<4D F736F F D204B FC7C1B7CEB1D7B7A55FB4D9C0CCB7BAC6AE20B5E5B7CEBFEC20B3BBBFA120B4EBC8AD20BBF3C0DA20BBE7BFEBC7CFB1E25FB1E8B5BFC3B62E646F63>"

Transcription

1 * 다이렉트드로우내에윈도우대화상자사용하기! 안녕하세요! 라디안소프트김동철입니다! 이번문서강연은다이렉트드로우 7.0 SDK에서 ddraw 예제로포함되었는 FSWindow에대해서정리를해보도록하겠습니다. FSWindow 예제는다이렉트드로우모드내에서윈도우대화상자을띄워서사용할수있는방법을알려준예제였습니다. 전개인적으로이방식이무척이나마음에들었습니다. 게을러서그런지몰라서^_^;;, 맵이나스프라이트툴을제작하기위해서 GDI표면에새로출력을하는방식의윈도우프로그램을제작하기싫어서였다고생각됩니다. 전 MFC에약하기때문에, 대부분윈도우 API를이용해서프로그램을코딩합니다.! 그전엔맵툴이나스프라이트툴을만들기위해서다이렉트드로우기반에서모든인터페이스를만들어서 ( 그려서 ) 사용을했었습니다. 아직도그툴을개선해서사용하고있습니다. ㅎㅎ하지만, 어떤기능을추가하고자할때마다인터페이스를새로만들고, 좌표를잡아주고기능을하게만드는단순작업이무척이나많았습니다. 하지만 FSWindow의예제처럼일반다이렉트드로우환경에서윈도우대화상자를바로이용할수있다는것은단순하고시간이많이걸리는인터페이스작업을빠르게할수있게해주었습니다. 전이방식을이용해서스프라이트툴이나맵툴, 간이이펙트, 기타편집툴을을만들어서사용합니다. 이방식이좋은점은최종완성된게임에서보이는화면에서동일한화면에서스프라이트, 맵작업을하기때문에게임의완성되었을때의최종모습을보면서작업을하는것과같아서, 이미지나맵의문제점을바로찾을수가있다는것이죠, 그리고, 스프라트에디터나, 맵에디터에서사용한그래픽출력엔진코드를그대로메인게임소스쪽으로가져다쓸수있기때문에제작시간을단축할수있습니다. 복잡한기능들을다가지고있는범용툴보다특정프로그램에특화된툴을빨리만드는데는무척이나도움이됩니다. 이프로그래밍방식역시한번사용하고나서, 나중에다시제작을하려면또다시전체를들여다보는번거로움이저에게있었습니다. 그래서이번기회에정리한다는생각에서자료를준비했습니다. 전번 KGDA 강연에서는게임용인스톨쉴드의작업하기였는데, 그역시지금의이유와동일한목적에서제작한것으로기억이남니다. 벌써 1년이지나갔군요, 개인적으로는별로한일없이시간만흐른것같습니다. 먼저 FSWindow의예제를불필요한공의에니메이션은제거하고필요한다이얼로그의이용법과어떻게내프로그램에가져다사용할것인가대해서다루어보도록하겠습니다. 또한보너스로현재예제로제공되는소스는디버깅모드에서는창모드로, 리테일모드에서는풀화면으로실행되도록코드내에작업해놓았습니다. 이렇게해놓으니디버깅이쉬워지는군요, 그전까지디버깅은오로지눈치와직감으로그리고메시지상자를이용한노가다, 화면에메시지출력방식으로해왔는데, 이렇게하니컴파일러의디버깅기능에도움을많이받게되는군요.. ㅎㅎ 사용하는방법은다이렉트드로우예제에있는 fswindow.h fswindow.cpp를프로젝트에포함시키는것을먼저해야합니다.

2 그다음은초기화하고, 사용하면됩니다. 먼저메인프로그램헤더에다음변수들을선언해줍니다. #include fswindow.h //*************************************************************************************** // 아래변수들은대화상자를컨트롤하는변수입니다. HWND g_hwndhelp = NULL; HWND g_hwnd_workdlg = NULL; // 작업메뉴다이얼박스 // 대화상자내에입력을처리하는콜백함수 ^_^;; LRESULT CALLBACK Dial_MainMenu_Proc(HWND hdlg, UINT umsg, WPARAM wparam, LPARAM lparam); //*************************************************************************************** 다른이름으로변수선언을해도상관없지만, 귀찮아서그냥가져다가사용합니다 ^_^;; 선언이끝났으면, 다이렉트드로우초기화를한이후에대화상자를처리해주는부분을초기화합니다. //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // 다이렉트드로우화면에대화상자사용을위한초기화작업 // 아래함수호출을해서대화상자를컨트롤해줄부분을초기화해줌니다. FSWindow_Init(hWnd, lpdd7, lpddsprimary, lpddsback); //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> fswindow 를초기화한후에대화상자를생성해줍니다. //*************************************************************************************** // 다이얼박스를생성한다. g_hwnd_workdlg = CreateDialog(g_hInstance, MAKEINTRESOURCE(IDD_MAINMENU), hwnd, (DLGPROC) Dial_MainMenu_Proc); // 창이위치를변경한다. SetWindowPos(g_hWnd_WorkDlg,HWND_TOP,g_rcWindow.left+550,g_rcWindow.top+10,0,0,SWP_NOSIZE); ShowWindow(g_hWnd_WorkDlg, SW_SHOWNORMAL); //*************************************************************************************** 대화상자를생성하고, 위치는화면중앙에서오른쪽으로이동시켜놓습니다. 인터페이스이니까, 화면가운데떵하고띄워지면, 뻘쭘하겠죠 //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // fswindow 시작, 아래함수가실행되면다이렉트드로우화면상에대화상자가나타납니다. g_hwndhelp = FSWindow_Begin(g_hWnd_WorkDlg, FALSE); //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

3 위의과정이처음다이렉트드로우표면상에대화상자를만드는작업입니다. 하지만, 다음에해야할부분이중요합니다. 아래설명한부분까지작업을해야정상적으로대화상자를볼수가있습니다. while( 1 ) if( PeekMessage( &msg, NULL, 0, 0, PM_NOREMOVE ) ) if(!getmessage( &msg, NULL, 0, 0 ) ) return msg.wparam; //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // 대화상자가보여지면, 모달리스대화상자를위해서메시지를교환시킨다. if (g_hwnd_workdlg == (HWND )NULL!IsDialogMessage(g_hWnd_WorkDlg, &msg)) // 메시지의번역과패치를하는곳 TranslateMessage(&msg); DispatchMessage(&msg); //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> else if(blsactive) DDUpdateFrame(); // 화면업데이트. else WaitMessage(); // 메지지없으면기다리기. 위의코드를보면메인프로그램코드의어느부분인지아실겁니다. 내응용프로그램에서메시지를받고처리하는메인코드부분이지죠, 다이렉트드로우내에나타나게한대화상자를위한메시지처리를해주는부분입니다. 위처럼라인 > 이그려져있는안쪽부분을가져다사용하시면되겠습니다. 다음을실제화면출력을해주를함수내부에다음과같이코드를수정합니다.

4 void DDUpdateFrame() HRESULT ddrval; // 작업표면에배경이미지출력 lpddswork->bltfast(0,0,lpddsbmp,&g_rcscreen,false); // 대부분의그래픽작업은여기서다수행한다.( 맵, 캐릭터, 이펙트, 기타등등 ) // 2차표면에작업표면을출력한다. lpddsback->bltfast(0,0,lpddswork,&g_rcscreen,false); DisplayFrameRate(); // 현재프레임수를출력한다. // 윈도우창과함께사용할경우에는다음과같이출력부를맞추어주어야한다. if (FSWindow_IsActive()) FSWindow_Update(); else // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // 대화상자를사용하는경우에는 Blt 방식만을이용한다. // 아니면, 화면이그냥죽어버릴것임 ^_^;; ddrval = lpddsprimary->blt(&g_rcwindow, lpddsback, NULL, DDBLT_WAIT, NULL); /* // 대화상자를사용하지않은경우는아래코드로바뀌어준다. #ifdef _DEBUG ddrval = lpddsprimary->blt(&g_rcwindow, lpddsback, NULL, DDBLT_WAIT, NULL); #else ddrval = lpddsprimary->bltfast(0,0,lpddsback,&g_rcwindow,ddbltfast_nocolorkey); if(ddrval == DD_OK) return; #endif */ // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> if(ddrval == DDERR_SURFACELOST) // 화면을잃어버린경우에대한처리 ddrval = lpddsprimary->restore(); if(ddrval!= DD_OK)

5 MessageBox(hWnd,"lpDDSPrimary->Restore() failed!!!",null,mb_ok); return; //end FSWindow //end ddupdateframe 자, 위해서살펴본부분만수정하면문제없이다이렉트드로우환경에서윈도우대화상자를자유자재로사용할수가있습니다. 풀소스에서는기본적을대화상자를생성하는것과제거하는것, 그리고다시만드는것을담고있습니다. 여러개의대화상자형태를미리만들어놓고계층적으로필요한대화상자를불러서사용하게되면, 원하는모든기능을추가한에디터처럼발전시킬수가있습니다. 전여러개의대화상자를메뉴처럼로드해서, 맵툴, 스프라이툴을제작해서사용하고있습니다. 작업결과는바로게임에반영되는모습을볼수있고, 이렇게하는게군더기없는프로그램을제작할수있고, 계속사용하다보니편하게느껴지네요, fswindow.h fswindow.cpp가하는기능을소스코드를보시면주석이달려있으니참고하시기바람니다. 저역시완벽하게이해는못하고사용하는방법에대한정리를해드릴수있을뿐입니다. 대충한글주석을달아놨지만크게실뢰를하지마시길바람니다. ^_^;; 그리고대화상자에대한메시지처리는콜백함수에서처리해주시면되고, 사용법은윈도우의대화상자의컨트롤을사용하는것을그대로사용하시면, 됩니다, 윈도우 API 책을참고해서필요한버튼, 택스트창을붙여서사용하시바람니다. // 콜백함수에서대화상자입력처리 LRESULT CALLBACK Dial_MainMenu_Proc(HWND hdlg, UINT umsg, WPARAM wparam, LPARAM lparam) 자! 아래에풀소스를보시고원하는대화상자를만들어작업능률을올리시기바람니다. ^_^;; * 필요한소스들 fswindow.h,fswindow.cpp,fswexam.hfswexam.cpp,resource.h,resource.rc 자료는 KGDA 프로그램자료실에올리겠습니다 ^^:

6 fswexam.h // 예제프로그램헤더 #include <windows.h> #include <ddraw.h> #include <mmsystem.h> #include <windowsx.h> #include <stdio.h> #include "fswindow.h" #include "resource.h" // 16비트컬러의색상을만든다. #define _RGB16BIT555(r,g,b) ((b>>3) + ((g>>3) << 5) + ((r>>3) << 10)) #define _RGB16BIT565(r,g,b) ((b>>3) + ((g>>2) << 5) + ((r>>3) << 11)) // 비트맵고유식별자 #define BITMAP_ID #define MAXCOLOR 256 0x4D42 LPDIRECTDRAW7 lpdd7; LPDIRECTDRAWSURFACE7 lpddsprimary; LPDIRECTDRAWSURFACE7 lpddsback; DDCOLORKEY color_key; // 투명색 DDPIXELFORMAT ddpixel; BOOL BMP_STYLE_565 = FALSE; LPDIRECTDRAWSURFACE7 lpddswork; // 작업을완료하는페이지 // pcx 그림을위한표면 LPDIRECTDRAWSURFACE7 lpddsbmp; int mouse_x,mouse_y; RECT g_rcwindow; // 현재이미지가출력되는화면영역 RECT g_rcviewport; RECT g_rcscreen = 0,0,800,600; // 윈도우위치조절을위한변수 LONG ix,iy,iwidth,iheight;

7 // 프레임수체크용변수 DWORD dwframetime; DWORD dwframes; DWORD dwframecount; DWORD dwtime; DWORD acc_count; char FR_buff[256]; char FR_moubuff[300]; HDC g_hdc; // 표면의컨택스헨들을위해사용 // **************************************************************************** LPDIRECTDRAWPALETTE LPPALETTEENTRY lpddpal; lppepalette; BOOL blsactive; HWND hwnd; HDC hdc; HINSTANCE g_hinstance; // *************************************************************************************** HWND g_hwndhelp = NULL; HWND g_hwnd_workdlg = NULL; // 작업메뉴다이얼박스 // *************************************************************************************** bool x_flag = TRUE; bool y_flag = TRUE; // ************************************************************************************** long FAR PASCAL WindowProc( HWND hwnd, UINT message,wparam wparam, LPARAM lparam ); // ************************************************************************************** BOOL DDInitGame(HINSTANCE hinstance, int ncmdshow); int DDInitWindowed(void); int DDInitFullScreen(void); int GetSurfaceType(void); void DDEndGame(); void DDUpdateFrame();

8 HRESULT UpdateBounds(void); // ************************************************************************************** // 화면프레임수를출력한다. HRESULT DisplayFrameRate(void); // ************************************************************************************** // 1번대화상자입력처리 LRESULT CALLBACK Dial_MainMenu_Proc(HWND hdlg, UINT umsg, WPARAM wparam, LPARAM lparam); // 2번대화상자입력처리 LRESULT CALLBACK Dial_SubMenu_Proc(HWND hdlg, UINT umsg, WPARAM wparam, LPARAM lparam); // ************************************************************************************** // 폰트출력용함수 void PutString(HDC hdc,int x,int y,colorref cb,colorref ct,char *string); // ************************************************************************************** // 다이렉트 16비트표면생성함수 LPDIRECTDRAWSURFACE7 CreateSurface16(long s_width, long s_height, int red,int green,int blue); // 다이렉트표면을만들어서그표면에 (800*600) BMP IMAGE만로드 LPDIRECTDRAWSURFACE7 LoadBMP_800_600_16(LPSTR szfilename); // 현재만들어져있는다이렉트표면에비트맵이미지를읽어온다. bool GetBMP_800_600_16(LPDIRECTDRAWSURFACE7 w_surface,lpstr szfilename); // ************************************************************************************** fswexam.cpp // 예제프로그램소스 #include "fswexam.h" // ************************************************************************************** // 윈도우메인함수 - 프로그램이제일처음시작되는곳 // ************************************************************************************** int PASCAL WinMain( HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int ncmdshow ) MSG msg; WNDCLASS wc;

9 // 윈도우스타일결정 DWORD ExWinStyle, WinStyle; HANDLE hproc; wc.lpszclassname= "FSWINDOW EXAM"; wc.hinstance = hinstance; wc.lpfnwndproc = WindowProc; wc.style = CS_HREDRAW CS_VREDRAW; wc.cbclsextra = 0; wc.cbwndextra = 0; wc.hicon = LoadIcon (NULL,IDI_APPLICATION); wc.hcursor = LoadCursor (NULL,IDC_ARROW); wc.hbrbackground = (HBRUSH) GetStockObject(BLACK_BRUSH); wc.lpszmenuname = NULL; RegisterClass (&wc); #ifdef _DEBUG ExWinStyle = NULL; WinStyle = WS_OVERLAPPEDWINDOW & ~WS_CAPTION & ~WS_MAXIMIZEBOX & ~WS_SYSMENU; // [ 창크기계산 ] DWORD dwframewidth = GetSystemMetrics( SM_CXSIZEFRAME ); // 창프레임넙이 DWORD dwframeheight = GetSystemMetrics( SM_CYSIZEFRAME ); // 창프레이높이 DWORD dwmenuheight = 0; // GetSystemMetrics( SM_CYMENU ); // 메뉴높이 DWORD dwcaptionheight = GetSystemMetrics( SM_CYCAPTION ); // 창타이틀창높이 DWORD dwwindowwidth = dwframewidth * 2; // 양쪽프레임이니까 * 2 DWORD dwwindowheight = dwframeheight * 2 + dwcaptionheight; #else ExWinStyle = WS_EX_TOPMOST; WinStyle = WS_POPUP; // [ 창크기계산 ] DWORD dwframewidth = 0; // 창프레임넙이 DWORD dwframeheight = 0; // 창프레이높이 DWORD dwmenuheight = 0; // 메뉴높이 DWORD dwcaptionheight = 0; // 창타이틀창높이 DWORD dwwindowwidth = 800; // 양쪽프레임이니까 * 2 DWORD dwwindowheight = 600;

10 #endif hwnd = CreateWindowEx( ExWinStyle, // 창의확장된스타일지정 "FSWINDOW EXAM", // 클래스이름 "FSWINDOW EXAM", // 창이름 WinStyle, // 창의형태결정 CW_USEDEFAULT, // 창의수평위치 CW_USEDEFAULT, // 창의수직위치 dwwindowwidth, // 창의폭 dwwindowheight, // 창이높이 NULL, // 이창은父창이없음 NULL, // 메뉴는없음 hinstance, // 이인스턴스가이창을소유 NULL); // 포인터는필요없음 if(!hwnd) return FALSE; #ifdef _DEBUG // ******************************************************************************************** // 윈도우를화면정중앙에띄우자 GetWindowRect( hwnd, &g_rcwindow ); iwidth = g_rcwindow.right - g_rcwindow.left; iheight = g_rcwindow.bottom - g_rcwindow.top; ix = LONG((GetSystemMetrics(SM_CXSCREEN) - iwidth)/2); iy = LONG((GetSystemMetrics(SM_CYSCREEN) - iheight)/2); MoveWindow(hWnd,iX,iY,iWidth,iHeight,TRUE); // ******************************************************************************************** #endif ShowCursor(TRUE); ShowWindow (hwnd,ncmdshow); UpdateWindow (hwnd); // 현재프로그램의우선순위를높인다. -_-;; // 해보니까 5프레임정도빨라짐 hproc = GetCurrentProcess(); #ifdef _DEBUG SetPriorityClass (hproc, NORMAL_PRIORITY_CLASS); #else SetPriorityClass (hproc, HIGH_PRIORITY_CLASS); #endif

11 //********************************************************************************************* // 다이렉트드로우오브젝트생성 if(!ddinitgame(hinstance,ncmdshow)) PostQuitMessage(0); //******************************************************************************************** //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // 다이렉트드로우화면에대화상자사용을위한초기화작업 FSWindow_Init(hWnd, lpdd7, lpddsprimary, lpddsback); //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> //********************************************************************************************* // 다이얼박스를생성한다. g_hwnd_workdlg = CreateDialog(g_hInstance, MAKEINTRESOURCE(IDD_MAINMENU), hwnd, (DLGPROC) Dial_MainMenu_Proc); // 창이위치를변경한다. SetWindowPos(g_hWnd_WorkDlg,HWND_TOP,g_rcWindow.left+550,g_rcWindow.top+10,0,0,SWP_NOSIZE); ShowWindow(g_hWnd_WorkDlg, SW_SHOWNORMAL); //********************************************************************************************* //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // fswindow 시작 g_hwndhelp = FSWindow_Begin(g_hWnd_WorkDlg, FALSE); //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> //********************************************************************************************* #ifdef NDEBUG // 디버깅모드가아닌경우에실행할것들은여기에... #endif while( 1 ) if( PeekMessage( &msg, NULL, 0, 0, PM_NOREMOVE ) ) if(!getmessage( &msg, NULL, 0, 0 ) ) return msg.wparam; //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // 대화상자가보여지면, 모달리스대화상자를위해서메시지를교환시킨다.

12 if (g_hwnd_workdlg == (HWND )NULL!IsDialogMessage(g_hWnd_WorkDlg, &msg)) // Translate and dispatch the message TranslateMessage(&msg); DispatchMessage(&msg); // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> else if(blsactive) DDUpdateFrame(); else WaitMessage(); return 1; //********************************************************************************************* // 목적 : 게임초기화 //********************************************************************************************* BOOL DDInitGame(HINSTANCE hinstance, int ncmdshow) int e_v=0; // 에러값을가지고종료루틴을다르게처리한다. // 로드시오류가없는경우 0으로처리 #ifdef _DEBUG e_v = DDInitWindowed(); if(e_v!= 0) goto InitERROR; #else e_v = DDInitFullScreen(); if(e_v!= 0) goto InitERROR; #endif

13 //********************** // first load bmp image //********************** //3차표면만들기 lpddswork = CreateSurface16(800,600,0,0,0); // 배경이미지저장표면 lpddsbmp = LoadBMP_800_600_16("banner.bmp"); if(lpddsbmp == NULL) e_v=8; MessageBox(hWnd," 비트맵읽기오류 "," 게임실행오류 ",MB_OK); goto InitERROR; lpddswork->bltfast(0,0,lpddsbmp,&g_rcscreen,false); return TRUE; InitERROR : DDEndGame(); PostQuitMessage(0); return FALSE; //********************************************************************************************** // 목적 : 창모드로윈도우초기화 //********************************************************************************************** int DDInitWindowed(void) DDSURFACEDESC2 ddsd; HRESULT ddrval; LPDIRECTDRAWCLIPPER pcclipper; ddrval = DirectDrawCreateEx(NULL,(VOID**)&lpDD7,IID_IDirectDraw7,NULL); if(ddrval!= DD_OK) return 1;

14 ddrval = lpdd7->setcooperativelevel(hwnd,ddscl_normal); if(ddrval!= DD_OK) return 2; // Create the primary surface ZeroMemory( &ddsd, sizeof( ddsd ) ); ddsd.dwsize = sizeof( ddsd ); ddsd.dwflags = DDSD_CAPS; ddsd.ddscaps.dwcaps = DDSCAPS_PRIMARYSURFACE; ddrval = lpdd7->createsurface( &ddsd, &lpddsprimary, NULL ); if(ddrval!= DD_OK) MessageBox(hWnd," 다이렉트드로우 1차버퍼생성실패 "," 게임실행오류 ",MB_OK); return 4; // 에러리턴 // Create the backbuffer surface ddsd.dwflags = DDSD_CAPS DDSD_WIDTH DDSD_HEIGHT; ddsd.ddscaps.dwcaps = DDSCAPS_OFFSCREENPLAIN DDSCAPS_3DDEVICE; ddsd.dwwidth = 800; ddsd.dwheight = 600; ddrval = lpdd7->createsurface( &ddsd, &lpddsback, NULL ); if(ddrval!= DD_OK) MessageBox(hWnd," 다이렉트드로우 2차버퍼생성실패 "," 게임실행오류 ",MB_OK); return 5; ddrval = lpdd7->createclipper( 0, &pcclipper, NULL ); if(ddrval!= DD_OK) MessageBox(hWnd," 다이렉트드로우클리퍼생성실패 "," 게임실행오류 ",MB_OK); return 6;

15 ddrval = pcclipper->sethwnd( 0, hwnd ); if(ddrval!= DD_OK) pcclipper->release(); MessageBox(hWnd," 다이렉트드로우클리퍼설정실패 "," 게임실행오류 ",MB_OK); return 7; ddrval = lpddsprimary->setclipper( pcclipper ); if(ddrval!= DD_OK) pcclipper->release(); MessageBox(hWnd,"1차버퍼에클리퍼지정실패 "," 게임실행오류 ",MB_OK); return 8; // Done with clipper pcclipper->release(); UpdateBounds(); // 픽셀포맷설정 switch (GetSurfaceType()) // 전역변수값을변경한다. case 3: BMP_STYLE_565 = TRUE; case 4: BMP_STYLE_565 = FALSE; default: // 현재게임화면은 16비트컬러의경우에만처리한다, // 다른화면색상모드에대해서는에러처리한다. MessageBox(hWnd," 윈도우화면색상을하이컬러 [16비트색상 ] 으로맞춘후에 n다시실행해주시기바람니다!"," 게임실행오류 ",MB_OK); return 9; ;

16 return 0; // int DDInitWindowed(void) //********************************************************************************************** // 목적 : 화면컬러모드설정 //********************************************************************************************** int GetSurfaceType(void) DDSURFACEDESC2 dddesc = sizeof(dddesc) ; dddesc.ddscaps.dwcaps = DDSD_PIXELFORMAT; HRESULT ddrval; // 화면의 Device를잃었을때의처리부분 ddrval = lpddsback->getsurfacedesc(&dddesc); if(ddrval!= DD_OK) return 0; int nbpp = dddesc.ddpfpixelformat.dwrgbbitcount; DWORD DWORD DWORD RMask = dddesc.ddpfpixelformat.dwrbitmask; GMask = dddesc.ddpfpixelformat.dwgbitmask; BMask = dddesc.ddpfpixelformat.dwbbitmask; int m_colormode = -1;// 화면모드 switch (nbpp) case 8: m_colormode = 2; case 16: if (RMask == 0xf800 && GMask == 0x07e0 && BMask == 0x001f) m_colormode = 3;

17 // RGB565 else if(rmask == 0x7c00 && GMask == 0x03e0 && BMask == 0x001f) m_colormode = 4; // RGB555 else m_colormode = -1; // error case 24: if(rmask == 0xff0000 && GMask == 0xff00 && BMask == 0xff) m_colormode = 5; // RGB888 else if(rmask == 0xff && GMask == 0xff00 && BMask == 0xff0000) m_colormode = 6; // BGR888 else m_colormode = -1; // error case 32: if(rmask == 0xff0000 && GMask == 0xff00 && BMask == 0xff) m_colormode = 7; // XRGB888 else if(rmask == 0xff && GMask == 0xff00 && BMask == 0xff0000) m_colormode = 8; // XBGR888 else m_colormode = -1; // error default: m_colormode = -1; // error return m_colormode; //********************************************************************************************** // 목적 : 풀화면모드로초기화 //********************************************************************************************** int DDInitFullScreen(void) DDSURFACEDESC2 ddsd; DDSCAPS2 ddscaps; HRESULT ddrval; ddrval = DirectDrawCreateEx(NULL,(VOID**)&lpDD7,IID_IDirectDraw7,NULL); if(ddrval!= DD_OK) return 1;

18 ddrval = lpdd7->setcooperativelevel(hwnd,ddscl_exclusive DDSCL_FULLSCREEN); if(ddrval!= DD_OK) return 2; ddrval = lpdd7->setdisplaymode(800,600,16,0,0); if(ddrval!= DD_OK) return 3; // ready for using backbuffer ZeroMemory(&ddsd, sizeof(ddsd)); ddsd.dwsize = sizeof(ddsd); ddsd.dwflags = DDSD_CAPS DDSD_BACKBUFFERCOUNT; ddsd.ddscaps.dwcaps = DDSCAPS_PRIMARYSURFACE DDSCAPS_FLIP DDSCAPS_COMPLEX DDSCAPS_3DDEVICE; ddsd.dwbackbuffercount = 1; ddrval = lpdd7->createsurface(&ddsd, &lpddsprimary, NULL); if(ddrval!= DD_OK) return 4; ZeroMemory(&ddscaps, sizeof(ddscaps)); ddscaps.dwcaps = DDSCAPS_BACKBUFFER; ddrval = lpddsprimary->getattachedsurface(&ddscaps,&lpddsback); if(ddrval!= DD_OK) return 5; // 픽셀포맷설정

19 switch (GetSurfaceType()) // 전역변수값을변경한다. case 3: BMP_STYLE_565 = TRUE; case 4: BMP_STYLE_565 = FALSE; default: ; return 0; UpdateBounds(); //********************************************************************************************** // 목적 : 창모드에서화면이동등의갱신이발생한경우처리 //********************************************************************************************** HRESULT UpdateBounds(void) #ifdef _DEBUG GetClientRect( hwnd, &g_rcwindow ); ClientToScreen( hwnd, (POINT*)&g_rcWindow ); ClientToScreen( hwnd, (POINT*)&g_rcWindow+1 ); // 이방식을포인트함수사용하지않고이용했다. //GetClientRect(hWnd, &rcdest); //ClientToScreen(hWnd, &pt); //OffsetRect(&rcDest, pt.x, pt.y); #else

20 SetRect(&g_rcWindow,0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN) ); #endif return S_OK; //********************************************************************************************** // 목적 : 게임종료시크리어 //********************************************************************************************** void DDEndGame(void) if(lpdd7!= NULL) if(lpddsprimary!= NULL) lpddsprimary->release(); lpddsprimary = NULL; lpdd7->release(); lpdd7 = NULL; //********************************************************************************************** // 목적 : 화면관련업데이트를해주는부분 //********************************************************************************************** void DDUpdateFrame() HRESULT ddrval; // 작업표면에출력 lpddswork->bltfast(0,0,lpddsbmp,&g_rcscreen,false); // 대부분의그래픽작업은여기서다수행한다. // ********************************************************************************** // 2차표면에작업표면을출력한다.

21 lpddsback->bltfast(0,0,lpddswork,&g_rcscreen,false); // ********************************************************************************** DisplayFrameRate(); // 현재프레임수를출력한다. // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // 윈도우창과함께사용할경우에는다음과같이출력부를맞추어주어야한다. if (FSWindow_IsActive()) FSWindow_Update(); else // 에디터모드에서는 Blt 방식만을이용한다. ddrval = lpddsprimary->blt(&g_rcwindow, lpddsback, NULL, DDBLT_WAIT, NULL); /* #ifdef _DEBUG ddrval = lpddsprimary->blt(&g_rcwindow, lpddsback, NULL, DDBLT_WAIT, NULL); #else ddrval = lpddsprimary->bltfast(0,0,lpddsback,&g_rcwindow,ddbltfast_nocolorkey); if(ddrval == DD_OK) return; #endif */ // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> if(ddrval == DDERR_SURFACELOST) ddrval = lpddsprimary->restore(); if(ddrval!= DD_OK) MessageBox(hWnd,"lpDDSPrimary->Restore() failed!!!",null,mb_ok); return; //end FSWindow

22 //********************************************************************************************** // 목적 : 윈도우프로시져 - 메시지를받아처리한다. //********************************************************************************************** long FAR PASCAL WindowProc( HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam ) switch( message ) case WM_MOVE: // Retrieve the window position after a move. // [ 이동후에창의위치구하기 ] if( lpdd7 ) UpdateBounds(); return 0L; case WM_SIZE: if( lpdd7 ) UpdateBounds(); case WM_GETMINMAXINFO: // Don't allow resizing in windowed mode. // [ 창의크기를조절하는것을막는다.] // Fix the size of the window to 640x480 (client size) // [ 창의크기는지정한크기로유지 ] MINMAXINFO* pminmax = (MINMAXINFO*) lparam; DWORD dwframewidth = GetSystemMetrics( SM_CXSIZEFRAME ); DWORD dwframeheight = GetSystemMetrics( SM_CYSIZEFRAME ); DWORD dwmenuheight = GetSystemMetrics( SM_CYMENU ); DWORD dwcaptionheight = GetSystemMetrics( SM_CYCAPTION ); pminmax->ptmintracksize.x = dwframewidth * 2;

23 pminmax->ptmintracksize.y = dwframeheight* dwcaptionheight; pminmax->ptmaxtracksize.x = pminmax->ptmintracksize.x; pminmax->ptmaxtracksize.y = pminmax->ptmintracksize.y; return 0L; case WM_MOUSEMOVE: mouse_x = LOWORD(lParam); mouse_y = HIWORD(lParam); case WM_LBUTTONDOWN: case WM_RBUTTONDOWN: case WM_KEYDOWN: switch( wparam ) case VK_SPACE: if(g_hwnd_workdlg == NULL) // 작업메뉴를생성한다. // 대화상자새로생성 g_hwnd_workdlg = CreateDialog(g_hInstance, MAKEINTRESOURCE(IDD_MAINMENU), hwnd, (DLGPROC) Dial_MainMenu_Proc); // 창이위치를변경한다. SetWindowPos(g_hWnd_WorkDlg,HWND_TOP, g_rcwindow.left+550,g_rcwindow.top+10,0,0,swp_nosize); ShowWindow(g_hWnd_WorkDlg, SW_SHOWNORMAL); // fswindow 시작 g_hwndhelp = FSWindow_Begin(g_hWnd_WorkDlg, FALSE); case VK_ESCAPE: case VK_F12: // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // 대화상자닫기 EndDialog(g_hWnd_WorkDlg, TRUE); FSWindow_End();

24 g_hwnd_workdlg = (HWND)NULL; // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // 메인윈도우종료 PostMessage( hwnd, WM_CLOSE, 0, 0 ); case WM_ACTIVATEAPP: blsactive = (BOOL)wParam; if(blsactive) if(lpddsprimary!= NULL && lpddsprimary->islost() == DDERR_SURFACELOST) lpddsprimary->restore(); case WM_SYSCOMMAND: // 풀화면모드에서이동, 사이징, 파워를잃는것을막는다. switch( wparam ) case SC_MOVE: case SC_SIZE: case SC_MAXIMIZE: case SC_MONITORPOWER: blsactive = TRUE; return TRUE; case WM_SETCURSOR: SetCursor(NULL); case WM_DESTROY: blsactive = FALSE; DDEndGame(); PostQuitMessage( 0 );

25 return DefWindowProc( hwnd, message, wparam, lparam ); // ************************************************************************************** // 목적 : 화면에현재의초당스레임수를나타낸다. // ************************************************************************************** HRESULT DisplayFrameRate(void) dwframecount++; dwtime=timegettime() - dwframetime; if(dwtime > 1000) //1초안에대한처리 dwframes = (dwframecount * 1000)/dwTime; dwframetime = timegettime(); dwframecount = 0; acc_count++; wsprintf(fr_buff," 현재게임프레임수 : %d 누적카운트 %d 0",dwFrames,acc_count); if(lpddsback->getdc(&g_hdc) == DD_OK) PutString(g_hdc,11,1,RGB(0,0,0),RGB(0,0,0),FR_buff); PutString(g_hdc,10,0,RGB(0,0,0),RGB(255,255,255),FR_buff); lpddsback->releasedc(g_hdc); return S_OK; /* DisplayFrameRate */ // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> //*************************************************************************************** // 목적 : 대화상자 1 로오는메시지를처리한다. //*************************************************************************************** LRESULT CALLBACK Dial_MainMenu_Proc(HWND hdlg, UINT umsg, WPARAM wparam, LPARAM lparam)

26 switch (umsg) case WM_INITDIALOG: // 처음대화상자가생성될때초기화할것은여기에... return TRUE; case WM_COMMAND: switch(loword(wparam)) case IDC_BUTTON_MOVE2: //2번대화상자로이동 // 대화상자제거 EndDialog(hDlg, TRUE); FSWindow_End(); g_hwnd_workdlg = (HWND)NULL; // 대화상자 2 생성 g_hwnd_workdlg = CreateDialog(g_hInstance, MAKEINTRESOURCE(IDD_SUBMENU), hwnd, (DLGPROC) Dial_SubMenu_Proc); // 창이위치를변경한다. SetWindowPos(g_hWnd_WorkDlg,HWND_TOP,g_rcWindow.left+550, g_rcwindow.top+10,0,0,swp_nosize); ShowWindow(g_hWnd_WorkDlg, SW_SHOWNORMAL); // fswindow 시작 g_hwndhelp = FSWindow_Begin(g_hWnd_WorkDlg, FALSE); case IDC_BUTTON_OUT: // 대화상자감추기 EndDialog(hDlg, TRUE); FSWindow_End(); g_hwnd_workdlg = (HWND)NULL; case IDC_EXIT:

27 if(messagebox(g_hwnd_workdlg, " 프로그램을종료할까요?"," 확인 ",MB_YESNO) == IDYES) EndDialog(g_hWnd_WorkDlg, TRUE); FSWindow_End(); g_hwnd_workdlg = (HWND)NULL; PostMessage(hWnd, WM_CLOSE, 0, 0 ); case WM_CLOSE: if(messagebox(g_hwnd_workdlg," 프로그램을종료할까요?", " 확인 ",MB_YESNO) == IDYES) EndDialog(g_hWnd_WorkDlg, TRUE); FSWindow_End(); g_hwnd_workdlg = (HWND)NULL; PostMessage(hWnd, WM_CLOSE, 0, 0 ); return FALSE; // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> //*************************************************************************************** // 목적 : 대화상자 2 로오는메시지를처리한다. //*************************************************************************************** LRESULT CALLBACK Dial_SubMenu_Proc(HWND hdlg, UINT umsg, WPARAM wparam, LPARAM lparam) switch (umsg) case WM_INITDIALOG: // 처음대화상자가생성될때초기화할것은여기에... return TRUE;

28 case WM_COMMAND: switch(loword(wparam)) case IDC_BUTTON_MOVE1: //2번대화상자를제거 EndDialog(hDlg, TRUE); FSWindow_End(); g_hwnd_workdlg = (HWND)NULL; //1번대화상자를만든다. // 대화상자새로생성 g_hwnd_workdlg = CreateDialog(g_hInstance, MAKEINTRESOURCE(IDD_MAINMENU), hwnd, (DLGPROC) Dial_MainMenu_Proc); // 창이위치를변경한다. SetWindowPos(g_hWnd_WorkDlg,HWND_TOP,g_rcWindow.left+550, g_rcwindow.top+10,0,0,swp_nosize); ShowWindow(g_hWnd_WorkDlg, SW_SHOWNORMAL); // fswindow 시작 g_hwndhelp = FSWindow_Begin(g_hWnd_WorkDlg, FALSE); return FALSE; // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // 문자열출력용함수 void PutString(HDC hdc,int x,int y,colorref cb,colorref ct,char *string) SetBkMode(hdc,TRANSPARENT); SetBkColor(hdc,cb); SetTextColor(hdc,ct); TextOut(hdc,x,y,string,strlen(string));

29 // ************************************************************************************** // 16비트다이렉트표면을만든다. LPDIRECTDRAWSURFACE7 CreateSurface16(long s_width, long s_height, int red,int green,int blue) DDSURFACEDESC2 ddsd; LPDIRECTDRAWSURFACE7 lpdds; unsigned short *lpvideo; unsigned short pixel = 0; int DS_lPitch = 0; // create ddsurface ZeroMemory(&ddsd,sizeof(ddsd)); ddsd.dwsize = sizeof(ddsd); ddsd.dwflags = DDSD_CAPS DDSD_HEIGHT DDSD_WIDTH; ddsd.ddscaps.dwcaps = DDSCAPS_OFFSCREENPLAIN DDSCAPS_SYSTEMMEMORY; ddsd.dwwidth = s_width; ddsd.dwheight = s_height; if(lpdd7->createsurface(&ddsd, &lpdds, NULL)!= DD_OK) return NULL; ddsd.dwsize = sizeof(ddsd); lpdds->lock(null,&ddsd,ddlock_wait DDLOCK_SURFACEMEMORYPTR,NULL); lpvideo = (unsigned short *)ddsd.lpsurface; lpdds->unlock(null); // 비디오카드마다다른포맷을가진다. if(bmp_style_565) pixel = _RGB16BIT565(red,green,blue); else pixel = _RGB16BIT555(red,green,blue); for(int y = 0; y<s_height; y++) DS_lPitch = (ddsd.lpitch/2)*y;

30 for(int x = 0; x<s_width; x++) lpvideo[ds_lpitch+x] = pixel; return lpdds; // **************************************************************************** // 비트맵화일을로드해서표면에기록한다. // **************************************************************************** LPDIRECTDRAWSURFACE7 LoadBMP_800_600_16(LPSTR szfilename) FILE *fp; int red,green,blue; // 화일헨들 int line_x; int line_y; BITMAPFILEHEADER bitmapfileheader; // this contains the bitmapfile header BITMAPINFOHEADER bitmapinfoheader; // this is all the info including the palette DDSURFACEDESC2 ddsd; LPDIRECTDRAWSURFACE7 lpdsbmp; unsigned short *lpvideo; unsigned short *Cur_lpVideo; // 화일을연다 if(null == (fp=fopen(szfilename,"rb"))) return NULL; //bitmap file header 읽기 if(fread(&bitmapfileheader,sizeof(bitmapfileheader),1,fp) == -1) return NULL; //bitmap file 인지확인 if (bitmapfileheader.bftype!=bitmap_id) // 화일닫기 fclose(fp); // 비트맵화일이아님 NULL을리턴 return(null); // end if

31 // the bitmap infoheader 를읽는다. if(fread(&bitmapinfoheader,sizeof(bitmapinfoheader),1,fp) == -1) return NULL; // 256컬러모드일경우팔레트를로드한다. if (bitmapinfoheader.bibitcount == 8) // 화일닫기 fclose(fp); return NULL; // end if ZeroMemory(&ddsd,sizeof(ddsd)); ddsd.dwsize = sizeof(ddsd); ddsd.dwflags = DDSD_CAPS DDSD_HEIGHT DDSD_WIDTH; ddsd.ddscaps.dwcaps = DDSCAPS_OFFSCREENPLAIN DDSCAPS_SYSTEMMEMORY; ddsd.dwwidth = 800; ddsd.dwheight = 600; if(lpdd7->createsurface(&ddsd, &lpdsbmp, NULL)!= DD_OK) return NULL; ddsd.dwsize = sizeof(ddsd); lpdsbmp->lock(null,&ddsd,ddlock_wait DDLOCK_SURFACEMEMORYPTR,NULL); lpvideo = (unsigned short *)ddsd.lpsurface; if (bitmapinfoheader.bibitcount==8 bitmapinfoheader.bibitcount==16 bitmapinfoheader.bibitcount==24) // 마지막라인주소를계산한다. Cur_lpVideo = &lpvideo[599*800]; // 라인단위로역으로기록한다. for(line_y=0; line_y < 600 ; line_y++) if(bmp_style_565) for(line_x = 0; line_x < 800; line_x++) red = fgetc(fp);

32 green = fgetc(fp); blue = fgetc(fp); *Cur_lpVideo = _RGB16BIT565(blue,green,red); Cur_lpVideo++; else for(line_x = 0; line_x < 800; line_x++) red = fgetc(fp); green = fgetc(fp); blue = fgetc(fp); *Cur_lpVideo = _RGB16BIT555(blue,green,red); Cur_lpVideo++; // 다음시작주소를계산한다. Cur_lpVideo = &lpvideo[(598-line_y)*800]; //end for // end if else fclose(fp); return NULL; // end else lpdsbmp->unlock(null); // close the file fclose(fp); // return success return(lpdsbmp);

33 // **************************************************************************** // // 24비트 800*600의비트맵화일을지정된 16비트컬러로다이렉트표면에기록한다. // // **************************************************************************** // 작업페이지 bool GetBMP_800_600_16(LPDIRECTDRAWSURFACE7 w_surface,lpstr szfilename) FILE *fp; int red,green,blue; // 화일헨들 int line_x; int line_y; BITMAPFILEHEADER bitmapfileheader; // this contains the bitmapfile header BITMAPINFOHEADER bitmapinfoheader; // this is all the info including the palette DDSURFACEDESC2 ddsd; unsigned short *lpvideo; unsigned short *Cur_lpVideo; // 화일을연다 if(null == (fp=fopen(szfilename,"rb"))) return false; //bitmap file header 읽기 if(fread(&bitmapfileheader,sizeof(bitmapfileheader),1,fp) == -1) return false; //bitmap file 인지확인 if (bitmapfileheader.bftype!=bitmap_id) // 화일닫기 fclose(fp); // 비트맵화일이아님 NULL을리턴 return(false); // end if // the bitmap infoheader 를읽는다. if(fread(&bitmapinfoheader,sizeof(bitmapinfoheader),1,fp) == -1)

34 fclose(fp); return false; // 256컬러모드일경우처리하지않는다. if (bitmapinfoheader.bibitcount == 8) fclose(fp); return false; ddsd.dwsize = sizeof(ddsd); //bmp를읽어올표면에락을건다. w_surface->lock(null,&ddsd,ddlock_wait DDLOCK_SURFACEMEMORYPTR,NULL); lpvideo = (unsigned short *)ddsd.lpsurface; // 시작주소 if (bitmapinfoheader.bibitcount==8 bitmapinfoheader.bibitcount==16 bitmapinfoheader.bibitcount==24) // 마지막라인주소를계산한다. Cur_lpVideo = &lpvideo[599*800]; // 라인단위로역으로기록한다. for(line_y=0; line_y < 600 ; line_y++) if(bmp_style_565) for(line_x = 0; line_x < 800; line_x++) red = fgetc(fp); green = fgetc(fp); blue = fgetc(fp); *Cur_lpVideo = _RGB16BIT565(blue,green,red); Cur_lpVideo++;

35 else for(line_x = 0; line_x < 800; line_x++) red = fgetc(fp); green = fgetc(fp); blue = fgetc(fp); *Cur_lpVideo = _RGB16BIT555(blue,green,red); Cur_lpVideo++; // 다음시작주소를계산한다. Cur_lpVideo = &lpvideo[(598-line_y)*800]; //end for // end if else fclose(fp); return false; // end else w_surface->unlock(null); // close the file fclose(fp); // return success return true; 샘플코드는 KGDA 프로그램자료실에올리겠습니다. 오타, 누락, 기타궁금한사항은 dongcm@chol.com으로해주시기바람니다.

Microsoft PowerPoint - 04windows.ppt

Microsoft PowerPoint - 04windows.ppt Game Programming I Windows 프로그래밍 (1) March 27, 2006 목표 윈도우프로그래밍에서이용되는이벤트구동프로그래밍모델의이해 Direct3D 를이용하는윈도우어플리케이션의작성을위한최소한의코드이해 윈도우 (Win32) 어플리케이션 Direct3D API ( 어플리케이션프로그래밍인터페이스 ) 를이용하기위해필요 Win32 API 를이용해작성

More information

1장 윈도우 프로그래밍 들어가기

1장 윈도우 프로그래밍 들어가기 1 장 윈도우프로그래밍들어가기 김성영교수 금오공과대학교 컴퓨터공학부 예제 다음프로그램은언제종료할까? #include #define QUIT -1 int Func(void) int i; cout > i; return i; void main(void) int Sum = 0, i; cout

More information

3D Game Programming Note

3D Game Programming Note 2D Game Programming 한국산업기술대학교 게임공학과 정내훈 개요 표면 표시가능한메모리 팔레트 DirectDraw 로그리기 2 표면 (Surface) 정의 : 실제그래픽이그려지는장소 모니터로나오는것은주표면하나뿐 위치 : 메모리영역 한프로그램에서여러개의표면을다룰수있다. 주표면 비디오스크린자체 3 표면 (Surface) 메모리 표면 메인메모리 표면 표면

More information

윈도우 프로그래밍

윈도우 프로그래밍 Windows Programming 2013. 3 출처 : 인터넷에서수집한 PT 자료 1. Overview Getting Started (1) 관련도서 Visual C++/API 프로젝트따라하기, 오진환, 컴스페이스 Programming Windows, Charles Petzold, Microsoft Press Windows application Programming

More information

<4D F736F F F696E74202D203031C0E520C0A9B5B5BFEC20C7C1B7CEB1D7B7A1B9D620B1E2C3CA5FBFB5B3B2C0CCB0F8B4EB205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D203031C0E520C0A9B5B5BFEC20C7C1B7CEB1D7B7A1B9D620B1E2C3CA5FBFB5B3B2C0CCB0F8B4EB205BC8A3C8AF20B8F0B5E55D> 01 : 윈도우프로그래밍기초 학습목표 윈도우운영체제와윈도우응용프로그램의특징을이해한다. SDK 응용프로그램작성과정, 기본구조, 동작원리를이해한다. MFC 응용프로그램작성과정, 기본구조, 동작원리를이해한다. 비주얼 C++ 개발환경사용법을익힌다. 윈도우운영체제특징 (1/3) 그래픽사용자인터페이스 1 윈도우운영체제특징 (2/3) 메시지구동구조 이벤트발생... 대기

More information

MFC 프로그래밍

MFC 프로그래밍 윈도우프로그래밍 Visual C++ 2010 MFC Programming 1 장. 윈도우프로그래밍기초 윈도우운영체제의특징 그래픽사용자인터페이스 시스템메뉴타이틀바메뉴최소 / 최대 / 닫기버튼 툴바 대화상자 클라이언트영역 상태표시줄 스크롤바 윈도우운영체제의특징 메시지구동구조 윈도우운영체제의특징 멀티태스킹과멀티스레딩 멀티태스킹 (Multitasking) 운영체제가여러개의응용프로그램을동시에실행

More information

Microsoft PowerPoint - 09-CE-5-윈도우 핸들

Microsoft PowerPoint - 09-CE-5-윈도우 핸들 순천향대학교컴퓨터학부이상정 1 학습내용 윈도우핸들 윈도우찿기 윈도우확인및제거 윈도우숨기기 윈도우포커스 윈도우텍스트 윈도우핸들 순천향대학교컴퓨터학부이상정 3 핸들 (handle) 윈도우에서구체적인어떤대상을구분하기위해지정되는고유의번호 32비트의정수값 핸들은운영체제가발급하고사용자가이값을사용 실제값이무엇인지는몰라도상관없음 윈도우, DC, 브러쉬등등 순천향대학교컴퓨터학부이상정

More information

BMP 파일 처리

BMP 파일 처리 BMP 파일처리 김성영교수 금오공과대학교 컴퓨터공학과 학습내용 영상반전프로그램제작 2 Inverting images out = 255 - in 3 /* 이프로그램은 8bit gray-scale 영상을입력으로사용하여반전한후동일포맷의영상으로저장한다. */ #include #include #define WIDTHBYTES(bytes)

More information

K&R2 Reference Manual 번역본

K&R2 Reference Manual 번역본 typewriter structunion struct union if-else if if else if if else if if if if else else ; auto register static extern typedef void char short int long float double signed unsigned const volatile { } struct

More information

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD> 2006 년 2 학기윈도우게임프로그래밍 제 8 강프레임속도의조절 이대현 한국산업기술대학교 오늘의학습내용 프레임속도의조절 30fps 맞추기 스프라이트프레임속도의조절 프레임속도 (Frame Rate) 프레임속도란? 얼마나빨리프레임 ( 일반적으로하나의완성된화면 ) 을만들어낼수있는지를나타내는척도 일반적으로초당프레임출력횟수를많이사용한다. FPS(Frame Per Sec)

More information

윈도우즈 프로그래밍

윈도우즈 프로그래밍 윈도우프로그래밍및실습 002. 윈도우프로그래밍의기본 DB & MINING LAB. Korea University since 2007. 09. 03 updated 2012. 08. 18 last updated 2015. 08. 25 이종욱 eastwest9@korea.ac.kr 1 Purpose of this chapter What is a Window programming

More information

04장 메시지 처리 유형

04장 메시지 처리 유형 4 장 메시지처리유형 김성영교수 금오공과대학교 컴퓨터공학부 메시지처리유형 윈도우에서발생하는이벤트에대응하는윈도우메시지를처리 2 장및 3 장의실습예제 자식윈도우에서발생한이벤트를부모윈도우에서처리 WM_COMMAND 메시지처리 실습 4.2 자식윈도우에서발생한사건유형을구분하여처리 Notification code 처리 실습 4.7 Notification code 의한계를극복하여처리

More information

Microsoft PowerPoint - hci2-lecture1.ppt

Microsoft PowerPoint - hci2-lecture1.ppt Overview 윈도우프로그래밍기초 윈도우운영체제와윈도우응용프로그램의특징이해 SDK 응용프로그램작성과정, 기본구조, 동작원리이해 MFC 응용프로그램작성과정, 기본구조, 동작원리이해 HCI Programming 2 (321190) 2008년가을학기 9/16/2008 박경신 2 Windows.NET 구조적프로그램에서객체지향프로그램으로 SDK(Software Development

More information

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx #include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의

More information

슬라이드 1

슬라이드 1 2007 년 2 학기윈도우게임프로그래밍 제 7 강프레임속도의조절 이대현 핚국산업기술대학교 학습내용 프레임속도의조절 30fps 맞추기 스프라이트프레임속도의조절 프레임속도 (Frame Rate) 프레임속도란? 얼마나빨리프레임 ( 일반적으로하나의완성된화면 ) 을만들어낼수있는지를나타내는척도 일반적으로초당프레임출력횟수를많이사용핚다. FPS(Frame Per Sec)

More information

Microsoft PowerPoint - hci2-lecture1.ppt

Microsoft PowerPoint - hci2-lecture1.ppt Overview 윈도우프로그래밍기초 윈도우운영체제와윈도우응용프로그램의특징이해 SDK 응용프로그램작성과정, 기본구조, 동작원리이해 MFC 응용프로그램작성과정, 기본구조, 동작원리이해 HCI Programming 2 (321190) 2007년가을학기 9/13/2007 박경신 2 윈도우운영체제특징 그래픽사용자인터페이스 (Graphical User Interface,

More information

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D> 리눅스 오류처리하기 2007. 11. 28 안효창 라이브러리함수의오류번호얻기 errno 변수기능오류번호를저장한다. 기본형 extern int errno; 헤더파일 라이브러리함수호출에실패했을때함수예 정수값을반환하는함수 -1 반환 open 함수 포인터를반환하는함수 NULL 반환 fopen 함수 2 유닉스 / 리눅스 라이브러리함수의오류번호얻기 19-1

More information

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070> #include "stdafx.h" #include "Huffman.h" 1 /* 비트의부분을뽑아내는함수 */ unsigned HF::bits(unsigned x, int k, int j) return (x >> k) & ~(~0

More information

Microsoft PowerPoint - 09-CE-14-리스트콤보박스

Microsoft PowerPoint - 09-CE-14-리스트콤보박스 순천향대학교컴퓨터학부이상정 1 학습내용 리스트박스컨트롤 다이얼로그와리스트박스 콤보박스컨트롤 순천향대학교컴퓨터학부이상정 2 리스트박스컨트롤 순천향대학교컴퓨터학부이상정 3 리스트박스컨트롤 사용자가선택할수있는항목들을여러개나열해두고선택할수있는컨트롤 윈도우클래스의이름은 "listbox" 생성예 hlist=createwindow(l"listbox",null,ws_child

More information

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F > 10주차 문자 LCD 의인터페이스회로및구동함수 Next-Generation Networks Lab. 5. 16x2 CLCD 모듈 (HY-1602H-803) 그림 11-18 19 핀설명표 11-11 번호 분류 핀이름 레벨 (V) 기능 1 V SS or GND 0 GND 전원 2 V Power DD or V CC +5 CLCD 구동전원 3 V 0 - CLCD 명암조절

More information

슬라이드 1

슬라이드 1 BMP 파일구조 김성영교수 금오공과대학교 컴퓨터공학부 학습목표 BMP 파일의구조및그특징을설명할수있다. 파일헤더및비트맵정보헤더의주요필드를구분하고그역할을설명할수있다. C언어를사용하여 BMP 파일을처리할수있다. 2 BMP 파일구조 File Header (BITMAPFILEHEADER) Bitmap Info. Header (BITMAPINFOHEADER) Headers

More information

디지털영상처리3

디지털영상처리3 비트맵개요 BMP 파일의이해실제 BMP 파일의분석 BMP 파일을화면에출력 } 비트맵 (bitmap) 윈도우즈에서영상을표현하기위해사용되는윈도우즈 GDI(Graphic Device Interface) 오브젝트의하나 } 벡터그래픽 (vector graphics) 점, 선, 면등의기본적인그리기도구를이용하여그림을그리는방식 } 윈도우즈 GDI(Graphic Device

More information

12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont

12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont 12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다. 12.1 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont( in LPDIRECT3DDEVICE9 pdevice, in INT Height, in UINT

More information

Chapter 1. MFC 시작하기

Chapter 1.  MFC 시작하기 Chapter 1. MFC 시작하기 1. MFC(Microsoft Foundation Class) 개요 2. Visual Studio 2015 프로그램설치하기 3. 마우스클릭프로그램작성 4. 그림그리기프로그램작성 5. 마우스좌표값구하기프로그램작성 1 1.1. MFC 개요 2 1.1.1. C++ 언어 객체지향언어 (Object-Oriented Programming,

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Win32 API Windows Programming 1 http://idb.korea.ac.kr DB & Mining LAB. Korea Univ. 최종업데이트 : 2012. 08. 14 1 컴퓨터시스템의주요구성요소 2 2 컴퓨터하드웨어구성 Fetch : 메인메모리에저장되어있는명령어를 CPU 로 Decode : 컨트롤유닛에의해분석 Execution : ALU

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 실습 1 배효철 th1g@nate.com 1 목차 조건문 반복문 System.out 구구단 모양만들기 Up & Down 2 조건문 조건문의종류 If, switch If 문 조건식결과따라중괄호 { 블록을실행할지여부결정할때사용 조건식 true 또는 false값을산출할수있는연산식 boolean 변수 조건식이 true이면블록실행하고 false 이면블록실행하지않음 3

More information

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - chap06-2pointer.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.

More information

디지털영상처리3

디지털영상처리3 비트맵 BMP 파일의 실제 BMP 파일의 BMP 파일을 화면에 개요 이해 분석 출력 } 비트맵 (bitmap) 윈도우즈에서영상을표현하기위해사용되는윈도우즈 GDI(Graphic Device Interface) 오브젝트의하나 } 벡터그래픽 (vector graphics) 점, 선, 면등의기본적인그리기도구를이용하여그림을그리는방식 } 윈도우즈 GDI(Graphic

More information

Microsoft PowerPoint - chap01-C언어개요.pptx

Microsoft PowerPoint - chap01-C언어개요.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 프로그래밍의 기본 개념을

More information

2014 년정보보호졸업작품보고서 파일유출방지시스템 지도교수님 : 양환석교수님 팀명 : LKC Security 팀원 : 이호영, 김상우, 최유택 중부대학교정보보호학과

2014 년정보보호졸업작품보고서 파일유출방지시스템 지도교수님 : 양환석교수님 팀명 : LKC Security 팀원 : 이호영, 김상우, 최유택 중부대학교정보보호학과 2014 년정보보호졸업작품보고서 파일유출방지시스템 지도교수님 : 양환석교수님 팀명 : LKC Security 팀원 : 이호영, 김상우, 최유택 2014. 5 중부대학교정보보호학과 목 차 1. 프로젝트설명 1 2. 연구계획 1 2.1 연구목적 1 2.2 연구방법 2 2.3 연구개요 2 2.4 연구구성도 3 3. 연구프로그램구축 5 3.1 주요소스 5 3.2 실행결과

More information

슬라이드 1

슬라이드 1 -Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역

More information

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt 변수와상수 1 변수란무엇인가? 변수 : 정보 (data) 를저장하는컴퓨터내의특정위치 ( 임시저장공간 ) 메모리, register 메모리주소 101 번지 102 번지 변수의크기에따라 주로 byte 단위 메모리 2 기본적인변수형및변수의크기 변수의크기 해당컴퓨터에서는항상일정 컴퓨터마다다를수있음 short

More information

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074> Chap #2 펌웨어작성을위한 C 언어 I http://www.smartdisplay.co.kr 강의계획 Chap1. 강의계획및디지털논리이론 Chap2. 펌웨어작성을위한 C 언어 I Chap3. 펌웨어작성을위한 C 언어 II Chap4. AT89S52 메모리구조 Chap5. SD-52 보드구성과코드메모리프로그래밍방법 Chap6. 어드레스디코딩 ( 매핑 ) 과어셈블리어코딩방법

More information

예제와 함께 배워보는 OllyDbg사용법

예제와 함께 배워보는 OllyDbg사용법 초보자를위한예제와함께 배워보는 OllyDbg 사용법 -1 부 - By Beist Security Study Group (http://beist.org) 요약 : 이문서는 Ollydbg 프로그램을이용하여 Reverse Engineering을하는방법에대해서다룬다. 초보자를위하여작성된문서이며예제와함께 Ollydbg의각기능에대해서알아본다. 주로기초적인내용을다루고있다.

More information

Microsoft PowerPoint - CSharp-10-예외처리

Microsoft PowerPoint - CSharp-10-예외처리 10 장. 예외처리 예외처리개념 예외처리구문 사용자정의예외클래스와예외전파 순천향대학교컴퓨터학부이상정 1 예외처리개념 순천향대학교컴퓨터학부이상정 2 예외처리 오류 컴파일타임오류 (Compile-Time Error) 구문오류이기때문에컴파일러의구문오류메시지에의해쉽게교정 런타임오류 (Run-Time Error) 디버깅의절차를거치지않으면잡기어려운심각한오류 시스템에심각한문제를줄수도있다.

More information

<33372DC0A9B5B5BFECC7C1B7CEB1D7B7A1B9D62E687770>

<33372DC0A9B5B5BFECC7C1B7CEB1D7B7A1B9D62E687770> 2010 학년도동계 계절수업시험문제지 출제위원 방송대김강현 학과명학번 - 성 명 감독관확인 ( 인 ) 교과목명 교과목코드 윈도우프로그래밍 3 7 출제범위 교재전체 ( 해당강의포함 ) 문항수 50 문항 [50 문항 2 점 =100 점 ] 유의사항 1. OMR 답안지및문제지인적사항표기는반드시컴퓨터용사인펜으로할것 2. 표기한답안은정정이일절불가하니답안표기에각별히유의할것

More information

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

Microsoft PowerPoint - chap13-입출력라이브러리.pptx #include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 스트림의 기본 개념을 알아보고,

More information

슬라이드 1

슬라이드 1 핚국산업기술대학교 제 14 강 GUI (III) 이대현교수 학습안내 학습목표 CEGUI 라이브러리를이용하여, 게임메뉴 UI 를구현해본다. 학습내용 CEGUI 레이아웃의로딩및렌더링. OIS 와 CEGUI 의연결. CEGUI 위젯과이벤트의연동. UI 구현 : 하드코딩방식 C++ 코드를이용하여, 코드내에서직접위젯들을생성및설정 CEGUI::PushButton* resumebutton

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Web server porting 2 Jo, Heeseung Web 을이용한 LED 제어 Web 을이용한 LED 제어프로그램 web 에서데이터를전송받아타겟보드의 LED 를조작하는프로그램을작성하기위해다음과같은소스파일을생성 2 Web 을이용한 LED 제어 LED 제어프로그램작성 8bitled.html 파일을작성 root@ubuntu:/working/web# vi

More information

금오공대 컴퓨터공학전공 강의자료

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include

More information

Microsoft PowerPoint - 09-CE-7-선과 도형

Microsoft PowerPoint - 09-CE-7-선과 도형 순천향대학교컴퓨터학부이상정 1 학습내용 디바이스컨텍스트 WM_PAINT 선, 도형그리기 GDI 객체 펜, 브러쉬 순천향대학교컴퓨터학부이상정 2 디바이스컨텍스트 순천향대학교컴퓨터학부이상정 3 디바이스컨텍스트 (1) 윈도우즈에서화면출력 ( 텍스트출력과차이점 ) 화면을사용할수있는권한이제약 자신이차지하는영역에만그림을그릴수있다. 좌표를계산하는방법이다르다 자기의윈도우즈의좌표를기준으로출력

More information

API 매뉴얼

API 매뉴얼 PCI-DIO12 API Programming (Rev 1.0) Windows, Windows2000, Windows NT and Windows XP are trademarks of Microsoft. We acknowledge that the trademarks or service names of all other organizations mentioned

More information

Microsoft PowerPoint - es-arduino-lecture-03

Microsoft PowerPoint - es-arduino-lecture-03 임베디드시스템개론 : Arduino 활용 Lecture #3: Button Input & FND Control 2012. 3. 25 by 김영주 강의목차 디지털입력 Button switch 입력 Button Debounce 7-Segment FND : 직접제어 7-Segment FND : IC 제어 2 디지털입력 : Switch 입력 (1) 실습목표 아두이노디지털입력처리실습

More information

Lab 3. 실습문제 (Single linked list)_해답.hwp

Lab 3. 실습문제 (Single linked list)_해답.hwp Lab 3. Singly-linked list 의구현 실험실습일시 : 2009. 3. 30. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 5. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Singly-linked list의각함수를구현한다.

More information

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3 Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3 Example 3.1 Files 3.2 Source code 3.3 Exploit flow

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 3 if, if else, if else if, switch case for, while, do while break, continue : System.in, args, JOptionPane for (,, ) @ vs. logic data method variable Data Data Flow (Type), ( ) @ Member field

More information

C프로-3장c03逞풚

C프로-3장c03逞풚 C h a p t e r 03 C++ 3 1 9 4 3 break continue 2 110 if if else if else switch 1 if if if 3 1 1 if 2 2 3 if if 1 2 111 01 #include 02 using namespace std; 03 void main( ) 04 { 05 int x; 06 07

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 제 5 장생성자와접근제어 1. 객체지향기법을이해한다. 2. 클래스를작성할수있다. 3. 클래스에서객체를생성할수있다. 4. 생성자를이용하여객체를초기화할수 있다. 5. 접근자와설정자를사용할수있다. 이번장에서만들어볼프로그램 생성자 생성자 (constructor) 는초기화를담당하는함수 생성자가필요한이유 #include using namespace

More information

C++ Programming

C++ Programming C++ Programming 예외처리 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 예외처리 2 예외처리 예외처리 C++ 의예외처리 예외클래스와객체 3 예외처리 예외를처리하지않는프로그램 int main() int a, b; cout > a >> b; cout

More information

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C4C656D70656C2D5A69762E637070>

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C4C656D70656C2D5A69762E637070> /* */ /* LZWIN.C : Lempel-Ziv compression using Sliding Window */ /* */ #include "stdafx.h" #include "Lempel-Ziv.h" 1 /* 큐를초기화 */ void LZ::init_queue(void) front = rear = 0; /* 큐가꽉찼으면 1 을되돌림 */ int LZ::queue_full(void)

More information

Chapter #01 Subject

Chapter #01  Subject Device Driver March 24, 2004 Kim, ki-hyeon 목차 1. 인터럽트처리복습 1. 인터럽트복습 입력검출방법 인터럽트방식, 폴링 (polling) 방식 인터럽트서비스등록함수 ( 커널에등록 ) int request_irq(unsigned int irq, void(*handler)(int,void*,struct pt_regs*), unsigned

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 KeyPad Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 에는 16 개의 Tack Switch 를사용하여 4 행 4 열의 Keypad 가장착 4x4 Keypad 2 KeyPad 를제어하기위하여 FPGA 내부에 KeyPad controller 가구현 KeyPad controller 16bit 로구성된

More information

歯MDI.PDF

歯MDI.PDF E08 MDI SDI(Single Document Interface) MDI(Multiple Document Interface) MDI (Client Window) (Child) MDI 1 MDI MDI MDI - File New Other Projects MDI Application - MDI - OK [ 1] MDI MDI MDI MDI Child MDI

More information

윈도우시스템프로그래밍

윈도우시스템프로그래밍 데이터베이스및설계 MySQL 을위한 MFC 를사용한 ODBC 프로그래밍 2012.05.10. 오병우 컴퓨터공학과금오공과대학교 http://www.apmsetup.com 또는 http://www.mysql.com APM Setup 설치발표자료참조 Department of Computer Engineering 2 DB 에속한테이블보기 show tables; 에러발생

More information

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 (   ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각 JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( http://java.sun.com/javase/6/docs/api ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각선의길이를계산하는메소드들을작성하라. 직사각형의가로와세로의길이는주어진다. 대각선의길이는 Math클래스의적절한메소드를이용하여구하라.

More information

Microsoft PowerPoint - IP11.pptx

Microsoft PowerPoint - IP11.pptx 열한번째강의카메라 1/43 1/16 Review 2/43 2/16 평균값 중간값 Review 3/43 3/16 캐니에지추출 void cvcanny(const CvArr* image, CvArr* edges, double threshold1, double threshold2, int aperture_size = 3); aperture_size = 3 aperture_size

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 제 13 장파일처리 1. 스트림의개념을이해한다. 2. 객체지향적인방법을사용하여파일입출력을할수있다. 3. 텍스트파일과이진파일의차이점을이해한다. 4. 순차파일과임의접근파일의차이점을이해한다. 이번장에서만들어볼프로그램 스트림 (stream) 스트림 (stream) 은 순서가있는데이터의연속적인흐름 이다. 스트림은입출력을물의흐름처럼간주하는것이다. 입출력관련클래스들 파일쓰기

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 클래스, 객체, 메소드 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean

More information

1장. 유닉스 시스템 프로그래밍 개요

1장.  유닉스 시스템 프로그래밍 개요 Unix 프로그래밍및실습 7 장. 시그널 - 과제보충 응용과제 1 부모프로세스는반복해서메뉴를출력하고사용자로부터주문을받아자식프로세스에게주문내용을알린다. (SIGUSR1) ( 일단주문을받으면음식이완료되기전까지 SIGUSR1 을제외한다른시그널은모두무시 ) timer 자식프로세스는주문을받으면조리를시작한다. ( 일단조리를시작하면음식이완성되기전까지 SIGALARM 을제외한다른시그널은모두무시

More information

<4D F736F F F696E74202D20C1A632C0E520C7C1B7CEB1D7B7A5B0B3B9DFB0FAC1A4>

<4D F736F F F696E74202D20C1A632C0E520C7C1B7CEB1D7B7A5B0B3B9DFB0FAC1A4> 쉽게풀어쓴 C 언어 Express 제 2 장프로그램개발과정 통합개발환경 통합개발환경 (IDE: integrated development environment) 에디터 + 컴파일러 + 디버거 Visual C++: 이클립스 (eclipse): Dev-C++: 마이크로소프트제작 오픈소스프로젝트 오픈소스프로젝트 통합개발환경의종류 비주얼 C++(Visual C++)

More information

Microsoft Word - game08-midterm.doc

Microsoft Word - game08-midterm.doc 중간고사 담당교수 : 단국대학교멀티미디어공학전공박경신 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤쪽이나연습지에기술한내용은답안으로인정안함. 답에는반드시네모를쳐서확실히표시할것. 답안지에학과, 학번, 이름외에본인의암호를기입하면성적공고시학번대신암호를사용할것임. 1. 비디오게임의역사에대한질문입니다. 다음문제의답을아래의보기에서찾으시오

More information

윈도우시스템프로그래밍

윈도우시스템프로그래밍 객체지향프로그래밍응용 Chap 4. 대화상자와컨트롤 (#1) 2013.09.27. 오병우 컴퓨터공학과금오공과대학교 Control 들을가진윈도우 Dialog 개요 사용자의입력을받기위한 Object 의집합 종류 프로그램수행도중사용자의입력이필요할때다이얼로그박스출력 다이얼로그박스는사용자로부터입력받은데이터를메인루틴에넘기고소멸 Modal Dialog Parent window

More information

歯Lecture2.PDF

歯Lecture2.PDF VISUAL C++/MFC Lecture 2? Update Visual C ++/MFC Graphic Library OpenGL? Frame OpenGL 3D Graphic library coding CLecture1View? OpenGL MFC coding Visual C++ Project Settings Link Tap Opengl32lib, Glu32lib,

More information

버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습

버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습니다. 여러분모두 Windows 에서 hex editor(hex dump, hex viewer) 라는것을사용해보셨을겁니다. 바로바이너리파일을 16 진수

More information

Microsoft PowerPoint - (제15강)Win32 API.ppt

Microsoft PowerPoint - (제15강)Win32 API.ppt 15. 가상메모리, 프로세스 1 1. 메모리할당 가상메모리 OS는 4G 까지메모리 ( 단지주소공간, 물리적인메모리와연결가능성이있는메모리번지 ) 관리가능 사용하지않는부분은하드디스크의페이징파일에저장하여사용가능한 RAM을늘린다. (RAM+ 하드디스크의페이징파일 ) Win32에서추가된가상메모리할당함수들 1. 메모리를예약상태로할당할수있다. 예약이란물리적인메모리를소비하지않으면서주소공간만을미리할당해놓는방법을말한다.

More information

5장 MFC기반 다지기

5장 MFC기반 다지기 5 장 MFC 기반다지기 김성영교수 금오공과대학교 컴퓨터공학부 들어가기 (1) pp.132 ~ 138 비주얼스튜디오에서 MFC 어플리케이션작성 참조 시스템메뉴 메뉴 최소 / 최대 / 닫기버튼 툴바 대화상자 클라이언트영역 (Client Area) 스크롤바 상태표시줄 2 들어가기 (2) 3 들어가기 (3) 4 들어가기 (4) 솔루션탐색기확인 WinMain() 함수가없다?

More information

슬라이드 1

슬라이드 1 마이크로컨트롤러 2 (MicroController2) 2 강 ATmega128 의 external interrupt 이귀형교수님 학습목표 interrupt 란무엇인가? 기본개념을알아본다. interrupt 중에서가장사용하기쉬운 external interrupt 의사용방법을학습한다. 1. Interrupt 는왜필요할까? 함수동작을추가하여실행시키려면? //***

More information

Microsoft PowerPoint APUE(Intro).ppt

Microsoft PowerPoint APUE(Intro).ppt 컴퓨터특강 () [Ch. 1 & Ch. 2] 2006 년봄학기 문양세강원대학교컴퓨터과학과 APUE 강의목적 UNIX 시스템프로그래밍 file, process, signal, network programming UNIX 시스템의체계적이해 시스템프로그래밍능력향상 Page 2 1 APUE 강의동기 UNIX 는인기있는운영체제 서버시스템 ( 웹서버, 데이터베이스서버

More information

Microsoft PowerPoint - chap03-변수와데이터형.pptx

Microsoft PowerPoint - chap03-변수와데이터형.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num %d\n", num); return 0; } 1 학습목표 의 개념에 대해 알아본다.

More information

Microsoft PowerPoint UI-Event.Notification(1.5h).pptx

Microsoft PowerPoint UI-Event.Notification(1.5h).pptx To be an Android Expert 문양세강원대학교 IT 대학컴퓨터학부 UI 이벤트 Event listener Touch mode Focus handling Notification Basic toast notification Customized toast notification Status bar notification 2 사용자가인터랙션하는특정 View

More information

Microsoft PowerPoint - chap12-고급기능.pptx

Microsoft PowerPoint - chap12-고급기능.pptx #include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 가 제공하는 매크로 상수와 매크로

More information

untitled

untitled int i = 10; char c = 69; float f = 12.3; int i = 10; char c = 69; float f = 12.3; printf("i : %u\n", &i); // i printf("c : %u\n", &c); // c printf("f : %u\n", &f); // f return 0; i : 1245024 c : 1245015

More information

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D> 뻔뻔한 AVR 프로그래밍 The Last(8 th ) Lecture 유명환 ( yoo@netplug.co.kr) INDEX 1 I 2 C 통신이야기 2 ATmega128 TWI(I 2 C) 구조분석 4 ATmega128 TWI(I 2 C) 실습 : AT24C16 1 I 2 C 통신이야기 I 2 C Inter IC Bus 어떤 IC들간에도공통적으로통할수있는 ex)

More information

게시판 스팸 실시간 차단 시스템

게시판 스팸 실시간 차단 시스템 오픈 API 2014. 11-1 - 목 차 1. 스팸지수측정요청프로토콜 3 1.1 스팸지수측정요청프로토콜개요 3 1.2 스팸지수측정요청방법 3 2. 게시판스팸차단도구오픈 API 활용 5 2.1 PHP 5 2.1.1 차단도구오픈 API 적용방법 5 2.1.2 차단도구오픈 API 스팸지수측정요청 5 2.1.3 차단도구오픈 API 스팸지수측정결과값 5 2.2 JSP

More information

chap7.key

chap7.key 1 7 C 2 7.1 C (System Calls) Unix UNIX man Section 2 C. C (Library Functions) C 1975 Dennis Ritchie ANSI C Standard Library 3 (system call). 4 C?... 5 C (text file), C. (binary file). 6 C 1. : fopen( )

More information

유저영역후킹탐지시스템 팀 명 : D.N.F (Do Not Fishing) 지도교수 : 유승재교수님 팀 장 : 신동순 팀 원 : 서현찬이치목 중부대학교정보보호학과

유저영역후킹탐지시스템 팀 명 : D.N.F (Do Not Fishing) 지도교수 : 유승재교수님 팀 장 : 신동순 팀 원 : 서현찬이치목 중부대학교정보보호학과 유저영역후킹탐지시스템 팀 명 : D.N.F (Do Not Fishing) 지도교수 : 유승재교수님 팀 장 : 신동순 팀 원 : 서현찬이치목 2016. 05 중부대학교정보보호학과 목 차 1. 서론 2. 관련연구 2.1 IAT 후킹 2.2 PE 구조 3. 본론 3.1 유저영역후킹작성및실행 3.2 유저영역후킹탐지 4. 결론 5. 참고자료 6. 발표자료 1. 서론

More information

untitled

untitled 시스템소프트웨어 : 운영체제, 컴파일러, 어셈블러, 링커, 로더, 프로그래밍도구등 소프트웨어 응용소프트웨어 : 워드프로세서, 스프레드쉬트, 그래픽프로그램, 미디어재생기등 1 n ( x + x +... + ) 1 2 x n 00001111 10111111 01000101 11111000 00001111 10111111 01001101 11111000

More information

The Pocket Guide to TCP/IP Sockets: C Version

The Pocket Guide to  TCP/IP Sockets: C Version 인터넷프로토콜 5 장 데이터송수신 (3) 1 파일전송메시지구성예제 ( 고정크기메시지 ) 전송방식 : 고정크기 ( 바이너리전송 ) 필요한전송정보 파일이름 ( 최대 255 자 => 255byte 의메모리공간필요 ) 파일크기 (4byte 의경우최대 4GB 크기의파일처리가능 ) 파일내용 ( 가변길이, 0~4GB 크기 ) 메시지구성 FileName (255bytes)

More information

C 언어 프로그래밊 과제 풀이

C 언어 프로그래밊 과제 풀이 과제풀이 (1) 홀수 / 짝수판정 (1) /* 20094123 홍길동 20100324 */ /* even_or_odd.c */ /* 정수를입력받아홀수인지짝수인지판정하는프로그램 */ int number; printf(" 정수를입력하시오 => "); scanf("%d", &number); 확인 주석문 가필요한이유 printf 와 scanf 쌍

More information

Microsoft PowerPoint - 09-CE-25-오목게임

Microsoft PowerPoint - 09-CE-25-오목게임 순천향대학교컴퓨터학부이상정 1 학습내용 단순오목게임 인터넷오목게임 승부판정오목게임 순천향대학교컴퓨터학부이상정 2 단순오목게임 순천향대학교컴퓨터학부이상정 3 예제 49: 단순오목게임 스크린에바둑판을그리고, 스크린을터치하면해당위치에흰돌또는검은돌만표시 승부는판정하지않음 메뉴 ID_START, ID_EXIT 순천향대학교컴퓨터학부이상정 4 예제 49: 코드 (1) #define

More information

ISP and CodeVisionAVR C Compiler.hwp

ISP and CodeVisionAVR C Compiler.hwp USBISP V3.0 & P-AVRISP V1.0 with CodeVisionAVR C Compiler http://www.avrmall.com/ November 12, 2007 Copyright (c) 2003-2008 All Rights Reserved. USBISP V3.0 & P-AVRISP V1.0 with CodeVisionAVR C Compiler

More information

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어서가장중요한부분이라고도할수있기때문입니다. 1. 새로운메크로생성 새메크로만들기버튺을클릭하여파일을생성합니다. 2. 메크로저장 -

More information

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어 개나리 연구소 C 언어 노트 (tyback.egloos.com) 프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어먹고 하더라구요. 그래서,

More information

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729> 8주차중간고사 ( 인터럽트및 A/D 변환기문제및풀이 ) Next-Generation Networks Lab. 외부입력인터럽트예제 문제 1 포트 A 의 7-segment 에초시계를구현한다. Tact 스위치 SW3 을 CPU 보드의 PE4 에연결한다. 그리고, SW3 을누르면하강 에지에서초시계가 00 으로초기화된다. 동시에 Tact 스위치 SW4 를 CPU 보드의

More information

8 장데이터베이스 8.1 기본개념 - 데이터베이스 : 데이터를조직적으로구조화한집합 (cf. 엑셀파일 ) - 테이블 : 데이터의기록형식 (cf. 엑셀시트의첫줄 ) - 필드 : 같은종류의데이터 (cf. 엑셀시트의각칸 ) - 레코드 : 데이터내용 (cf. 엑셀시트의한줄 )

8 장데이터베이스 8.1 기본개념 - 데이터베이스 : 데이터를조직적으로구조화한집합 (cf. 엑셀파일 ) - 테이블 : 데이터의기록형식 (cf. 엑셀시트의첫줄 ) - 필드 : 같은종류의데이터 (cf. 엑셀시트의각칸 ) - 레코드 : 데이터내용 (cf. 엑셀시트의한줄 ) 8 장데이터베이스 8.1 기본개념 - 데이터베이스 : 데이터를조직적으로구조화한집합 (cf. 엑셀파일 ) - 테이블 : 데이터의기록형식 (cf. 엑셀시트의첫줄 ) - 필드 : 같은종류의데이터 (cf. 엑셀시트의각칸 ) - 레코드 : 데이터내용 (cf. 엑셀시트의한줄 ) - DDL(Data Definition Language) : show, create, drop

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 2... ( ). ( ). @ vs. logic data method variable behavior attribute method field Flow (Type), ( ) member @ () : C program Method A ( ) Method B ( ) Method C () program : Java, C++, C# data @ Program

More information

USB3-FRM01 API 매뉴얼

USB3-FRM01 API 매뉴얼 USB3-FRM01 API Programming (Rev 1.1) Windows, Windows2000, Windows NT and Windows XP are trademarks of Microsoft. We acknowledge that the trademarks or service names of all other organizations mentioned

More information

제8장 자바 GUI 프로그래밍 II

제8장 자바 GUI 프로그래밍 II 제8장 MVC Model 8.1 MVC 모델 (1/7) MVC (Model, View, Controller) 모델 스윙은 MVC 모델에기초를두고있다. MVC란 Xerox의연구소에서 Smalltalk 언어를바탕으로사용자인터페이스를개발하기위한방법 MVC는 3개의구성요소로구성 Model : 응용프로그램의자료를표현하기위한모델 View : 자료를시각적으로 (GUI 방식으로

More information

윈도우시스템프로그래밍

윈도우시스템프로그래밍 데이타베이스 MySQL 을위한 MFC 를사용한 ODBC 프로그래밍 2013.05.15. 오병우 컴퓨터공학과금오공과대학교 http://www.apmsetup.com 또는 http://www.mysql.com APM Setup 설치발표자료참조 Department of Computer Engineering 2 DB 에속한테이블보기 show tables; 에러발생

More information

DCL Debugging Support

DCL Debugging Support DCL Runtime Debugging Support 2005.06.08 김대중 http://www.sysdeveloper.net/daejung 요약 버그없는소프트웨어를개발하는것은결코쉬운일이아니다. 대부분의상업적개발도구들이소스프로그램을추적할수있도록하는디버깅환경을제공하고있고이러한것들은단위함수들을디버깅하는데있어서매우유용한건사실이다.

More information

Microsoft PowerPoint - lec2.ppt

Microsoft PowerPoint - lec2.ppt 2008 학년도 1 학기 상지대학교컴퓨터정보공학부 고광만 강의내용 어휘구조 토큰 주석 자료형기본자료형 참조형배열, 열거형 2 어휘 (lexicon) 어휘구조와자료형 프로그램을구성하는최소기본단위토큰 (token) 이라부름문법적으로의미있는최소의단위컴파일과정의어휘분석단계에서처리 자료형 자료객체가갖는형 구조, 개념, 값, 연산자를정의 3 토큰 (token) 정의문법적으로의미있는최소의단위예,

More information

Tcl의 문법

Tcl의 문법 월, 01/28/2008-20:50 admin 은 상당히 단순하고, 커맨드의 인자를 스페이스(공백)로 단락을 짓고 나열하는 정도입니다. command arg1 arg2 arg3... 한행에 여러개의 커맨드를 나열할때는, 세미콜론( ; )으로 구분을 짓습니다. command arg1 arg2 arg3... ; command arg1 arg2 arg3... 한행이

More information

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 - (Asynchronous Mode) - - - ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 - UART (Univ ers al As y nchronous Receiver / T rans mitter) 8250A 8250A { COM1(3F8H). - Line Control Register

More information

윈도우즈 프로그래밍

윈도우즈 프로그래밍 8 장대화상자 VS 2015 008. 윈도우프로그래밍 DB & Mining LAB. Korea University Updated 2010. 10. 23 Updated 2012. 10. 02 Updated 2015. 09. 23 이종욱 eastwest9@korea.ac.kr 1 8-1 대화상자 (1/3) 사용자로부터끊임없이지시를받고사용자의지시에따라작업을하고 작업한결과를사용자에게보고한다.

More information

adfasdfasfdasfasfadf

adfasdfasfdasfasfadf C 4.5 Source code Pt.3 ISL / 강한솔 2019-04-10 Index Tree structure Build.h Tree.h St-thresh.h 2 Tree structure *Concpets : Node, Branch, Leaf, Subtree, Attribute, Attribute Value, Class Play, Don't Play.

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 제 3 장함수와문자열 1. 함수의기본적인개념을이해한다. 2. 인수와매개변수의개념을이해한다. 3. 함수의인수전달방법 2가지를이해한다 4. 중복함수를이해한다. 5. 디폴트매개변수를이해한다. 6. 문자열의구성을이해한다. 7. string 클래스의사용법을익힌다. 이번장에서만들어볼프로그램 함수란? 함수선언 함수호출 예제 #include using

More information

API 매뉴얼

API 매뉴얼 PCI-TC03 API Programming (Rev 1.0) Windows, Windows2000, Windows NT, Windows XP and Windows 7 are trademarks of Microsoft. We acknowledge that the trademarks or service names of all other organizations

More information

The C++ Programming Language 4 장타입과선언 4.11 연습문제 Hello,world! 프로그램을실행시킨다. 프로그램이컴파일되지않으면 B3.1 을참고하자. #include<iostream> //#include 문, 헤더파일, 전처리지시

The C++ Programming Language 4 장타입과선언 4.11 연습문제 Hello,world! 프로그램을실행시킨다. 프로그램이컴파일되지않으면 B3.1 을참고하자. #include<iostream> //#include 문, 헤더파일, 전처리지시 The C++ Programming Language 4 장타입과선언 4.11 연습문제 4.11.1 Hello,world! 프로그램을실행시킨다. 프로그램이컴파일되지않으면 B3.1 을참고하자. #include //#include 문, 헤더파일, 전처리지시자로호칭 using namespace std; //using 키워드를사용하여 std 네임스페이스를사용선언

More information