문자열에는 두가지 타입이 존제

str, unicode


함수 설명

<str>.decode() : str -> unicode

<unicode>.encode() : unicode -> str


unicode는 코드셋이 없음

str은 다양한 코드셋이 있음

str(949) -> unicode : <str>.decode('949')

str(utf8) -> unicode : <str>.decode('utf8')

unicode -> str(949) : <unicode>.encode('949')

unicode -> str(utf8) : <unicode>.encode('utf8')

str(949) -> unicode : unicode(<str>, '949')

str(utf8) -> unicode : unicode(<str>, 'utf8')

* 949 = cp949, ms949 : 다 같은것

윈도우 코드셋 번호

pyhton os.path

프로그래밍 2014. 12. 23. 16:03


http://devanix.tistory.com/298

'프로그래밍' 카테고리의 다른 글

git 소개  (0) 2015.08.21
Visual Assist X 소개  (0) 2015.08.21
vs 에서 AlwaysCreate 설정으로 항상빌드하는 현상 제거  (0) 2014.11.05
std::bind 사용법  (0) 2014.10.23
___report_rangecheckfailure() 링크에러  (0) 2014.09.17


프로젝트 파일 리스트중 실제 파일이 존제하지 않는경우 발생한다

필요없는파일은 제거해주자

'프로그래밍' 카테고리의 다른 글

Visual Assist X 소개  (0) 2015.08.21
pyhton os.path  (0) 2014.12.23
std::bind 사용법  (0) 2014.10.23
___report_rangecheckfailure() 링크에러  (0) 2014.09.17
Microsoft Visual Studio C++ 의 try catch 내부 처리방법  (0) 2014.09.01

std::bind 사용법

프로그래밍 2014. 10. 23. 19:59


std::bind(함수 주소, 함수인자1, 함수인자2, 함수인자3, ...)

함수인자에 초기값을 설정한수 있고

bind로 생성한 함수의 인자로 받을 것이면

std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, ... 등을 새로운 함수 인자와 맵핑 시킬수있다.


void Func( int iA, float fB, bool bC );

라는 3개의 인자를 가지는 함수가있다면


auto funcA = std::bind( Func, 10, 2.0f, true );

funcA()

다음과 같이 단일 함수로 사용가능하고


그중 float 인자값을 새로운 함수의 인자로 받으려면

auto funcB = std::bind( Func, 10, std::placeholders::_1, true );

funcB( 2.0f );


처음인자는 float 두번쩨 인자는 int를 받고 싶으면

auto funcC = std::bind( Func, std::placeholders::_2, std::placeholders::_1, true );

funcC( 2.0f, 10 );


3번쩨 인자에 bool 값을 받고 싶으면

auto funcD = std::bind( Func, std::placeholders::_2, std::placeholders::_1, std::placeholders::_3 );

funcD( 2.0f, 10, true );


그리고 전역함수가 아닌 클래스 함수의 경우

&ClassA::FuncA 행태를 바인드의 첫번쩨 인자로 사용한다





비주얼 스튜디오가

 try, catch 를

내부적으로

__try, __except

 로 처리하는 방법

http://members.gamedev.net/sicrane/articles/exception.html


'프로그래밍' 카테고리의 다른 글

std::bind 사용법  (0) 2014.10.23
___report_rangecheckfailure() 링크에러  (0) 2014.09.17
wm_quit vs wm_close vs wm_destroy 차이  (0) 2014.02.07
HINSTANCE 구하기 GetModuleHandle(NULL)  (0) 2014.02.06
VS2012 컬러 스킨 변경  (0) 2013.09.17


[Python] XML <=> Dict <=> JSON

http://mcchae.egloos.com/viewer/10996383



출처 : http://ssb777.blogspot.kr/2009/07/mfc-wmclose-wmdestroy-wmquit.html

 

WM_CLOSE

