노무현 전 대통령 서거 추모글 남기기

'전공/c, c++, ce'에 해당되는 글 32건

  1. 2008.03.29 #pragma warning
  2. 2008.03.28 RegisterWindowMessage 1
  3. 2008.03.24 필수 윈도우관련 메시지 정리
  4. 2008.03.20 정의된 define들
  5. 2007.10.24 Cannot access the class view information file

#pragma warning

전공/c, c++, ce 2008. 3. 29. 11:45

pragma 디렉티브(지시자)는 컴파일러 제조회사에서 컴파일러의 기능을 확장시킬수 있도록 하는 지시자 입니다. 표준 컴파일러에 자신들의 컴파일러 제작 기술이 허락하는 대로 최대한의 기능을 제공할 수 있도록 여지를 남겨놓은 것인데, 만약 다른 컴파일러에서 해석할수 없는 pragma 디렉티브를 만나면 그냥 무시함으로서 소스간 호환성 문제도 해결하고 있습니다.


위의것은 Ms Visual C++에서 확장된 기능으로 보입니다.


#pragma warning 경고 메시지와 관련된 지시자로서

#pragma warning(disable : 4786)
#pragma warning(disable : 4100)


이렇게 소스 파일에 적어놓으면 이 지시자가 나타난 순간부터 각각 4786, 4100번의 경고 메시지를 출력하지 못하게 합니다. MS 컴파일러에서 각각의 경고 메시지는 자신의 고유번호를 갖고 있습니다. 예를 들어 다음 소스를 경고레벨 4에서 컴파일한다면,


void f(int a)
{
}

int main()
{
 return 0;
}


다음과 같은 메시지를 출력합니다.

e:\Temp Projects\Test2\Test2.cpp(6) : warning C4100: 'a' : 참조되지 않은 형식 매개 변수입니다.


이때 C4100이 바로 경고메시지의 고유번호입니다.

C는 컴파일러에서 발생했다는 뜻이며, 4100이 경고 메시지 번호입니다.


이런 경고 메시지가 많이 발생되는 경우, 컴파일 속도가 심각하게 느려질수 있습니다.

또, 깨끗한 프로그램을 위해 경고레벨4에서 경고메시지 없이 컴파일 되기를 원하는 개발사도 있습니다.  이럴때, 다음처럼 해당 경고를 삭제해 주는 것입니다.


#pragma warning(disable: 4100)


void f(int a)
{
}

int main()
{
 return 0;
}


위의 소스는 실제로는 경고메시지를 끄는 것 보다는 경고메시지의 근본적인 오류를 제거해야 할 것입니다. 무슨말이냐하면, 실제로 f라는 함수에서 a라는 매개변수를 사용하지 않기 때문에, 매개 변수를 없애던가, 함수내부에서 매개변수를 사용하게끔 하던가, 혹은 나중에 사용하기 위해 설계상 써놓은 것이라면, 다음처럼 소스를 수정합니다.


void f(int /* a 차후에 사용될 것임을 명시하는 주석문*/)
{
}


또는


void f(int a)
{

 a; // 차후에 사용될 것임을 명시하는 주석문.
}


하지만, 위 4786번 메시지의 경우 STL과 관련된 VC++6.0의 버그로서, 이 경우에는 어쩔수 없이 삭제해 주어야 합니다.

[출처] #pragma warning이란?|작성자 반딧불

#pragma warning


컴파일러 경고 레벨


#pragma warning( push, level )
#pragma warning( pop )

level은 1, 2, 3, 4값을 가질 수 있다. 레벨은 프로젝트 컴파일러 옵션에서 수정이 가능합니다.


default

#pragma warning( default, number )

해당 경고를 컴파일러 기본값으로 처리.


disable

#pragma warning( disable, number )

해당 경고를 비활성화 시킨다. 즉, 경고가 생겨도 화면에 출력하지 않는다.


error

