'API Reference'에 해당되는 글 75건

  1. 2007.10.17 SelectObject
  2. 2007.10.17 GetStockObject
  3. 2007.10.17 GDI, DC
  4. 2007.10.17 LoadString
  5. 2007.10.17 LoadAccelerators, TranslateAccelerator
  6. 2007.10.17 ShortCut( 단축키 ), Accelerator( 액셀러레이터 )( Resource )
  7. 2007.10.17 LoadCursor, LoadIcon( Resource )
  8. 2007.10.17 Menu( Resource )
  9. 2007.10.17 WM_COMMAND
  10. 2007.10.17 MAKEINTRESOURCE

SelectObject

API Reference 2007. 10. 17. 10:50

HGDIOBJ SelectObject( HDC hdc, HGDIOBJ hgdiobj );


GDI 오브젝트를 DC 에 선택하는 함수


SelectObject 가 리턴하는 값은 새로 선택되는 오브젝트 이전에 선택되어 있던 같은 종류의 오브젝트 핸들이다.



hdc

DC 의 핸들


hgdiobj

GDI 오브젝트의 핸들

Posted by 명혀니
,

GetStockObject

API Reference 2007. 10. 17. 10:50

HGDIOBJ GetStockObject( int fnObject );


스톡 오브젝트( Stock Object )는 윈도우즈가 기본적으로 제공하는 GDI 오브젝트이다.

운영체제가 부팅할 때부터 미리 만들어 놓으므로 GetStockObject 함수로 핸들을 얻어 사용한다.


GetStockObject 함수는 여러 종류의 스톡 오브젝트를 리턴하므로 대입하기 전에 원하는 타입으로 캐스팅해야 한다.



fnObject

사용하고자 하는 스톡 오브젝트를 지정하는데 사용 가능한 스톡 오브젝트는 다음과 같다.


BLACK_BRUSH( 검정색 브러시 )


GRAY_BRUSH( 회색 브러시 )


NULL_BRUSH( 투명 브러시 )


WHITE_BRUSH( 흰색 브러시 )


DKGRAY_BRUSH( 짙은 회색 브러시 )


LTGRAY_BRUSH( 옅은 회색 브러시 )


DC_BRUSH( 색상 브러시. SetDCBrushColor 함수로 설정한다. )


BLACK_PEN( 검정색 펜 )


WHITE_PEN( 흰색 펜 )


NULL_PEN( 투명 펜 )


DC_PEN( 색상 펜. SetDCPenColor 함수로 설정한다. )


ANSI_FIXED_FONE( 고정폭 폰트 )


ANSI_VAR_FONT( 가변폭 폰트 )


DEFAULT_PALETTE( 시스템 팔레트 )



주로 무채색의 브러시와 펜만 제공되며 원색 브러시는 직접 만들어 써야 한다.

Posted by 명혀니
,

GDI, DC

API Reference 2007. 10. 17. 10:50

GDC( Graphic Device Interface )

화면, 프린터 등의 모든 출력 장치를 제어하는 윈도우즈의 핵심 모듈 중 하나



GDI 오브젝트( GDI Object )

그래픽 출력에 사용되는 도구를 말하며 펜, 브러시, 비트맵, 폰트 등


GDI 오브젝트를 모아 놓은 것이 DC 이며 GDI 는 현재 DC 에 선택되어 있는 GDI 오브젝트를 사용한다. 그래서 사용자는 그래픽을 그리기 전에 DC 에 적절한 오브젝트를 선택함으로써 원하는 모양과 속성으로 그래픽을 출력할 수 있다.



DC 가 BeginPaint 나 GetDC 함수에 의해 처음 만들어졌을 때 디폴트로 선택된 GDI 오브젝트는 다음과 같다.


펜( HPEN, 선을 그을 때 사용된다. )

검정색의 가는 실선


브러시( HBRUSH, 면을 채울 때 사용된다. )

