Showing posts with label WINAPI. Show all posts
Showing posts with label WINAPI. Show all posts

2011/04/04

시스템 종료와 관련된 윈도우 메시지 : WM_QUERYENDSESSION, WM_ENDSESSION



WM_QUERYENDSESSION


시스템 종료 확인 메시지






시스템이 종료 또는 로그오프시에 응용프로그램에 WM_QUERYENDSESSION 이 전달 되고, 이 때 종료를 거부하며련 FALST 를 허가 하려면 TRUE 를 반환한다.


TRUE 를 반환하면 시스템은 해당 응용프로그램에 WM_ENDSESSION 를 전달하여 프로그램에 시스템 종료를 알리고 시스템을 종료한다.

if ( lParam & ENDSESSION_LOGOFF ) 
{
// Log-off
}
else
{
// Shutdown
}



참고 사이트 : WinAPI, MSDN




WM_ENDSESSION


시스템 종료 메시지





시스템 종료가 결정되 되고 종료됨을 알리는 메시지 이다. 메시지 처리 후 0을 리턴 한다. 



if ( wParam == TRUE )
{
// Shutdowning...

if ( lParam & ENDSESSION_LOGOFF )
{
// Log-off
}
else
{
// Shutdown
}
}
else
{
// ??
}



참고 사이트 : WinAPI, MSDN 

 <

Original Post : http://neodreamer-dev.tistory.com/526

2008/07/11

유니코드와 아스키코드간의 변환 함수

MySQL++ 라이브러리 관련되어 테스트를 해보다 보게된 함수이다.

함수 스택 버퍼를 사용하는 W2A, A2W 보다 간단하게 함수를 만들어 사용하는게 메모리 운영면에서 여러모로 좋다.


//// ToUCS2 ////////////////////////////////////////////////////////////
// Convert a C string in UTF-8 format to UCS-2 format.

bool CExampleDlg::ToUCS2(LPTSTR pcOut, int nOutLen, const char* kpcIn)
{
if (strlen(kpcIn) > 0) {
// Do the conversion normally
return MultiByteToWideChar(CP_UTF8, 0, kpcIn, -1, pcOut,
nOutLen) > 0;
}
else if (nOutLen > 1) {
// Can't distinguish no bytes copied from an error, so handle
// an empty input string as a special case.
_tccpy(pcOut, _T(""));
return true;
}
else {
// Not enough room to do anything!
return false;
}
}


//// ToUTF8 ////////////////////////////////////////////////////////////
// Convert a UCS-2 multibyte string to the UTF-8 format.

bool CExampleDlg::ToUTF8(char* pcOut, int nOutLen, LPCWSTR kpcIn)
{
if (_tcslen(kpcIn) > 0) {
// Do the conversion normally
return WideCharToMultiByte(CP_UTF8, 0, kpcIn, -1, pcOut,
nOutLen, 0, 0) > 0;
}
else if (nOutLen > 0) {
// Can't distinguish no bytes copied from an error, so handle
// an empty input string as a special case.
*pcOut = '\0';
return true;
}
else {
// Not enough room to do anything!
return false;
}
}


Original Post : http://neodreamer-dev.tistory.com/122

2008/06/19

시스템 커서 불러오기

간단한 것인데 종종 잊고 그런다. ^^*


HCURSOR LoadCursor( 
HINSTANCE hInstance,
LPCTSTR lpCursorName
);


hInstance : 커서를 불러들일 인스턴스. NULL 일경우 시스템 리소스

lpCursorName : 적용될 커서
IDC_APPSTARTING : 표준 커서와 작은 모래시계 모양 (백그라운드 작업)
IDC_ARROW : 표준 커서 (보통 선택)
IDC_CROSS : 십자 모양 (정밀도 선택)
IDC_HAND : 손 모양 (연결 선택)
IDC_HELP : 화살표와 물음표 (도움말 선택)
IDC_NO : 사선이 그어진 원형 모양 (알 수 없음)
IDC_SIZEALL : 네 방향 화살표 (이동)
IDC_SIZENESW : 좌하-우상을 잇는 화살표 (대각선 방향 크기 조절 2)
IDC_SIZENS : 아래위 화살표 (수직 크기 조절)
IDC_SIZENWSE : 좌상-우하을 잇는 화살표 (대각선 방향 크기 조절 1)
IDC_SIZEWE : 좌우 화살표 (수평 크기 조절)
IDC_UPARROW : 위쪽 화살표 (대체선택)
IDC_WAIT : 모래시계 (대체선택)
IDC_IBEAM : 텍스트 박스 커서 (텍스트 입력)

괄호안의 이름은 마우스 등록정보의 포인터 탭에서 명명된 이름이다.


사용예
SetCursor(LoadCursor(0, IDC_ARROW));


Original Post : http://neodreamer-dev.tistory.com/108