#pragma warning( error, number )

해당 경고를 에러로 처리한다.


once

#pragma warning( once, number )

해당 경고 출력을 단 한번만 한다.



보통은 아래와 같이 사용한다.

#pragma warning( disable, 4700 ) // 경고 해제

.. 소스 코드 ...

#pragma warning( default, 4700 ) // 기본값으로 처리

Posted by Kelly Cook
,
다른 프로그램과 메세지를 주고 받는 방법으로는 간단하게 2가지
방법이 있습니다.
하나는 RegisterWindowMessage 함수를 사용하여 메세지를 등록하는
방법이고 또 하나는 공유 메모리를 사용하여 메모리를 공유하는
방법입니다.

위의 두가지 방법에 대해서 간단하게 설명드리면 다음과 같습니다.

먼저 RegisterWindowMessage 함수를 사용하는 경우는

아래와 같이 메세지를 등록합니다.

UINT nRegMsg = RegisterWindowMessage("My Message");
여기서 입력으로 들어가는 "My Message" 라는 문자열은 메세지를 서로 주고
받기로 한 프로그램간에 서로 약속한 문자열입니다.
이 함수는 메세지를 송신하는쪽이나, 메세지를 수신하는 쪽이나 모두
수행해야 합니다.

메세지가 등록되어 송수신 준비가 되면 SendMessage 또는 PostMessage 함수로
메세지를 전송하면 됩니다.
이때 메세지가 다른 프로그램으로 전달이 되게 하려면
SendMessage 또는 PostMessage함수의 첫번째 입력 인수로 반드시 HWND_BROADCAST를
지정해야 합니다. 그렇지 않으면 다른 프로그램으로 메세지가 전송되지 않습니다.
이때 wParam, lParam을 이용해서 각각 2Byte와 4Byte의 추가적인 정보를 전달
할 수 있습니다.

즉 ::PostMessage(HWND_BROADCAST, nRegMsg, (WPARAM)m_hWnd, (LPARAM)0);
이런식으로 사용하면 됩니다.

메세지를 수신하려는 쪽은 다음의 코드를 추가하면 됩니다.

즉 RegisterWindowMessage로 등록된 메시지를 받을때는
ON_REGISTERED_MESSAGE 매크로를 사용합니다.

즉 ON_REGISTERED_MESSAGE(nRegMsg, OnMessageFunc)
이런 식으로 메세지 수신을 처리하는 함수를 등록해 줍니다.
그리고 이 처리함수에서 메세지 수신을 처리하면 됩니다.

메세지 처리 함수는 다음과 같은 형식을 가집니다.

LRESULT MyClass::OnMessageFunc(WPARAM wParam, LPARAM lParam)
{
// 작업 코드
return 0;
}

그런데 만일 4Byte 이상의 데이터를 전송하려면 어떻게 해야 할까요??
구조체에 정보를 담거나, 메모리를 할당해서 여기에 데이터를 저장한 후
메포리 번지의 포인터를 전달하는 경우가 대부분일테지만, 이 방법은
단일 프로그램에서만 사용이 가능합니다.

즉 위의 방법으로는 문자열이나 기타 대량의 정보를 전송하는데는
문제가 있습니다.

대량의 정보를 서로 공유하려면 메모리 맵 파일을 이용합니다.
즉 공유 메모리를 이용하는 방법을 사용합니다.

메모리 맵 파일은 파일이 아닙니다. 파일처럼 취급되는 메모리의 일종이라고
보시면 됩니다.

기본적인 방법은 CreateFileMapping 함수를 사용하여 메모리 맵 파일을 생성하고
MapViewOfFile 함수를 호출하여 메모리 포인터를 얻어 이 포인터를 일반
포인터처럼 사용하시면 됩니다.

CreateFileMapping 에 대한 설명은 여기서는 모두 하기가 어렵고
Visual C++ 도움말이나 MSDN CD에서 도움말을 참조하시기 바랍니다.(죄송..)

