xref: /MusicPlayer2/MusicPlayer2/CMainDialogBase.cpp (revision be0299207d692c2dcf260d6a5908c46a58db4b09)
1 #include "stdafx.h"
2 #include "CMainDialogBase.h"
3 #include "Common.h"
4 #include "MusicPlayer2.h"
5 
IMPLEMENT_DYNAMIC(CMainDialogBase,CDialog)6 IMPLEMENT_DYNAMIC(CMainDialogBase, CDialog)
7 
8 CMainDialogBase::CMainDialogBase(UINT nIDTemplate, CWnd * pParent)
9 	: CDialog(nIDTemplate, pParent)
10 {
11 }
12 
13 
~CMainDialogBase()14 CMainDialogBase::~CMainDialogBase()
15 {
16 }
17 
SetFullScreen(bool full_screen)18 void CMainDialogBase::SetFullScreen(bool full_screen)
19 {
20 	m_bFullScreen = full_screen;
21 	if (full_screen)
22 	{
23 		// 获取主窗口所在监视器句柄,如果窗口不在任何监视器则返回主监视器句柄
24 		HMONITOR hMonitor = MonitorFromWindow(theApp.m_pMainWnd->GetSafeHwnd(), MONITOR_DEFAULTTOPRIMARY);
25 
26 		// 获取监视器信息
27 		MONITORINFO lpmi;
28 		lpmi.cbSize = sizeof(lpmi);
29 		GetMonitorInfo(hMonitor, &lpmi);
30 
31 		// 用m_struOldWndpl得到当前窗口的显示状态和窗体位置,以供退出全屏后使用
32 		GetWindowPlacement(&m_struOldWndpl);
33 
34 		CRect monitor{ lpmi.rcMonitor };
35 		POINT offset{ lpmi.rcWork.left - lpmi.rcMonitor.left, lpmi.rcWork.top - lpmi.rcMonitor.top };
36 		// 设置窗口对象参数,为全屏做好准备并进入全屏状态
37 		WINDOWPLACEMENT struWndpl;
38 		struWndpl.length = sizeof(WINDOWPLACEMENT);
39 		struWndpl.flags = 0;
40 		struWndpl.showCmd = SW_SHOWNORMAL;
41 		struWndpl.rcNormalPosition = monitor - offset;
42 		SetWindowPlacement(&struWndpl);//该函数设置指定窗口的显示状态和显示大小位置等,是我们该程序最为重要的函数
43 	}
44 	else
45 	{
46 		SetWindowPlacement(&m_struOldWndpl);
47 	}
48 }
49 
ShowTitlebar(bool show)50 void CMainDialogBase::ShowTitlebar(bool show)
51 {
52 	if (show)
53 	{
54         ModifyStyle(0, WS_CAPTION, SWP_FRAMECHANGED);		//还原标题栏
55 	}
56 	else
57 	{
58 		ModifyStyle(WS_CAPTION, 0, SWP_FRAMECHANGED);		//去掉标题栏
59 	}
60 }
61 
ShowSizebox(bool show)62 void CMainDialogBase::ShowSizebox(bool show)
63 {
64     if (show)
65     {
66         ModifyStyle(0, WS_SIZEBOX, SWP_FRAMECHANGED);        // 还原大小边框
67     }
68     else
69     {
70         ModifyStyle(WS_SIZEBOX, 0, SWP_FRAMECHANGED);        // 去掉大小边框
71     }
72 }
73 
BEGIN_MESSAGE_MAP(CMainDialogBase,CDialog)74 BEGIN_MESSAGE_MAP(CMainDialogBase, CDialog)
75 	ON_WM_GETMINMAXINFO()
76 END_MESSAGE_MAP()
77 
78 
79 void CMainDialogBase::OnGetMinMaxInfo(MINMAXINFO* lpMMI)
80 {
81 	// TODO: 在此添加消息处理程序代码和/或调用默认值
82 
83 	CDialog::OnGetMinMaxInfo(lpMMI);
84 }
85