윈도우가 닫히기 전에 이 메시지가 전달되며 메인 윈도우인 경우는 응용 프로그램이 종료된다는 신호이다.
이 메시지를 처리하지 않고 DefWindowProc으로 보내면 DestroyWindow 함수를 호출하여 윈도우를 파괴하도록 한다.
이 메시지가 전달되었을 때는 아직 윈도우가 파괴된 것이 아니므로 윈도우가 파괴되는 것을 중간에 차단할 수 있다.
미저장 파일이 있거나 프로그램을 종료할 상황이 되지 않을 때 사용자에게 메시지 박스를 통해 종료 사실을 확인시킬
수 있으며 이 메시지를 가로채서 단순히 return하면 DestroyWindow가 호출되지 않도록 할 수 있다.
예를 들어 프로그램을 사용자가 닫을 때 "저장할까요?"라는 확인이 필요한 경우 등에 사용할 수 있다.

WM_DESTROY

윈도우가 파괴될 때 이 메시지가 전달된다.
사용자가 Alt+F4 또는 닫기 버튼을 누를 경우 WM_CLOSE 메시지가 전달되며 이 메시지를 별도로 처리하지 않으면
DefWindowProc은 DestroyWindow 함수를 호출하여 윈도우를 파괴한다. 또는 프로그램 코드 내부에서 명시적으로
DestroyWindow 함수를 호출할 때도 윈도우가 파괴되는데 이 함수 호출 결과로 WM_DESTROY 메시지가 전달된다.
이 메시지를 받은 윈도우는 윈도우의 종료를 위한 처리를 해야 하는데 예를 들어 열어 놓은 파일을 닫고 할당한
메모리를 해제하는 등의 정리 작업을 한다. WM_CREATE에서의 초기화 처리의 반대 동작이 이 메시지에 작성되는
것이 일반적이며 그외 레지스트리에 미보관 정보를 저장하는 등의 작업을 할 수 있다. 만약 파괴되는 윈도우가
클립보드 체인에 속해 있으면 자신을 클립보드 체인에서 제거해야 한다.
DestroyWindow 함수는 파괴할 윈도우를 화면에서 숨긴 후 이 메시지를 보내므로 이 메시지를 받은 시점에서는
윈도우 자체가 파괴되지 않은 상태이다. 또한 DestroyWindow 함수는 자식 윈도우에게도 이 메시지를 차례대로
보내주는데 부모 윈도우가 먼저 이 메시지를 받고 자식 윈도우에게로 이 메시지가 보내진다. 따라서 부모 윈도우가
이 메시지를 처리하는 동안은 모든 자식 윈도우가 아직 파괴되기 전이므로 자식 윈도우를 프로그래밍할 수 있다.
파괴되는 윈도우가 메인 윈도우일 경우 PostQuitMessage 함수를 반드시 호출하여 프로세스의 메시지 루프를
종료하도록 해야 한다. 만약 이 처리를 생략하면 윈도우만 파괴되고 메시지 루프는 계속 실행중인 상태가 되므로
프로세스가 종료되지 않는다.

WM_QUIT

응용 프로그램을 종료하라는 신호이다. PostQuitMessage 함수 호출에 의해 발생하며 GetMessage 함수가 0을
리턴하도록 함으로써 메시지 루프를 종료시키는 역할을 한다. GetMessage 함수는 WM_QUIT 이외의 모든 메시지에
대해 0이 아닌 값을 리턴하므로 계속 루프를 돌지만 WM_QUIT에 대해서만 0을 리턴한다.
그래서 메시지 루프는 통상 다음과 같이 작성된다.