그럼 간단하게 소스를 보면 다음과 같습니다.

LPVOID m_pViewOfFile = NULL;
HANDLE m_hFileMapping = 0;

m_hFileMapping = CreateFileMapping(
INVALID_HANDLE_VALUE, // system paging file
NULL, // security attributes
PAGE_READWRITE, // protection
0, // high-order DWORD of size
dwMemoryFileSize*sizeof(TCHAR), // low-order DWORD of size
sMemoryFileName); // name

if (!m_hFileMapping )
{
MessageBox(_T("Creating of file mapping failed"));
}
else
{
m_pViewOfFile = MapViewOfFile(
m_hFileMapping, // handle to file-mapping object
FILE_MAP_ALL_ACCESS, // desired access
0,
0,
0); // map all file

if (! m_pViewOfFile )
{
MessageBox(_T("MapViewOfFile failed"));
}

// Now we have m_pViewOfFile memory block which is common for
// all instances of this program
}
}

이제 m_pViewOfFile 변수를 자신이 원하는 형태로 캐스팅하여
사용할 수 있습니다.

메세지를 전송하는 프로그램은 이렇게 메모리를 ACCESS 한다음 여기에
데이터를 기록하면 됩니다.

메세지를 수신하는 프로그램에서는 OpenFileMapping함수를 사용하여
메모리 맵 파일을 오픈하고 MapViewOfFile 함수로 메모리 포인터를 얻어서
수신한 데이터를 사용할 수 있습니다.

이런식으로 서로 다른 프로그램이나 프로세스간에 메세지나 메모리를
공유할 수 있습니다.

[출처] RegisterWindowMessage|작성자 형기

Posted by Kelly Cook
,

출처: http://cafe.naver.com/ryuts.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=19

필수 윈도우관련 메시지 정리

WM_CREATE

²        CreateWindow() 함수에 의해 메인 윈도우가 생성된 직후에 화면에 보여지기 전에 보내지는 메시지.

²        각종 초기화를 하기에 적합한 장소.

²        참고로, 대화상자는 이 메시지 대신 WM_INITDIALOG 메시지를 받는다.

²        wParam : 사용되지 않음.

²        lParam : 윈도우 생성정보인 CREATESTRUCT 구조체의 포인터.

WM_DESTROY

²        윈도우가 파괴될 때 보내지는 메시지.

²        각종 마무리 작업 하기에 적합한 장소.

²        사용자가 DestroyWindow 함수를 호출할 때, 윈도우가 파괴되는데, 이 함수 호출 결과로 WM_DESTROY 메시지가 전달된다.

²        사용자가 Alt+F4 혹은 닫기 버튼을 누를 경우, WM_CLOSE 메시지가 전달되며 이 메시지를 별도로 처리하지 않으면 DefWindowProc Destroywindow함수를 호출하여 윈도우를 파괴한다.

²        파괴되는 윈도우가 메인 윈도우의 경우, PostQuitMessage 함수를 반드시 호출하여 프로세스의 메시지 루프를 종료하도록 해야한다. 이 처리를 생략하면, 윈도우만 파괴되고, 메시지 루프는 계속 실행중인 상태가 되므로 프로세스가 종료되지 않는다.

WM_ACTIVATE

²        윈도우의 활성화 상태가 변경될 때 보내지는 메시지로써, 새로 활성화되는 윈도우와 비활성화 되는 윈도우에게 동시에 보내진다.

²        활성화 상태는 오직 하나만 존재할 수 있다.

²        LOWORD(wParam) : 윈도우가 활성화 되었는지 비활성화 되었는지의 정보.

n        WA_ACTIVE : 마우스 클릭 이외의 방법으로 활성화 됨. (SetActiveWindow() 함수를 호출했거나, Alt+Tab, Alt+Esc 등의 단축키로 활성화 되었을 경우)

