[Win32 API] WINAPI - 함수호출규약

WINAPI는 함수 호출 규약으로 windef.h에 정의 되어 있다. 기본적으로 _stdcall과 _cdecl 이 있는데 , 함수를 어떤 방식으로 호출할지 결정하는지 정한다. _stdcall   함수 호출시 인자를 스택에 , 오른쪽에서 왼쪽순으로 저장한다.  func(a,b,c) 라면 스택에 c를 넣고, b를 넣고, a를 넣는다. 스택에 저장한 인자 메모리를 호출당한 쪽 함수에서 해제해 준다. _cdecl  함수 호출시 인자를 스택에 오른쪽에서 왼쪽 순으로 저장한다. _stdcall과 동일 스택에 저장한 인자 메모리를 호출한 쪽 함수 에서 해제해 준다. 윈도우즈, 베이직,파스칼등 에서는 stdcall_이 default이다.  하지만, c/c++에서는 _cdecl이 default이다.  따라서, 코딩중 Win32 API함수를 호출하는 경우에는 명시적으로 _stdcall을 써줘야한다.  예)  int   WINAPI WinMain ( HINSTANCE hInstance,                    HINSTANCE hPrevInstance,                    LPSTR lpCmdLine,                     int   nCmdShow ) ; 라고 WINAPI라고 명시하면, _stdcall로 처리된다. WINAPI를 생략하게 되면, _cdecl로 간주되어 함수를 호출하게 되면 오류가 난다. 

[Win32 API] WinMain()

Syntax _____________________________________________________________________________________ int  WINAPI WinMain ( HINSTANCE hInstance,                    HINSTANCE hPrevInstance,                    LPSTR lpCmdLine,                     int  nCmdShow ) ; _______________________________________________________________________ Parameters hInstance : Handle to the current instance of the App. hPrevInstance : Handle to the previous instance of the App.  Win32-based application, this parameter is always NULL . lpCmdLine : Point to a null-terminated string the command line for the application like c style - int main( string args[] ) nShowCmd : Specifies how the window is to be shown. This parameter can be one of the following values SW_HIDE : Hides the window. SW_SHOW : Displays the window. SW_SHOWNA : Displays a w...

windows Event에 따른 응용프로그램 동작방식

이미지
1.키보드나 마우스를 작동하면 Hardware Event가 발생한다. 2.시스템은 이것을 감지해, 해당 움직임을 메세지로 표현하여,System Message Queue로 가져온다. 3.System Message Queue에서 각 Application Message Queue로 나뉘어 들어가게 된다. 4.App. Message Queue에서 메세지를 처리하는 Message Loop로 들어가게 되고, 실질적으로 메세지들을 처리하는 Window Procedure로 들어가게 된다. Window Procedure에서 처리 하지 않은 메세지들은 Default Window Procedure에서 처리된다. 관련항목 : Event Driven 방식,Message Driven 방식

Windows OS를 구성하는 기본 DLL

Windows OS를 구성하는 기본적인 3개의 DLL(Dynamic Link Library) 커널 (KERNE32.DLL) : Windows OS의 핵심으로 메모리관리, 파일 입출력,프로그램의 로드와 실행 등 OS의 기본기능을 수행한다. GDI (GDI32.DLL) : 화면이나 프린터 같은 출력장치의 출력을 관리한다. 사용자 인터페이스 (USER32.DLL) : 윈도우, 다이얼로그, 메뉴, 커서, 아이콘 등과 같은 사용자 인터페이스 객체들을 관리한다.

windows 프로그래밍 기초 용어 정리

이미지
API  (Application Programming Interface) Application이 OS나 DataBase Management System (DBMS)등과 통신할 때 사용되는 언어나 메세지의 형식을 말한다.  Application 개발자들을 위해 제공되는 함수 집합으로 많은 종류의 API가 존재한다. 그 중 32bit인 windows 95/98,2000,NT,XP등에서 제공하는 API를 Win32 API라고 한다. 대표적인 함수로 CreateWindow(),ShowWindow(),UpdateWindow()등이 있다. SDK  (Software Development Kit) Win32 API를 이용하여 프로그램을 개발하는 도구 즉 소프트웨어 패키지로 각종 편집 툴, 라이브러리, 헤더파일,도움말,예제 프로그램들로 구성되어 있다.  대표적인 예로, VisualStudio c++등이 있다.  Windows GUI windows program들은 위와 같이 대부분 일관된 사용자 인터페이스를 제공한다.  시스템 메뉴, 메뉴바 ,툴바, 최대/최소/닫기 버튼 등으로 구성 되어있다.  사실 툴바 메뉴바 등등도 윈도우이다. 실질적으로 하나의 윈도우는 여러 윈도우의 집합이다.  Resource 메뉴,아이콘, 커서,비트맵,문자열, 버전정보 등 사용자 인터페이스를 구성하는 자원들로 읽기 전용 정적 데이터를 말한다.  리소스는 프로그램 실행중 변경되지 않는 정적 데이터이다. c/c+과 같은 언어로 관리하지 않고 Resource Script파일로 관리한다. 윈도우즈 프로그램의 큰 특징 중 하나가 소스코드와 리소스가 분리 되어 있다는 것이다.  DOS기반 프로그래밍에서는 프로그램에 쓰이는 리소스를 정의할때 배열로 불러와 저장해 사용하거나, 외부 파일로 만들어 둔 후 사용했다. 하지만 윈도우즈 프로그래밍에서는 이런 데이터들을 리소스로 만들어 놓고 소스코드와 ...

