gpt4 book ai didi

c++ - 包装 PropertySheet;如何处理回调?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:37:14 26 4
gpt4 key购买 nike

我正在编写一个(非托管)C++ 类来包装 Windows PropertySheet .本质上,是这样的:

class PropSheet {
PROPSHEETHEADER d_header;
public:
PropSheet(/* parameters */);
INT_PTR show();
private:
static int CALLBACK *propSheetProc(HWND hwnd, UINT msg, LPARAM lParam);
};

构造函数只是初始化d_header成员:

PropSheet::PropSheet(/* parameters */) {
d_header.dwSize = sizeof(PROPSHEETHEADER);
d_header.dwFlags = PSH_USECALLBACK;
// ...
d_header.pfnCallback = &propSheetProc;
// ...
}

之后我可以模态地显示它:

INT_PTR PropSheet::show() {
return PropertySheet(&d_header);
}

现在的问题是,因为回调是静态的,它不能访问包装类。如果这是一个普通窗口,带有 WindowProc而不是 PropSheetProc ,我可以在 WNDCLASS 中使用 cbWndExtra 将一些额外数据附加到窗口,我可以在其中存储一个指向包装器的指针,就像在 this article 中一样.但是属性表不提供此功能。

此外,因为属性表是模态显示的,所以我不能在实际窗口的创建和销毁之间执行任何代码,除非该代码是通过回调或工作表的窗口过程之一执行的。

到目前为止,我想出的最佳解决方案是,就在显示属性表之前,将指向包装类的指针存储在全局变量中。但这假设我一次只显示一个属性表,而且无论如何都很难看。

有没有人知道如何解决这个问题?

最佳答案

当您以模态方式显示属性表时,您应该能够使用属性表的父窗口(即它的句柄)映射到一个实例,使用 ::GetParent() PropSheetProc()hwndDlg 参数。

关于c++ - 包装 PropertySheet;如何处理回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1903066/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com