n        WA_CLICKACTIVE : 마우스 클릭에 의해 활성화 됨.

n        WA_INACTIVE : 비 활성화 됨.

²        HIWORD(wParam) : 윈도우의 최소화 상태를 전달. 최소화 되어있으면 0 이외의 값을 가짐.

²        lParam : 활성화 상태가 변경된 다른 윈도우의 핸들이 전달. , 활성화 상태가 바뀐 상대편 윈도우의 핸들 값이다. 상대편 윈도우가 없을 경우는 NULL이 전달.

WM_CLOSE

²        윈도우가 닫히기 전에 전달되는 메시지이며, 메인윈도우인 경우는 프로그램이 종료된다는 신호임.

²        이 메시지를 처리하지 않고 DefWindowProc으로 보내면 DestroyWindow함수를 호출하여 윈도우를 파괴하도록 한다.

²        이 메시지가 전달되었을 때는 아직 윈도우가 파괴된 것이 아니므로, 메시지박스의 취소 등을 통해 윈도우가 파괴되는 것을 중간에 차단할 수 있다.

WM_SIZE

²        윈도우의 크기가 변경될 때 전달된다. (사용자가 윈도우 경계선을 드래그해서 직접 크기를 변경할 때 혹은 내부에서 MoveWindow, SetWindowPos 등의 함수로 윈도우의 크기를 변경할 때 등)

²        wParam : 윈도우의 크기가 변경된 이유와 유형 값을 가짐

n         SIZE_MAXHIDE : 다른 윈도우가 최대화되어 이 윈도우가 가려졌다.

n         SIZE_MAXIMIZED : 윈도우가 최대화되었다.

n         SIZE_MAXSHOW : 다른 윈도우가 원래 크기로 복구되어 이 윈도우가 드러났다.

n         SIZE_MINIMIZED : 윈도우가 최소화되었다.

n         SIZE_RESTORED : 윈도우의 크기가 변경되었다.(윈도우의 크기를 사용자가 드래그 등으로 직접 변경할 때)

²        lParam : 윈도우의 변경된 후의 크기. LOWORD(lParam)-> 윈도우의 폭, HIWORD(lParam)-> 윈도우의 높이.

²        사용예) 윈도우 가운데에 문자를 출력하는 프로그램이라면, 윈도우 크기가 변경될 때마다 다시 출력해줘야한다.

WM_MOVE

²        윈도우의 위치가 변경되면 이 메시지가 보내진다. (위치가 완전히 옮겨진 후에 보내짐)

²        LOWORD(lParam) : 새로 옮겨진 윈도우의 X좌표

²        HIWORD(wParam) : 새로 옮겨진 윈도우의 Y좌표. 차일드 윈도우는 부모 윈도우의 작업 영역을 기준으로 한 좌표임.

WM_SHOWWINDOW

²        윈도우의 보임 상태가 변경되기 직전에 보내지는 메시지.

²        사용예) 애니메이션이 돌고 있다가 윈도우가 가려지면 굳이 리소스 낭비하면서 돌릴 이유가 없다. 잠깐 멈췄다가 다시 보여지면 애니매이션을 이어서 돌린다는지의 작업.

²        wParam : TRUE 이면 윈도우가 보여지는 것이고, FASLE이면 윈도우가 숨겨지는 것이다.

²        lParam : 이 메시지가 전달된 이유이다. 0이면 ShowWindow()함수에 의해 이 메시지가 전달된 것이며, 0이 아니면 다음 값 중 하나가 된다. (많이 사용되지는 않음)

SW_OTHERRUNZOOM : 다른 윈도우가 최대화되었다가 복구 또는 최소화됨으로써 이 윈도우가 보여지게 되었다.

SW_OTHERZOOM : 다른 윈도우가 최대화되면서 이 윈도우가 가려지게 되었다.

SW_PARENTCLOSING : 부모 윈도우가 최소화되었다.

