다른 종류의 "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 지식 창고
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java swing drawImagegetImage 가 즉시 돌아 오기 때문에 그림 이 불 러 올 때 까지 기다 리 지 않 고 프로그램 에서 다른 작업 을 수행 할 수 있 습 니 다.성능 을 향상 시 킬 수 있 지만 효과 적 인 프로그램 은 더 많은 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.