当前位置:C++技术网 > 资讯 > 和win7中相比,win8.1中CPropertySheet显示后控件变宽,变大

和win7中相比,win8.1中CPropertySheet显示后控件变宽,变大

更新时间:2016-09-06 21:09:16浏览次数:1+次

以Win7为基准,在Win8中,当CPropertySheet::OnInitDialog()函数执行完毕之后,窗口的大小会变得比Win7大很多,导致后边创建的字体也随之变大,效果很差.
然后在CPropertyPage::OnInitDialog()中我对Page页的大小进行固定,字体是OK了,但是对话框会比较高,将按钮遮住.而且界面也不美观.将Page的对话框资源高度降低后,基本和Win7是一样的了,但是这样的话Win7就显示不完全了.

求大神. 

具体情况同该链接一样,里面有图说明:http://bbs.csdn.net/topics/390518284


C++技术网解答:

    看到CSDN的扫门贴,有点失望。所谓的贴主,只是形式的管理,缺乏意义。感谢你相信我们网站。

    下面是你的问题的效果图:

和win7中相比,win8.1中CPropertySheet显示后控件变宽,变大

    你这个问题,实际在我们以前发布的文章里提及了。不过是处理win7风格和xp风格的混乱问题,先给你说下原理,然后将那篇文章的链接贴出来,让你进一步阅读学习,然后再去解决自己的问题。

    Windows中不同的系统版本,如XP、Win7、win8、win10,有着不同的风格,而Windows是一脉相承的系统。在编程方面可以沿用以前的方式,只是换了一些新的API函数而已。不过内部机制有很大的改变,不过对于我们开发应用程序来说,影响不大。在不同版本表现出来的界面特性,也都是可以自己选择的。默认的,我们在不同的系统下写界面程序,是使用对应的系统下的界面渲染机制。

    因此,不同的系统版本的界面的渲染机制还是有差别的,也就表现出不同的界面。XP时代的界面和Win7时代的毛玻璃界面以及win8之后的Metro界面,在界面渲染上,机制不会一样的。不过在编程使用界面时,我们可以选择。一般都在exe对应的manifest文件中。而manifest文件既可以外置,也可以内置在exe中。manifest文件中具体的描述控件版本就不再这里赘述,在稍后给的文章链接有详细说明。

    当然,除了manifest文件,我们也可以在代码文件中用预编译指令来指定使用的控件版本。同样,马上给出的文章有解释。

    请阅读《MFC如何配置使用Win7风格的控件而不是XP风格控件》来了解详细的说明。

    当然,这里说的控件版本不仅仅是说明使用的控件,应该说是一套界面风格,所以,你要让程序在win7上适配win7,那么使用win7系统版本的控件界面版本,如果是win8自然选用win8系统控件版本。如果你想程序自动适配,那么就用预编译指令根据系统版本来设置,而不是预先设置manifest文件。

    我们不提供具体的实现,给你指一条可行的路,提供方法,也希望你通过这个问题能够学到真正的东西,而不只是解决这个问题。对于预编译指令识别系统版本,网上很多说明的。