SW_PARENTOPENING : 부모 윈도우가 복구되었다.

● 그 밖에 메시지들..

²        WM_ERASEBKGND : 윈도우의 크기가 변경되었거나 다른 윈도우에 가려진 부분이 드러났다거나 할 때 배경을 지우기 위해 이 메시지가 보내진다. WM_PAINT에서 작업 영역에 출력을 하기 전에 먼저 전에 그려져있던 내용을 지워야한다. 이 메시지를 처리하지 않을 경우 DefWindowProc은 배경 브러시로 작업 영역을 지운 후 WM_PAINT에서 출력을 내보내게 된다.

²        WM_HSCROLL : 수평 스크롤바를 클릭 할 때 발생

²        WM_VSCROLL : 수직 스크롤바를 클릭 할 때 발생

²        WM_COMMAND : 메뉴 항목을 선택 했을 때 발생

²        WM_CONTEXTMENU : 팝업 메뉴 전용 메시지

 

필수 윈도우관련 함수 정리

GetWindowRect() 함수

BOOL GetWindowRect(HWND hWnd, LPRECT lpRect);

 

²        윈도우의 현재 위치를 lpRect를 통해 좌표값으로 알려준다. (전체화면을 기준으로 한 좌표임)

²        윈도우의 크기를 구하고 싶으면, right-left, bottom-top을 계산하면 된다.

GetClientRect() 함수

BOOL GetClientRect(HWND hWnd, LPRECT lpRect);

 

²        윈도우의 작업영역(ClientArea) 크기를 계산해준다.

²        작업영역이란, 윈도우의 타이틀바, 스크롤바, 경계선, 메뉴 등을 제외한 영역이다.

²        lpRect left, top은 항상 0이며, right, bottom이 곧 윈도우의 크기를 나타낸다.

ShowWindow() 함수

BOOL ShowWindow(HWND hWnd, int nCmdShow);

 

²        윈도우의 보이기/숨기기/최대화/최소화/복구상태 등 현재 상태를 지정한다.

²        nCmdShow : 지정하고자 하는 보이기 상태이며, 다음 값 중 하나를 지정한다.

u       SW_SHOW, SW_HIDE, SW_MAXMIZE, SW_MINIMIZE, SW_RESTORE ..

²        리턴값 : 윈도우가 이전에 보이던 상태였다면 0이 아닌값을 리턴, 보이지 않던 상태였다면 0을 리턴.


 ※ SW_SHOW, SW_HIDE 를 받는 쪽 처리
case WM_ACTIVATE:
  if(LOWORD(wParam) == WA_INACTIVE)//SW_SHOW
   strcpy(Mes, "비활성화 상태");
  else                                                 //SW_HIED
   strcpy(Mes, "활성화 상태");
  InvalidateRect(hWnd, NULL, TRUE);
  return 0;

 // wParam ; TRUE-활성화 , FALSE-비활성화
 // lParam ; 활성화 상태가 변경될 때 상대편 윈도우를 소유한 스레드
 //   ID 가 전달된다.
 // WM_ACTIVATE 메시지
 // LOWORD(wParam) -
 //  WA_INACTIVE ; 비활성화
 //  WA_CLICKATIVE ; 마우스 클릭에 의해 윈도우 활성화
 //  WA_ACTIVE ; 마우스 클릭 이외의 방법에 의해 윈도우 활성화  
 // HIWORD(wParam) - 윈도우가 최소화 상태인가 아닌가를 전달해
 //     주는데 상위 워드가 0이외의 값을 가지면
 //     윈도우가 최소화 되어 있는것이다.
 // lParam - 윈도우의 활성화/비활성화에 따라 활성화가 변경된
 //   상대편 윈도우의 핸들이 전달된다.



MoveWindow() 함수

BOOL MoveWindow(HWND hWnd, int X, int Y, int nWidth, int nHeight, BOOL bRepaint);

 

