我们的应用程序SetWindowRgn()在其OnPaint()功能中使用API 创建自定义形状的叠加窗口.该区域窗口仅具有客户区域.它还有一个所有者窗口,这是一个普通的矩形窗口.
我们观察到,如果区域的形状很复杂,例如,如果窗口区域是文本或复杂设计,则有时SetWindowRgn()调用OnPaint()需要很长时间才能返回.即使是此区域窗口下方的窗口也会缓慢呈现.这主要发生在调整视图大小时.我们发现OnNcCalcSize()从内部调用SetWindowRgn()并且默认处理OnNcCalcSize()需要很长时间才能返回.此外,在某些机器上,区域窗口下方的窗口绘画非常慢.
为什么复杂形状的区域窗口渲染会变慢?我们可以通过自定义处理类似事件OnNcCalcSize()或其他事件来加快速度吗?
注意:请不要建议使用分层窗口,因为技术限制迫使我们使用区域窗口.
我必须包含几个可以具有NULL值的函数指针.我正在尝试为此创建一个通用类模板,它检查函数指针是否为NULL,如果指针不为NULL则调用原始函数,如果指针为NULL则返回默认值.像这样的东西:
//Function typedefs
typedef void(*foo)();
typedef int(*bar)(int u, char *);
//Function pointers
foo gfFoo;
bar gfBar;
//Wrapper class
template<typename T, typename... Args>
class WrapFuncObj {
T* f;
public:
WrapFuncObj(T* t) {
f = t;
}
typename std::result_of<T(Args...)>::type operator()(Args&&... args) {
if(f != nullptr){
return (*f)(std::forward<Args>(args)...);
}
else
{
return 0; //RETURN something for non-void types
}
}
};
template<typename T, typename... Args>
class WrapFuncObjVoid {
T* f;
public:
WrapFuncObjVoid(T* t) {
f = t;
}
typename std::result_of<T(Args...)>::type operator()(Args&&... args) { …Run Code Online (Sandbox Code Playgroud)