Archive for the ‘UI相关’ Category.

如何限制窗口位置及大小

如果需要在用户改变窗口大小时进行限制。比如限制窗口的最小尺寸/最大尺寸,应该处理窗口的WM_GETMINMAXINFO消息。具体的使用方法请参考MSDN。

如果在改变大小时要实现特殊的逻辑,比如像VIM编辑器,在改变窗口的高度时总是以行高为单位,以避免窗口会出现半行文字。这个可以处理窗口的WM_WINDOWPOSCHANGING消息。这个事件在真正改变窗口大小之前发送,修改其中LPWINDOWPOS中的cy和cx值就可以限制窗口大小。

上面的这些处理千万不要放在WM_SIZE中,虽然也可以实现但会导致窗口出现闪烁。

如果还需要知道用户是通过拖动窗口哪个边界来改变窗口的大小。比如说如果当前窗口只显示了一个大图的一小部分,如果用户拖动窗口上边框来改变窗口的大小,这时应保持窗口下部显示内容相对不变,同样如果用户拖动窗口的左边框来改变窗口的大小,应该保持窗口右边的显示区域不变。不过我发现大多数软件都没有处理这个逻辑,比如PhotoShop。它总是保持显示内容左上角的位置不变,这样如果中在显示大图的一部分时拖动窗口的左边框、上边框或是左上角,整个显示的内容会抖动很不爽。

在改变大小时要感知用户是拖动了窗口的哪个边框来改变大小的,可以处理窗口的WM_SIZING消息,该消息的wParam参数指明了窗口的哪一条边或哪一角的位置改变了。(注意:WM_SIZING只在用户交互式的改变窗口大小时才触发,一些间接的改变大小的行为:如窗口复原,平铺窗口,只会触发WM_WINDOWPOSCHANGING。)

如何让程序使用WindowXP的桌面主题风格

原始发布日期:2006年12月4日 星期一 10:44

最近写了一些简单的小应用,可是跑在我自己的XP系统上感觉很土,因为界面都是WIN95风格的,感觉格格不入。我使用了一些很COOL的XP桌面主题风格。很多程序像WINRAR都会随着系统的主题风格改变而改变界面风格。我想MS一定提供了某种机制让应用使用系统的主题风格。查了一下MSDN,原来很容易就可以实现。

Continue reading ‘如何让程序使用WindowXP的桌面主题风格’ »