²        윈도우의 위치와 크기를 변경하는 가장 일반적인 함수.

²        X, Y : 윈도우의 위치를 지정.

²        nWidth, nHeight : 윈도우의 폭과 높이를 지정.

²        bRepaint : 이동 후에 윈도우를 다시 그릴 것인가 여부. TRUE면 이동 후 WM_PAINT 메시지를 보내 윈도우를 다시 그리도록 한다. 이때 작업영역, 비작업영역 다 그려지게 된다.

²        인자를 통해 위치는 물론 크기까지 한꺼번에 변경할 수 있다. 만약 위치만 변경하고 싶다면, GetWindowRect를 통해 영역을 구한 다음 원하는 값만 변경하는 식으로 처리한다. 만약 크기만 변경하고 싶다면, SetWindowPos함수를 사용한다.

Posted by Kelly Cook
,

// 변수들

UINT : unsigned int
WORD : unsigned short


// 함수에서 쓰는 것들

SetMapMode

 _ MM_TEXT : X축은 왼쪽에서 오른쪽으로 커지고, Y축은 아래로 내려갈 때 커집니다


DrawText : 문자를 출력할 때 어느 영역을 정하고 이영역에 출력하는 함수

 값

  내용

DT_TOP

DT_BOTTOM

DT_LEFT

DT_RIGHT

 설정된 lpRect영역에 상단으로(DT_TOP) 하단으로(DT_BOTTOM) 좌측으로(DT_LEFt)우측으로(DT_RIGHT) 문자를 출력 한다. DT_SINGLELINE가 함께 지정되어 있어야 한다.

DT_CENTER

 설정된 영역의 가로중앙에 정렬시킨다

DT_VCENTER

 설정된 영역의 세로 중앙에 정렬 시킨다.



DT_EXPANDTABS

 문자열에 탭이 포함되어 있을 때 공백으로 띄어 준다.

 기본폭은 8이다.

DT_CALCRECT

 텍스트가 출력할 사각형의 영역을 계산한다. 이때 문자는 출력되지 않는다.

DT_EXTERNALLEADING

 문자의 높이를 계산할 때 extenal leading sapce를 호함시킨다.

DT_SINGLELINE

행바꿈과 라인 피드를 무지하고 한줄로 출력한다.

DT_NOCLIP

클리핑 없이 문자를 출력한다.

DT_NOPREFIX

&문자를 표식어로 상용하지 않는다. 일반적으로& 코드는 출력하지 않고 다음 문자에 밑줄을 그린다.

DT_TABSTOP

Flat 상위 8비트에 값을 넣어서 탭간격을 변화시킨다.

DT_WORDBREAK

문자열이 영역밖으로 출력되면 개행하여 출력한다.


SetBkMode

 - TRANSPARENT : 투명하게 하는 것으로 글자 뒤로 배경이 보이게 한다

 - OPAQUE : 불투명한 배경을사용 뒷배경이 지워진다


CreateFont

▶fnWeight : 폰트의 무게를 0~1000까지의 값으로 설정한다. 쉽게 말해서 폰트의 두께를 설정한다. 0~1000까지의 값을 지정할 수 있으며 보통 굵기인 FW_NORMAL과 굵은 문자인 FW_BOLD만 사용된다.

두께
FW_DONTCARE 0
FW_THIN 100
FW_EXTRALIGHT 200
FW_ULTRALIGHT 200
FW_LIGHT 300
FW_NORMAL 400
FW_REGULAR 400
FW_MEDIUM 500
FW_SEMIBOLD 600
FW_DEMIBOLD 600
FW_BOLD 700
FW_EXTRABOLD 800
FW_ULTRABOLD 800
FW_HEAVY 900
FW_BLACK 900

▶fdwCharSet : 문자 셋을 설정한다. 폰트 매퍼가 논리 폰트를 생성할 때 참조하는 중요한 값이므로 폰트의 타입 페이스를 지정할 경우 반드시 해당 폰트의 문자셋과 일치하도록 써 주어야 한다.

