2003. 6. 19. 23:56
CPropertySheet에 맴버 함수로 BOOL ExitCheck()를 만들어줍니다.
각각 Page에 OnQueryCancel() 함수에서 부모에 ExitCheck함수를 불러 메시지 박스를 띄워주고
종료하시겠습니까?? 에서.......종료한다면..... return TRUE, 종료하시 않겠다면 return FALSE를 해주면 됩니다..
예제)
BOOL CSheetPropertySheet::ExitCheck()
{
if ( AfxMessageBox("종료하시겠습니까?", MB_YESNO|MB_ICONQUESTION) == IDYES )
return TRUE;
else
return FALSE;
}
BOOL CPropertyPage::OnQueryCancel()
{
if( ((CSheetPropertySheet*)GetParent())->ExitCheck() )
return CPropertyPage::OnQueryCancel();
else
return FALSE;
}
이렇게 하면 되지요.
각각 Page에 OnQueryCancel() 함수에서 부모에 ExitCheck함수를 불러 메시지 박스를 띄워주고
종료하시겠습니까?? 에서.......종료한다면..... return TRUE, 종료하시 않겠다면 return FALSE를 해주면 됩니다..
예제)
BOOL CSheetPropertySheet::ExitCheck()
{
if ( AfxMessageBox("종료하시겠습니까?", MB_YESNO|MB_ICONQUESTION) == IDYES )
return TRUE;
else
return FALSE;
}
BOOL CPropertyPage::OnQueryCancel()
{
if( ((CSheetPropertySheet*)GetParent())->ExitCheck() )
return CPropertyPage::OnQueryCancel();
else
return FALSE;
}
이렇게 하면 되지요.
2003. 6. 19. 20:46
안녕하세요?
김태인입니다. (이름 말한다고 누가 아나 ㅡ_ㅡ)
김윤환(alf76)님의 요청으로 꼴에 강좌도 하게됐습니다 ㅡ_ㅡ
다이얼로그에 관련된 또는 Document-View 방식의 스킨 씌우는 방법이
참 많죠? 근대 저는 그거 예제들 보면 솔직히 뭔 소린지 모르겠더군요 ㅡ_ㅡ
또한 최근에 나오는 소규모 어플리케이션들(메신저, 간단한 온라인 게임등)을 보면
다 스킨이 씌워져있죠...
그것에 관한 강좌를 간단히 하겠습니다.
최근에 MS 에서 Media Player 7.0 SDK 를 발표하면서 그안에 스킨 기능이 첨가
되었는데...역시 COM 이라서 이쪽에 지식이 없는 사람은 접근하기도 힘들죠...(저도 지식이 없어서 ㅡ_ㅡ)
그래서 저는 주로 MFC에서 모든걸 처리를 하는데...
MFC 기반의 제가 사용하는 법(?)의 스킨을 알려드릴께여...
스킨 = 그림, 스킨에 있는 클릭 가능한(?) 그림 = 이미지 버튼 이라고 생각하면 좋습니다.
예제를 보면서 설명하겠습니다.
void CMyDialog::OnPaint()
{
CPaintDC dc(this);
CDC MemDC;
MemDC.CreateCompatibleDC(&dc);
CBitmap bitmap;
BITMAP bm;
bitmap.LoadBitmap(IDB_BACKGROUND);
bitmap.GetBitmap(&bm);
CBitmap* pOld = dc.SelectObject(&bitmap);
dc.BitBlt(0, 0, bm.bmWidth, bm.Height, &MemDC, 0, 0, SRCCOPY);
dc.SelectObject(pOld);
MemDC.DeleteDC();
}
스킨을 씌우고자 하는 다이얼로그의 OnPaint 이벤트 안에 위의 코드를 추가합니다.
저기서 IDB_BACKGROUND 는 이미지 파일 리소스인데...백그라운드로 쓸이미지를
리소스에 추가하면 됩니다.
위의 소스는 보시면 알겠지만 단순히 그림을 다이얼로그에 출력을 합니다.
그리고 그 그림에 쓸 이미지 버튼들을 만들어야 하는데...
CBitmapButton 이라는 클래스로 만들면 됩니다.
다이얼로그 헤더에 사용할 버튼을 선언합니다.
public:
CBitmapButton click;
void CMyDialog::OnInitDialog()
{
click.Create(NULL, BS_OWNERDRAW | WS_VISIBLE | WS_CHILD, CRect(114, 320, 180, 360), this,
2001);
click.LoadBitmaps(IDB_BITBUTTON);
click.SizeToContent();
}
위의 코드는 비트맵 버튼을 만드는데 IDB_BITBUTTON 이라는 이미지를 사용한다는 뜻입니다.
SizeToContent() 함수는 버튼을 그 이미지 크기만큼 자동으로 조정해줍니다.
그리고 버튼 Create 시에 BS_OWNERDRAW 속성이 있어야 비트맵 버튼으로 생성이 됩니다.
그 버튼에 ON_BN_CLICKED 이벤트만 추가해 주면 되겠죠?
그럼 클릭이 생기죠....
별거 아니죠?
이게 전부입니다.
정리를 하자면...
OnPaint() 에서 그 백그라운드에 쓸 이미지를 불러서 걍 뿌려줍니다.
그리고 OnInitDialog 에서는 비트맵 버튼으로 사용할 버튼을 쭉 만들어서 로딩하면 되고
그 버튼에 대한 이벤트만 추가한 후 처리를 하면 됩니다.
아주아주 간단하죠?
더 간단한 방법이 있을지 모르겠지만 ㅡ_ㅡ
위의 방법이 제가 주로 사용하는 다이얼로그에서의 스킨 방법입니다.
냠...별거 아니었나여 ㅡ_ㅡ
그래도 DevChip 좀 눌러줘여 ^^;
그럼 즐푸하세여~
김태인입니다. (이름 말한다고 누가 아나 ㅡ_ㅡ)
김윤환(alf76)님의 요청으로 꼴에 강좌도 하게됐습니다 ㅡ_ㅡ
다이얼로그에 관련된 또는 Document-View 방식의 스킨 씌우는 방법이
참 많죠? 근대 저는 그거 예제들 보면 솔직히 뭔 소린지 모르겠더군요 ㅡ_ㅡ
또한 최근에 나오는 소규모 어플리케이션들(메신저, 간단한 온라인 게임등)을 보면
다 스킨이 씌워져있죠...
그것에 관한 강좌를 간단히 하겠습니다.
최근에 MS 에서 Media Player 7.0 SDK 를 발표하면서 그안에 스킨 기능이 첨가
되었는데...역시 COM 이라서 이쪽에 지식이 없는 사람은 접근하기도 힘들죠...(저도 지식이 없어서 ㅡ_ㅡ)
그래서 저는 주로 MFC에서 모든걸 처리를 하는데...
MFC 기반의 제가 사용하는 법(?)의 스킨을 알려드릴께여...
스킨 = 그림, 스킨에 있는 클릭 가능한(?) 그림 = 이미지 버튼 이라고 생각하면 좋습니다.
예제를 보면서 설명하겠습니다.
void CMyDialog::OnPaint()
{
CPaintDC dc(this);
CDC MemDC;
MemDC.CreateCompatibleDC(&dc);
CBitmap bitmap;
BITMAP bm;
bitmap.LoadBitmap(IDB_BACKGROUND);
bitmap.GetBitmap(&bm);
CBitmap* pOld = dc.SelectObject(&bitmap);
dc.BitBlt(0, 0, bm.bmWidth, bm.Height, &MemDC, 0, 0, SRCCOPY);
dc.SelectObject(pOld);
MemDC.DeleteDC();
}
스킨을 씌우고자 하는 다이얼로그의 OnPaint 이벤트 안에 위의 코드를 추가합니다.
저기서 IDB_BACKGROUND 는 이미지 파일 리소스인데...백그라운드로 쓸이미지를
리소스에 추가하면 됩니다.
위의 소스는 보시면 알겠지만 단순히 그림을 다이얼로그에 출력을 합니다.
그리고 그 그림에 쓸 이미지 버튼들을 만들어야 하는데...
CBitmapButton 이라는 클래스로 만들면 됩니다.
다이얼로그 헤더에 사용할 버튼을 선언합니다.
public:
CBitmapButton click;
void CMyDialog::OnInitDialog()
{
click.Create(NULL, BS_OWNERDRAW | WS_VISIBLE | WS_CHILD, CRect(114, 320, 180, 360), this,
2001);
click.LoadBitmaps(IDB_BITBUTTON);
click.SizeToContent();
}
위의 코드는 비트맵 버튼을 만드는데 IDB_BITBUTTON 이라는 이미지를 사용한다는 뜻입니다.
SizeToContent() 함수는 버튼을 그 이미지 크기만큼 자동으로 조정해줍니다.
그리고 버튼 Create 시에 BS_OWNERDRAW 속성이 있어야 비트맵 버튼으로 생성이 됩니다.
그 버튼에 ON_BN_CLICKED 이벤트만 추가해 주면 되겠죠?
그럼 클릭이 생기죠....
별거 아니죠?
이게 전부입니다.
정리를 하자면...
OnPaint() 에서 그 백그라운드에 쓸 이미지를 불러서 걍 뿌려줍니다.
그리고 OnInitDialog 에서는 비트맵 버튼으로 사용할 버튼을 쭉 만들어서 로딩하면 되고
그 버튼에 대한 이벤트만 추가한 후 처리를 하면 됩니다.
아주아주 간단하죠?
더 간단한 방법이 있을지 모르겠지만 ㅡ_ㅡ
위의 방법이 제가 주로 사용하는 다이얼로그에서의 스킨 방법입니다.
냠...별거 아니었나여 ㅡ_ㅡ
그래도 DevChip 좀 눌러줘여 ^^;
그럼 즐푸하세여~