윈도우 프로그래밍의 이해

Click here to load reader

Upload: mandar

Post on 12-Jan-2016

99 views

Category:

Documents


0 download

DESCRIPTION

1. 윈도우 프로그래밍의 이해. Application. MFC. VB. ATL/COM. owl. Delphi. DirectX OPEN/GL. API. Windows Kernel. HAL. HardWare. 1. API 의 Positioning. 2. Windows 의 구성. Windows 의 특징 32bit 선점형 멀티태스킹과 멀티스레딩을 지원하는 그래픽 운영체제이다 . 비선점형 : 프로그램이 스스로 제어를 다른 프로그램에게 넘겨 주어야 한다 . GUI 환경이다 . - PowerPoint PPT Presentation

TRANSCRIPT

  • 1.

  • 1. API Positioning

  • 2. Windows Windows 32bit . : .GUI.GUI . - Charles SimonyiGUI 1. .2. Windows . .Windows .

  • 2. Windows . .

  • 3. API#include Windows include .

    WINDEF.H WINNT.H WINBASE.H KernelWINUSER.H WINGDI.H #include

    int WINAPI WinMain (HINSTANCE hInstance,HINSTANCE hPrevInstance, PSTR szCmdLine, int CmdShow){MessageBox (NULL, "Hello, Windows 98!","HelloMsg", MB_OK) ;return 0 ;}

  • 4. WINAPI windef.h .#define WINAPI __stdcallParametersHINSTANCE hInstance : HINSTANCE hPrevInstance : NULL.PSTR szCmdLine : int iCmdShow : __stdcall 16 PASCAL . int WINAPI WinMain (HINSTANCE hInstance,HINSTANCE hPrevInstance, PSTR szCmdLine, int CmdShow)

  • 4. MessageBox :

  • 4. : ( ) . . () .

    : (Event-Driven) . . . .Ex) Spy++ Test

  • 4.

  • 5. (Event) (Message) (Message Loop)

    (Queue) (Handle)

    (Resource)

    (Instance)

  • 5. (Event) (Message) . OS . .WinUser.h#define WM_MOUSEMOVE 0x0200#define WM_LBUTTONDOWN 0x0201#define WM_LBUTTONUP 0x0202#define WM_LBUTTONDBLCLK 0x0203#define WM_RBUTTONDOWN 0x0204#define WM_RBUTTONUP 0x0205[ Message]( Winuser.h)

  • 5. typedef struct tagMSG {HWNDhwnd;// UINTmessage;// WPARAMwParam;// LPARAMlParam;// DWORDtime;// POINTpt;// } MSG;typedef struct tagMSG{HWNDhwnd;UINTmessage;WPARAMwParam;LPARAMlParam;DWORDtime;POINTpt;}MSG;WM_LBUTTONDOWNKey FlagLOWORD(lParam)HIWORD(lParam)

  • 5. (Message Queue) OS . [ ] [ ] .

  • 5. OS A B(RIT:Raw Input Thread)

  • 5. OS .While( GetMessage( &msg,NULL,0,0) ){TranslateMessage( &msg );DispatchMessage( &msg );}

  • 5. (Window procedure) . CALLBACK . . Call Back . Language independent .( )windef.hLRESULT CALLBACK WndProc( HWND hWnd, UNIT uMgs,WPARAM wParam,LPARAM lParam);#define CALLBACK __stdcall#define WINAPI __stdcall

  • 5. LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam){ HDC hdc ; PAINTSTRUCT ps ; RECT rect ;

    switch (iMsg) { case WM_CREATE : PlaySound ("hellowin.wav", NULL, SND_FILENAME | SND_ASYNC) ; return 0 ; case WM_PAINT : hdc = BeginPaint (hwnd, &ps) ; GetClientRect (hwnd, &rect) ;

    DrawText (hdc, "Hello, Windows 95!", -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER) ; EndPaint (hwnd, &ps) ; return 0 ; case WM_DESTROY : PostQuitMessage (0) ; return 0 ; } return DefWindowProc (hwnd, iMsg, wParam, lParam) ;}

  • 5. (Handle) OS . ?Ex) HWND HCURSOR HICON HMENU (30KB) C++(40KB)(10KB) 20KB 80KB . 30KB , 40KB Visual C++ (20KB) C++(40KB)(10KB)(10KB)

  • 5. => . (OS )Ex)HGLOBAL GlobalAlloc( UINT uFlags, // allocation attributes DWORD dwBytes // number of bytes to allocate);

    GMEM_FIXED Allocates fixed memory. The return value is a pointer. GMEM_MOVEABLE Allocates movable memory. OS , .

  • 5. (Code Segment) (Data Segment) . (Instance) . (Module Instance) (Data Instance) .12( ) _1( ) _2( )

  • 5. (Resource),,, . C C++ .IDR_MAINFRAME MENU PRELOAD DISCARDABLE BEGIN POPUP "(&F)" BEGIN MENUITEM " (&N)\tCtrl+N",ID_FILE_NEW MENUITEM "(&O)...\tCtrl+O",ID_FILE_OPEN MENUITEM "(&S)\tCtrl+S",ID_FILE_SAVE MENUITEM " (&A)...",ID_FILE_SAVE_AS MENUITEM SEPARATOR MENUITEM "(&P)...\tCtrl+P",ID_FILE_PRINT MENUITEM " (&V)",ID_FILE_PRINT_PREVIEW MENUITEM " (&R)...",ID_FILE_PRINT_SETUP MENUITEM SEPARATOR MENUITEM " ",ID_FILE_MRU_FILE1,GRAYED MENUITEM SEPARATOR MENUITEM "(&X)",ID_APP_EXIT ENDEND

  • 5. . (.RC) (RC.EXE) (.RES) . . . (Moveable) (Discardable).

  • 5. GUI,, / . , Call (DISCARDABLE) EXE DLL .

  • 5. ( ) . . . . . . OS . GDI

  • 5. case WM_PAINT : hdc = BeginPaint (hwnd, &ps) ; GetClientRect (hwnd, &rect) ; DrawText (hdc, "Hello, Windows 95!", -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER) ; EndPaint (hwnd, &ps) ; return 0 ;GDI32.DLLUSER32.DLLKERNEL32.DLLDisplay.drvPrinter.drvKeyboard.drvMouse.drvSound.drvSystem.drvComm.drvTimer H/WRS-232Ms-Dos file I/OMemory Management

  • 5.