문자셋 실제값 설명
ANSI_CHARSET 0 윈도우즈에서 사용하는 문자셋
DEFAULT_CHARSET 1 이름과 크기만으로 폰트를 선택하도록 한다. 만약 이 문자셋으로 폰트를 생성할 때 지정한 폰트가 없으면 임의의 문자셋으로 대체될 수도 있기 때문에 원하지 않는 폰트가 생성될 수도 있다.
SYMBOL_CHARSET 2  
OEM_CHARSET 255 운영체제에 종속적인 문자셋
HANGUL_CHARSET 129 HANGUEL_CHARSET으로 중복 정의되어 있다.
BALTIC_CHARSET 186  
CHINESEBIG5_CHARSET 136  
EASTEUROPE_CHARSET 238  
GB2312_CHARSET 134  
GREEK_CHARSET 161  
MAC_CHARSET 77  
RUSSIAN_CHARSET 204  
SHIFTJIS_CHARSET 128  
TURKISH_CHARSET 162  
JOHAB_CHARSET 130 한글 윈도우즈에서만 사용 가능
HEBREW_CHARSET 177 중앙 아시아 윈도우즈에서만 사용 가능
ARABIC_CHARSET 178 중앙 아시아 윈도우즈에서만 사용 가능
THAI_CHARSET 222 타이 윈도우즈에서만 사용 가능

▶fdwOutputPrecision : 출력 정확도를 설정한다. 같은 이름의 폰트가 여러 벌 있을 경우 폰트 매퍼가 어떤 폰트를 선택할 것인가를 지정한다.

설명
OUT_CHARACTER_PRECIS 사용되지 않는 값이다.
OUT_DEFAULT_PRECIS 폰트 매퍼의 디폴트 동작을 정의한다.
OUT_DEVICE_PRECIS 디바이스 폰트를 선택하도록 한다.
OUT_OUTLINE_PRECIS 트루 타입 또는 외곽선 폰트를 선택하도록 한다.
OUT_RASTER_PRECIS 래스트 폰트를 선택하도록 한다.
OUT_STRING_PRECIS 폰트 매퍼가 사용하지 않는 값이되 래스트 폰트 열거시 리턴된다.
OUT_STROKE_PRECIS 폰트 매퍼가 사용하지 않는 값이되 래스트 폰트 열거시 리턴된다.
OUT_TT_ONLY_PRECIS 트루 타입 폰트를 선택하도록 한다. 트루 타입 폰트가 없으면 디폴트 동작대로 한다.
OUT_TT_PRECIS 트루 타입 폰트를 선택하도록 한다.

▶fdwClipPrecision : 클리핑 정확도를 설정한다. 클리핑 영역을 벗어난 문자의 일부를 어떻게 클립할 것인가를 지정하면 다음과 같은 값들이 있다.

설명
CLIP_DEFAULT_PRECIS 디폴트 클리핑 동작
CLIP_CHARACTER_PRECIS 사용되지 않음
CLIP_STROKE_PRECIS  
CLIP_MASK 사용되지 않음
CLIP_EMBEDDED  
CLIP_LH_ANGLES  
CLIP_TT_ALWAYS 사용되지 않음

▶fdwQuality : 논리적 폰트를 물리적 폰트에 얼마나 근접시킬 것인가를 지정한다.

설명
DEFAULT_QUALITY 폰트의 모양을 문제삼지 않는다.
DRAFT_QUALITY PROOF_QUALITY보다 한단계 낮은 품질 등급이다.
PROOF_QUALITY 논리 폰트의 속성보다 글자의 품질을 더 중요시한다. 래스터 폰트의 경우 크기가 가장 근접한 폰트가 선택된다.

