子类化对话框的正确方法是什么,以便将其类名更改为指定的对话框,以便以后在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")
};

最佳答案

经过一些额外的搜索后,我发现How to provide your own Window class name for an MFC dialog box。 MFC没有什么特别的。

总之:

  • CLASS "your class name"字段添加到对话框资源。可以从GUI内完成:在资源文件属性上禁用MFC模式,然后在对话框属性中显示“类名”属性。
  • 子类化WC_DIALOG类,如下所示:
    WNDCLASSEXW wc;
    wc.cbSize = sizeof(WNDCLASSEX);
    ::GetClassInfoExW(0, WC_DIALOG, &wc);
    wc.lpszClassName = "your window class";
    wc.style &= ~CS_GLOBALCLASS;
    ::RegisterClassExW(&wc);
    

  • 额外阅读:https://blogs.msdn.microsoft.com/oldnewthing/20100215-00/?p=14943/

    关于c++ - 设置对话框窗口的类名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34502097/

    10-11 23:15
    查看更多