다른 종류의 "About"대화 상자 의 동적 표시 방법

다른 종류의 "About"대화 상자 의 동적 디 스 플레이 방법 작성 자: 척 고
원본 코드 를 다운로드 하여 일반적인 시스템 도움말 파일 을 소개 합 니 다. 도움말 정 보 를 표시 할 때 대부분 사용 하 는 방법 은 정적 인 형식 으로 표시 할 내용 을 인터페이스 에 표시 하 는 것 입 니 다. 이번에 프로젝트 개발 을 맡 았 기 때문에 저 는 너무 단 조 롭 습 니 다. 그래서 각 사이트 에서 검색 한 후에 좋 은 컨트롤 류 (글꼴 디 스 플레이 컨트롤 류) 를 발 견 했 습 니 다.그래서 저 는 동적 디 스 플레이 기능 을 확 대 했 습 니 다. 완 성 된 후에 보 여 드릴 각종 도움 정 보 는 영 화 를 상영 하 는 것 처럼 동적 디 스 플레이 를 할 수 있 고 효과 가 좋 습 니 다. 현 재 는 제작 과정 을 코드 와 프레젠테이션 효 과 를 작성 하여 이 방면 에 대해 연구 하거나 좋 은 방법 을 찾 는 사람 에 게 도움 이 되 기 를 바 랍 니 다.또한 이 글 코드 에 표 시 된 텍스트 정 보 는 필요 에 따라 스스로 수정 할 수 있 습 니 다.본문 에 도움말 파일 을 표시 할 때 저 는 전체 화면 을 표시 하 는 방법 을 사 용 했 습 니 다. 그러나 VIEW 전체 화면 을 표시 하 는 방법 만 있 으 면 너무 보기 싫 습 니 다. 그래서 저 는 먼저 전체 화면 을 바탕 으로 배경 그림 을 붙 인 다음 에 배경 그림 에 기능 디 스 플레이 를 추가 하면 됩 니 다.사실 간단 한 방법 은 배경 그림 에 CSTATIC 컨트롤 을 직접 동적 으로 만 드 는 것 입 니 다. 그러나 제 시스템 은 다른 많은 기능 인터페이스 와 관련 되 기 때문에 저 는 대화 상자 형식 으로 무 모드 대화 상자 형식 을 사용 한 다음 에 그녀 를 만 든 후에 MOVEWINDOW 를 지정 한 위치 로 만 들 면 됩 니 다.제작 단계 에서 VC 를 시작 하고 CVIEW 기반 의 단일 문서 기능 을 만 들 고 나머지 는 기본 설정 을 유지 하면 됩 니 다.전체 화면의 개념 은 전통 적 인 것 처럼 진행 되 지 않 고 메 인 프레임 워 크 MoveWindow 를 화면의 해상도 크기 로 옮 긴 다음 에 제목 란, 메뉴 표시 줄, 도구 모음, 상태 표시 줄 등 을 없 애 면 전체 화면의 효과 가 하나 도 차이 가 나 지 않 습 니 다. 그리고 이 위 에 배경 그림 을 붙 이면 됩 니 다.아마도 이것 은 전체 화면의 개념 이 라 고 할 수 없 을 것 이다 (^ ^).구체 적 인 실현 절 차 는 다음 과 같다. APP 의 InitInstance () 함 수 를 수정 하고 수 정 된 부분 은 다음 과 같다.
// The one and only window has been initialized, so show and update it.
m_pMainWnd->SetMenu(NULL);//    
m_pMainWnd->ModifyStyle(WS_THICKFRAME|WS_CAPTION,NULL);//      
m_pMainWnd->MoveWindow(CRect(0,0,::GetSystemMetrics(SM_CXSCREEN),
::GetSystemMetrics(SM_CYSCREEN)),TRUE);//                ?

