急,关于一个对话框类对应多套资源的问题?
开发平台:VC6.0+Windows Server 2003
程序模式:MFC对话框应用程序
对话框应用程序无标题栏,初始化时全屏显示。
对话框以bmp位图作为背景,对话框上放置了很多控件,这些控件也以bmp位图为背景,各控件的位置和背景图片中的图形有相对位置关系。
对话框背景图片尺寸为1024*768。
出现的问题如下:
如果在显示器分辨率为1024*768的情况下,没有问题,但是如果在显示器分辨率为其它的情况时,则控件位置和背景图片中的图形相对位置会错乱?
问题一:有没有比较好的或者是常用的处理这种问题的方法?
想到的解决方案如下:
方案一:定义多套对话框类和资源,分别对应不同分辨率调整好相对位置,然后在应用程序的InitInstance()函数中判断屏幕分辨率,根据分辨率决定启动哪个对话框。这个方案可行(推测而已,没试过),但是很费时间,方法比较笨。
方案二:只有一个对话框类,但是有多套对话框资源,这些对话框资源上的内容一样,只是控件位置的相对位置不一样,适应于各种分辨率。
问题二:如何在对话框启动时,动态为其加载对话框资源?
在对话框类的头文件中,有如下自动生成的代码:
// Dialog Data
//{{AFX_DATA(CXXXDlg)
enum { IDD = IDD_XXX_DIALOG };
//}}AFX_DATA
问题三:在enum 中用不同的资源ID,则启动时就会加载该对话框资源作为对话框类的资源,但是如何动态选择对话框资源ID呢?
问题三:是否可以在这段自动生存的代码中添加判断语句,通过判断分辨率来决定动态加载的对话框资源ID?
如果将上面自动生成的代码改成如下:
// Dialog Data
//{{AFX_DATA(CXXXDlg)
enum { IDD = IDD_XXX_DIALOG, IDD = IDD_XXX_DIALOG1, IDD = IDD_XXX_DIALOG2, ... };
//}}AFX_DATA
问题四:如果这样的话,应用程序中如何控制这个enum的值来决定动态加载哪个对话框资源ID呢?