windows 주요 개념

c/c++을 배우면서 주로 console이나, dos기반의 프로그램들을 짜왔다. 같은 c/c++을 기반으로 하지만, 윈도우즈 프로그래밍의 코드들을 보면, 수없이 많은 낯선 함수, 열거체, 구조체,매크로 등으로 혼란스럽기만하다. windows 에 대한 기본적인 배경이야기를 알아 놓으면, 한결 수월해진다. windows의 기본적인 특징들을 주요 세가지만 꼽아보자. GUI(Graphic User Interface) 이다.  시커먼 화면에 글자 몇개만 뜨는 도스와는 달리, 그래픽기반의 OS이다. 픽셀단위의 섬세한 처리가 가능하여 다양한 그래픽을 표현할 수 있다.  멀티태스킹(Multitasking) 과 멀티스레딩(Mutithreading) 여러가지 프로그램을 동시에 실행시킬 수 있다. 윈도우 95부터 주로 선점형(preemptive) 멀티 태스킹 을 지원한다. 선점형 멀티 태스킹 이란? 코드들은 코드가 수행되기 위해 cpu가 자신을 위해 시간을 쏟길 바란다. 선점형 멀티태스킹의 반대인 비 선점형 멀티태스킹 의 경우, cpu의 시간을 관리하는 주체가 OS가 아니라 응용프로그램이다. 따라서 응용프로그램은 마음껏 cpu를 사용한다. 누구에게도 선점당할 염려가 없다.  선점형 멀티태스킹의 경우는 그 반대이다. OS가 cpu사용시간을 관리한다. 골고루 cpu를 사용할 수 있도록 한다. 만약 어떤 프로그램이 오류가 발생해 다음 프로그램으로 넘겨주지 못하는 상황이 온다면, OS가 관여해서, cpu자원등을 회수해 가서 다른 프로그램들에게 넘겨준다.누구든지 선점할 수 있는 방식으로 운영한다. 비선형멀티태스킹의 경우, 버그나 오류에 있어서 치명적이고, 여러가지 프로그램을 동시에 실행시키지 못한다. 하지만 선점형 멀티태스킹의 경우, 자원을 골고루 나누어쓰기때문에 거의동시에 여러프로그램이 실행되는것 같은 효과를 가진다.  멀티스레딩 이란? 멀티태스킹이 동시에 여러가지 프로그램이 수행되는 것을 말했다면, 멀티스레딩은 한 프로그램 내에서...

JAVA Tree CellRenderer - Icon setting

트리의 노드형태는 리스트와 콤보박스와 마찬가지로 CellRenderer인터페이스를 통해 관리한다. TreeCellRenderer라는 인터페이스가 있고, 이것을 구현한 DefaultTreeCellRenderer가 존재한다.  DefaultCellRenderer에는 노드의 아이콘을 변경할 수 있는 메소드 들이 존재한다.  void setLeafIcon(Icon icon) - leafnode 의 아이콘을 icon으로 설정한다. void setClosedIcon(Icon icon) - 닫혀진 node의 아이콘을 icon으로 설정한다. void setOpenIcon(Icon icon) - 열린 node의 아이콘을 icon으로 설정한다.   다음 예제는 DefaultTreeCellRender를 이용하여 아이콘을 변경하는 예제이다.  순서는 다음과 같다.  트리의 노드들을 생성하고 , 붙여주어서 트리를 만든다. DefaultCellRenderer객체를 하나 만들고, 아이콘 설정 메소드들를 이용하여 아이콘 설정 트리의 setRenderer()메소드를 이용하여 renderer를 변경한다. 완성된 트리를 pane에 붙임으로 완성한다. import javax.swing.*; import javax.swing.tree.*;;   public   class  TreeIcon  extends   JFrame {      protected   JTree  tree;          public  TreeIcon ( ) {          super ( "아이콘이 있는 트리" ) ;                  //트리만들어주기   ...