▶fdwPitchAndFamily : 폰트의 피치와 그룹을 설정한다.하위 2비트는 폰트의 피치를 나타내며 상위 4비트는 폰트의 패밀리를 지정한다. 피치는 폰트의 폭이 글자마다 다른가 일정한가를 지정하며 DEFAULT_PITCH, FIXED_PITCH(고정폭), VARIABLE_PITCH(가변폭) 세가지가 있다. 패밀리는 획의 굵기와 세리프 특성이 같은 폰트의 모임이며 다음 다섯 가지 종류가 있다.

패밀리 설명
FF_DECORATIVE 장식체
FF_DONTCARE 패밀리를 상관하지 않는다. 또는 패밀리를 알 수 없다. 이 값은 실제로 존재하는 패밀리가 아니라 임의의 패밀리를 지칭한다.
FF_MODERN 고정폭이며 세리프는 있을 수도 있고 없을 수도 있따.
FF_ROMAN 세리프가 있고 가변폭이다.
FF_SCRIPT 손을 쓴 듯한 필기체 형식의 폰트
FF_SWISS 세리프가 없고 고정폭이다.

이 인수에 피치와 패밀리 값을 OR 연산자로 같이 지정한다. 예를 들어 고정폭의 Roman 패밀리 폰트를 원할 경우 FIXED_PITCH | FF_ROMAN값을 지정하면 된다.


SetTextAlign

▶fMode:정렬 방식과 CP사용 여부 등의 플래그를 지정한다. 정렬 방식은 수평, 수직에 대해 각각 한 종류만 선택할 수 있다.

플래그 설명
TA_BLASELINE 텍스트의 기준선에 정렬
TA_BOTTOM 수직 하단 정렬
TA_TOP 수직 상단 정렬
TA_CENTER 수평 중앙 정렬
TA_LEFT 수평 왼쪽 정렬
TA_RIGHT 수평 오른쪽 정렬
TA_NOUPATECP 문자열이 출력된 후 CP는 변경되지 않는다.
TA_RTLREADING 문자열을 오른쪽에서 왼쪽으로 출력한다. 한글 윈도우즈에서는 의미가 없다.
TA_UPDATECP 문자열 출력 좌표 CP를 사용하며 문자열 출력 후 CP를 갱신한다.


CreateWindowEx

 - WS_THICKFRAME : 크기 조정이 가능한 두꺼운 경계선을 가진다

 - WS_CAPTION : 타이틀 바를 가진 윈도우를 만들며 WS_BORDER 스타일을 포함한다


// 펜 스타일 종류

- PS_SOLID : 실선을 그린다

- PS_DASH : 파선을 그린다

- PS_DOT : 점선을 그린다

- PS_DASHDOT : 점선과 파선으로 번갈아 구성된 선을 그린다.

- PS_NULL : 아무것도 그리지 않는다. (자리를 찾이하나?)

- PS_INSIDEFRAME : 이상한 펜 모양, 기본적으로 PS_SOLID와 같지만 도형 드로잉 함수에 건내주는 좌표의 의미가 변한다. 실선 이되 사각형 안쪽으로만 그려진다.(아직 이해가 잘 안됨)

// 빗금 패턴의 종류
- HS_BDIAGONAL : 우상에서 좌하로의 빗금
- HS_CROSS : 십자가 형태
- HS_DIAGCROSS : 사선십자가 형태
- HS_FDIAGONAL : 좌상에서 우하로의 빗금
- HS_HORIZONTAL : 수평 빗금
- HS_VERTICAL : 수직 빗금


//
- BS_SOLID : 단일색
- BS_PATTERN : 비트맵 패턴
- BS_HATCHED : 빗금 패턴

[출처] 정의된 define들|작성자 갓엘

Posted by Kelly Cook
,
Prob.

1) Close your workspace.
2) delete .ncb file, .opt file and .clw file
3) Now you open the workspace and you can find the class view containing the class details
Posted by Kelly Cook
,