m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);//        
m_pMainWnd->UpdateWindow();
그리고 MainFrame 클래스 구성원 함 수 를 수정 하여 도구 모음 합 상태 표시 줄 을 제거 하면 됩 니 다. PreCreate Window (CREATESTRUCT & cs) 함 수 를 수정 하고 다음 과 같이 수정 합 니 다.
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
	return -1;

         //     ,     ,                     
	FindWindow("Shell_TrayWnd",NULL)->ShowWindow(SW_HIDE);

	return 0;
}
위 단계 에 WINDOWS 작업 표시 줄 이 숨겨 져 있 기 때문에 프로그램 이 종 료 될 때 복구 해 야 합 니 다. 프로그램 이 끝나 지 않 아 도 볼 수 없습니다.프로그램 종료 로 WM 보 내기CLOSE 소식, 그래서 우 리 는 MainFrame 의 WM 를 캡 처 했다.닫 기 메시지 만 있 으 면 됩 니 다. 여기 서 상태 표시 줄 을 복원 합 니 다. 코드 는 다음 과 같 습 니 다.
void CMainFrame::OnClose()
{
	// TODO: Add your message handler code here and/or call default
	FindWindow("Shell_TrayWnd",NULL)->ShowWindow(SW_SHOW);//     
	CFrameWnd::OnClose();
}
여기까지 기본 준비 작업 을 완 료 했 습 니 다. 아래 작업 은 배경 비트 맵 을 붙 이 고 표시 되 는 대화 상 자 를 만 드 는 것 입 니 다.배경 비트 맵 붙 이기: 배경 비트 맵 을 불 러 오고 VIEW 를 비 추 는 WMPAITN 메시지, 그리고 배경 비트 맵 을 붙 이 고 WMEARSEBKGND 메시지, 화면 지우 기 작업, 반환 문 구 를 return TRUE 로 수정 하면 됩 니 다.
void CAboutDemoView::OnPaint()
{
	// TODO: Add your message handler code here
	CPaintDC dc(this); // device context for painting?
	HBITMAP hbitmap;
	hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BACKBMP));
	HDC hMenDC=::CreateCompatibleDC(NULL);
	SelectObject(hMenDC,hbitmap);
	::StretchBlt(dc.m_hDC,0,0,1024,768,hMenDC,0,0,1024,768,SRCCOPY);
	::DeleteDC(hMenDC);
	::DeleteObject(hbitmap);
	// Do not call CView::OnPaint() for painting messages
}
관련 정 보 를 표시 할 대화 상자 자원 을 만 들 고 대화 상자 속성 을 수정 합 니 다. Style -> Popup, Border -> None;대화 상자 클래스 CShowAboutDlg 만 들 기;그리고 대화 상자 위 에 CSTATIC 컨트롤 을 놓 고 위 치 를 조정 합 니 다.VIEW 에서 이 모드 없 는 대화 상 자 를 만 들 고 표시 합 니 다:
CShowAboutDlg   *m_pAboutDlg;
CRect rect;
m_pAboutDlg = new CShowAboutDlg();
m_pAboutDlg->Create(IDD_ABOUT);
m_pAboutDlg->MoveWindow(CRect(18,18,
                              ::GetSystemMetrics(SM_CXSCREEN)-13,
                              ::GetSystemMetrics(SM_CYSCREEN)-16),
                              TRUE);                //           ,              
m_pAboutDlg->GetClientRect(&rect);
m_pAboutDlg->m_AboutCtrl.MoveWindow(rect,TRUE);//   PIC           
m_pAboutDlg->ShowWindow(SW_SHOW);
다음은 컨트롤 류 를 표시 하 는 글꼴 을 추가 한 파일 입 니 다.ZgMemDC, ZgDraw. h, ZgDraw. cpp, TitleShow. h, TitleShow. cpp, PublicClass. cpp, PublicClass. h 를 프로젝트 에 추가 한 다음 에 AutoFont. h 와 AutoFont. cpp 를 추가 합 니 다. 이런 기능 은 말 할 필요 도 없 이 지난 글 에서 제 가 소개 하 였 습 니 다.그 글꼴 디 스 플레이 컨트롤 류 를 제공 하 는 토대 에서 저 는 적당 한 코드 를 수정 하여 문자 디 스 플레이 방면 의 수정 을 했 습 니 다. 왜냐하면 그 원래 의 글꼴 은 현재 시스템 이 표시 하 는 요구 에 부합 되 지 않 기 때 문 입 니 다 (^ ^).그리고 대화 상자 클래스 에 디 스 플레이 메 시 지 를 불 러 오 면 됩 니 다.CSTATIC 클래스 대상 위치 Title Show 를 정의 하고 초기 화 에 정보 표시 내용 을 추가 합 니 다. * * * 그 중 한 단 계 는 리 턴 과 ESC 키 대화 상자 의 종료 작업 을 캡 처 하 는 것 입 니 다.
BOOL CShowAboutDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
	if(pMsg->message == WM_KEYDOWN)
	{
		switch(pMsg->wParam)
		{
		case VK_RETURN:
			return TRUE;
		case VK_ESCAPE:
			return TRUE;
		}
	}
	return CDialog::PreTranslateMessage(pMsg);
}

이로써 프로그램의 기본 작업 이 완성 되 었 으 니, 당신 의 프로젝트 를 컴 파일 하여 실행 하여 효 과 를 보십시오. 
vc 지식 창고

좋은 웹페이지 즐겨찾기