在这里就需要建立公共类PublicMember,用于储存窗口的指针。整个框架的主要功能需要4个窗口:IDD_VP2DIALOGVS2003_DIALOG、IDD_VPWindow、IDD_FunctionWindowA和 IDD_FunctionWindowB,给 4个窗口定义了相应的窗口指针,依次为:PublicMember::pMainWindow、PublicMember::pVPWindow、PublicMember::pFunctionWindowA 和PublicMember::pFunctionWindowB,类型均为HWND,而且都为PublicMember 类的静态成员。
全屏幕的自适应设计包含两个方面的内容:一是主窗口的全屏幕自适应设计;二是控件适应窗口的相应变化。
在此框架设计中,把主窗口分为左右两大部分。左边为主要部分,未启动VP 仿真之前,就显示图片;启动后,就显示VP的仿真场景。右边为功能区,为了能容纳多个功能窗口,使用TabControl 控件,在这里,只先实现TabControl的布局。从工具箱中添加一个TabControl控件到主窗口,其ID 为IDC_tabControl。当然,主窗口和控件的布局实现,都应该在主窗口的初始化函数里实现,也就是函数“BOOL CVP2DialogVS2003Dlg::OnInitDialog();”,该函数的系统代码应该保留,自己的代码一般都添加到最后,具体代码如图10.2.10所示。
图10.2.10 全屏幕自适应设计
主窗口的全屏幕自适应设计,关键是获取屏幕的宽度和高度,然后让主窗口布满整个屏幕。获取屏幕尺寸可以使用MFC的全局函数“::GetSystemMetrics()”进行实现,重新布局窗口可以使用MFC的全局函数“::MoveWindow()”进行实现。为了便于控制主窗口,需要获取主窗口的窗口句柄。这里,在PublicMember 类里定义了一个静态句柄变量“pMainWindow;”,格式为static HWND pMainWindow。
在其他窗口中使用PublicMember 类需要先添加其头文件。
在图10.2.10 中,下面一句代码获取主窗口句柄:
PublicMember::pMainWindow =theApp.GetMainWnd()->GetSafeHwnd();
下面两句分别获取屏幕的宽度和高度:
int width=::GetSystemMetrics(SM_CXSCREEN);
int height=::GetSystemMetrics(SM_CYSCREEN);(www.daowen.com)
下面一句使主窗口布满全屏:
::MoveWindow(PublicMember::pMainWindow,0,0,width,height+5,true);
其中,高度加5的目的是覆盖屏幕底端的任务栏,可根据需要自行调整。
对于控件的布局,主要是根据需要重新布局图片控件和TabContol 控件。图片控件的高度为屏幕高度,其宽度为屏幕宽度减去180个像素,这180个像素的宽度也就是右边TabContol的宽度。其具体代码为:
TabContol 控件的布局代码为:
其宽度为180个像素,高度为height个像素。当然,这些值都可以根据项目的需要自行调整。
运行主窗口的初始化函数“BOOL CVP2DialogVS2003Dlg::OnInitDialog();”,其效果如图10.2.11所示。
图10.2.11 自适应屏幕设计
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。