흰색


폰트( HFONT, 문자 출력에 사용되는 글꼴 )

시스템 글꼴


비트맵( HBITMAP, 비트맵 이미지 )

선택되지 않음


팔레트( HPALETTE, 팔레트 )

선택되지 않음


리전( HRGN, 화면상의 영역 )

선택되지 않음

Posted by 명혀니
,

LoadString

API Reference 2007. 10. 17. 10:49

int LoadString( HINSTANCE hInstacne, UINT uID, LPTSTR lpBuffer, int nBufferMax );


문자열 리소스를 읽어 lpBuffer 가 가리키는 버퍼에 nBufferMax 의 길이 만큼 저장한다.



hInstance

문자열 리소스를 가진 인스턴스 핸들


uID

읽어올 문자열의 ID


lpBuffer

문자열을 읽을 버퍼를 지정


nBufferMax

버퍼의 길이, 배열 길이를 초과하는 사고를 방지하기 위한 길이 값

Posted by 명혀니
,

HACCEL LoadAccelerators( HINSTANCE hInstance, LPCTSTR lpTableName );


리소스로부터 액셀러레이터 테이블을 읽어들인 후 그 핸들을 리턴한다.



lpTableName

액셀러레이터 테이블의 이름 문자열 포인터이되 MAKEINTRESOURCE 매크로를 사용하여 테이블 이름을 입력한다.



int TranslateAccelerator( HWND hWnd, HACCEL hAccTable, LPMSG lpMsg );


키보드 메시지를 WM_COMMAND 메시지로 변경하여 액셀러레이터가 동작할 수 있도록 한다.


액셀러레이터 Ctrl+A 가 입력되었다고 가정했을 때 Ctrl+A 는 액셀러레이터이기 이전에 키보드로부터의 입력이므로 먼저 WM_KEYDOWN 메시지가 발생할 것이고 그대로 내버려 두변 WndProc 의 WM_KEYDOWN 메시지 처리 루틴에서 먼저 이 키값을 처리해 버릴 것이다.


TranslateAccelerator 함수는 lpMsg 의 키보드 입력값을 읽어 이 키값이 hAccTable 에 있는지 먼저 살펴보고 있을 경우 그 키에 해당하는 WM_COMMAND 메시지를 hWnd 윈도우로 전달하고 TRUE 를 리턴해 버린다.



WM_KEYDOWN 메시지는 중간에서 다른 메시지로 변형되거나 추가로 발생시키는 경우가 빈번하다.


WM_KEYDOWN    -> TranslateAccelerator    -> WM_COMMAND( 변형 )

                         -> TranslateMessage       -> WM_CHAR( 추가 발생 )

Posted by 명혀니
,

단축키( ShortCut )

반드시 Alt 키와 함께 사용해야 하며 메뉴에 있는 항목을 키보드로 선택하는 빠른 방법


액셀러레이터( Accelerator )

메뉴와 상관없이 언제든지 사용할 수 있는 키



메뉴 편집기의 속성창에 Caption 속성의 편집으로 단축키와 액셀러레이터를 지정할 수 있다.


캡션에 포함된 & 문자가 단축키를 지정하는데 & 다음에 있는 문자가 단축키가 되며 지정된 문자에 밑줄이 그어진다.


액셀러레이터는 캡션 뒤에 \t 로 적당히 칸을 띄운 후 키조합을 적는다.


단축키는 바로 적용이 되지만 메뉴 리스트에 출력되는 액셀러레이터는 별도의 리소스를 작성해야 한다.



액셀러레이터 키 편집기의 각 란의 의미


ID

액셀러레이터의 ID 이며 프로그램 소스에서 액셀러레이터를 참조할 때 이 값을 사용한다. 메뉴의 ID 를 작성하는 방법과 동일한 규칙대로 ID 를 작성하면 된다. 보통 메뉴 항목에 대해 일대일로 대응되는 경우가 많아 메뉴의 ID 와 일치시키는 것이 보통이다.


