2015-12-28 4 views
0

Каким образом можно подклассифицировать диалог, чтобы его имя класса изменилось на указанное, поэтому оно будет найдено позже с помощью 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") 
}; 
+0

вы пытаетесь получить диалоговую ручку по указанному имени окна ли? – Mykola

+0

@Mykola: что вы подразумеваете под «именем окна», классом окна или заголовком окна? Если первое, то я просто не могу установить уникальное имя таким образом. Если позже проблема заключается в том, что заголовок может измениться, или я не могу изменить приложение, которое выполняет поиск FindWindow. – ybungalobill

+0

В любом случае класс не будет уникальным как заголовок окна (имя). – Mykola

ответ

1

После некоторого дополнительного поиска я нашел 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/

Смежные вопросы