while(GetMessage(&Message, 0, 0, 0))
{
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return (int)Message.wParam;


GetMessage 함수가 0이 아닌 값을 리턴하는 동안 무한히 이 루프를 도는데 단 WM_QUIT가 전달될 때는
while문이 종료되며 따라서 WinMain이 종료된다. 메인 윈도우의 WM_DESTROY에서는 반드시 PostQuitMessage
함수를 호출하여 메시지 루프가 종료될 수 있도록 해 주어야 한다. 그렇지 않으면 메인 윈도우는 파괴되었으나
프로세스는 계속 실행중인 상태가 된다.

PeekMessage 함수는 WM_QUIT 메시지와 상관없이 메시지 큐에 메시지가 있는지만 리턴하므로 메시지 루프를
구성할 때 따로 WM_QUIT 메시지를 점검해야 한다.
for(;;)
{
if(PeekMessage(&Message, NULL, 0, 0, PM_REMOVE))
{
if (Message.message == WM_QUIT)
{
break;
}

TranslateMessage(&Message);
DispatchMessage(&Message);
}
else
{
// 백그라운드 작업
}
}


조사한 메시지가 WM_QUIT이면 메시지 루프를 탈출하는 별도의 코드가 필요하다.
WM_QUIT는 윈도우에게 전달되는 메시지가 아니므로 윈도우 프로시저는 이 메시지를 받을 수 없다.
윈도우 프로시저까지 전달되기 전에 메시지 루프에서 이 메시지를 차단하여 루프를 탈출하게 된다.

WM_NCDESTROY
비작업 영역이 파괴될 때 보내진다.
윈도우와 그 차일드들이 먼저 파괴된 후에 비작업 영역이 파괴되므로 이 메시지는 윈도우가 가장 마지막으로 받는 메시지이다.
WM_DESTROY보다 뒤에 발생되며 이 메시지를 받았을 때는 모든 차일드가 이미 파괴된 후이다.
반면 WM_DESTROY 메시지는 차일드가 아직 파괴되기 전이다.
종료 처리가 필요할 경우는 일반적으로 WM_DESTROY 메시지에 코드를 작성하므로 이 메시지는 실용적인 가치가 거의 없는
셈이며 처리하는 경우가 극히 드물다.



HINSTANCE hInstance = (HINSTANCE)GetModuleHandle(NULL);

 

'프로그래밍' 카테고리의 다른 글

Microsoft Visual Studio C++ 의 try catch 내부 처리방법  (0) 2014.09.01
wm_quit vs wm_close vs wm_destroy 차이  (0) 2014.02.07
VS2012 컬러 스킨 변경  (0) 2013.09.17
Manual Unpacking  (0) 2013.08.02
XMMATRIX 런타임에러  (0) 2013.04.19


  • 리스트 내장
    • 문법 : [ <수식> for <변수> in <배열, 반복자등> if <조건> ]
    • 두개이상의 for문을 중첩 가능하다
      • [ <수식>
             for <변수> in <배열, 반복자등>
             for <변수> in <배열, 반복자등> ...
             if <조건> ]
    • 튜플 리스트로도 출력 가능하다
      • [ (<수식1>, <수식2>)
             for <변수> in <배열, 반복자등> ...
             if <조건> ]
    • Ex
      • [ ( k, j, k + j ) for k in range(3) for j in range(4) if j % 2 ]
      •  = [ (0, 1, 1), (0, 3, 3), (1, 1, 2), (1, 3, 4), (2, 1, 3), (2, 3, 5) ]
  • 발생자
    • 문법 : ( <수식> for <변수> in <배열, 반복자등> if <조건> )
    • 리스트 내장과 동일하나 [] 대신 () 를 사용한다
    • 리스트 내장은 실제 리스트를 생성하나 발생자는 수식을 생성한다 (메모리 효율)
  • set 내장?
    • 문법 : { <수식> for <변수> in <배열, 반복자등> if <조건> }
    • 리스트 내장과 동일하나 [] 대신 {} 를 사용한다
    • 리스트 내장은 실제 리스트를 생성하나 {}는 set을 생성한다 (중복 제거)

 

'프로그래밍 > Python' 카테고리의 다른 글

python 문자열 unicode encode() decode()  (0) 2015.05.07
[Python] XML <=> Dict <=> JSON  (0) 2014.05.22
python map, filter, reduce  (0) 2013.11.20
python 파일 용량 확인  (0) 2013.11.19
ubuntu python mysqldb 설치  (0) 2013.11.18