Key

액셀러레이터로 사용할 키를 선택한다. 펑션키나 특수키를 사용하려면 드롭다운 리스트를 열어 선택하고 알파벳키나 숫자키를 선택하려면 바로 아래쪽의 Next Key Typed 버튼을 누른 후 원하는 키를 누르면 된다.


Modifiers

키와 함께 눌러질 조합키를 선택한다. Ctrl, Alt, Shift 를 개별적으로 또는 여러 개를 한꺼번에 선택 할 수 있다.


Type

Key 값이 아스키 코드인지 가상키 코드인지를 설정한다. 가상 키코드가 훨씬 더 많은 키를 지정할 수 있으므로 보통 가상키를 지정한다.



액셀러레이터를 추가하는 코드


HACCEL hAccel;


hAccel = LoadAccelerators( hInstance, MAKEINTRESOURCE( IDR_ACCELERATOR1 ) );


while( GetMessage( &Message, NULL, 0, 0 ) ) {

    if( !TranslateAccelerator( hWnd, hAccel, &Message ) ) {

        TranslateMessage( &Message );

        DispatchMessage( &Message );

    }

}

Posted by 명혀니
,

아이콘과 커서를 추가하는 코드


WndClass.hCursor = LoadCursor( hInstance, MAKEINTRESOURCE( IDC_CURSOR1 );

WndClass.hIcon = LoadIcon( hInstance, MAKEINTRESOURCE( IDI_ICON1 );

Posted by 명혀니
,

Menu( Resource )

API Reference 2007. 10. 17. 10:47

메뉴를 추가 하는 코드


#include "resource.h"


WndClass.lpszMenuNam = MAKEINTRESOURCE( IDR_MENU1 );

Posted by 명혀니
,

WM_COMMAND

API Reference 2007. 10. 17. 10:47

프로그램 실행중에 사용자가 메뉴 항목을 선택하면 WM_COMMAND 메시지가 발생한다.

이때 어떤 메뉴 항목이 선택되었는가는 wParam 의 하위 워드로 전달되므로 LOWORD( wParam )을 읽어 판단할 수 있다.



WM_COMMAND 메시지는 메뉴 항목을 선택할 때뿐만 아니라 액셀러레이터를 누를 때도 발생하며 또한 버튼, 에디트 박스 등의 컨트롤이 부모 윈도우로 통지 메시지를 보낼 때도 발생한다.


이 메시지의 추가 정보는 다음과 같은 구조를 가지며 매우 중요하다.


lParam

통지 메시지를 발생시킨 컨트롤의 윈도우 핸들


LOWORD( wParam )

메뉴나 액셀러레이터, 컨트롤의 ID


HIWORD( wParam )

컨트롤이 보내는 통지 메시지, 메뉴가 선택된 경우는 0 이 되며 액셀러레이터가 선택된 경우는 1 이 된다.

Posted by 명혀니
,

MAKEINTRESOURCE

API Reference 2007. 10. 17. 10:46

리소스의 ID 는 문자열 또는 정수로 지정할 수 있다. 문자열을 입력할 경우 겹따옴표( " " )를 붙여주어야 한다.


WNDCLASS 구조체의 lpszMenuName 은 원래 문자열 타입이다.

리소스의 ID 에 겹따옴표를 사용한 문자열을 대입하지 않았을 경우( 편집기에 의해 매크로 정수를 사용할 경우 ) 정수 타입의 리소스 ID 를 문자열 포인터에 대입할 수 없으므로 적당히 캐스팅해야 하는데 이 캐스팅을 대신 하는 매크로가 바로 MAKEINTRESOURCE 이다.


#define MAKEINTRESOURCE( i ) ( LPSTR )( ( DWORD )( ( WORD )( i ) ) )

Posted by 명혀니
,