【发布时间】:2016-04-02 19:25:03
【问题描述】:
对对话框进行子类化的正确方法是什么,以便其类名将更改为指定的类名,以便稍后使用 FindWindow(来自另一个进程)找到它?
class CMyDialog : public CDialogImpl<CMyDialog, CWindow> {
public:
enum { IDD = IDD_MAIN };
// error: CDialogImpl doesn't support GetWndClassInfo
DECLARE_WND_CLASS(L"unique class name")
};
【问题讨论】:
-
您是否尝试通过指定的窗口名称获取对话框句柄?
-
@Mykola:“窗口名称”、窗口类或窗口标题是什么意思?如果是前者,那么我根本无法以这种方式设置唯一名称。如果是后者,那么问题是标题可以更改,或者我无法修改执行 FindWindow 搜索的应用程序。
-
在任何情况下,类都不会像窗口标题(名称)那样唯一。
-
@Mykola:怎么样?该进程搜索一个唯一的 GUID 类名,保证不会与其他应用程序发生冲突,除非他们希望该进程找到他们的窗口。另一方面,窗口标题会根据多种因素而变化,例如应用程序名称、国际化、当前 UI 状态等...
-
对话框有一个固定的类名,不能更改(无论如何都不会破坏任何东西)。如果您需要从另一个进程中识别您的窗口,您可以通过调用SetProp 将附加数据附加到它。为 lpString 指定 GUID 的字符串表示可以使进程唯一地标识一个窗口。
标签: c++ windows winapi atl wtl