Как правильно добавить элемент управления ссылкой MFC в диалоговое окно?

#c #visual-studio-2015 #mfc

#c #visual-studio-2015 #mfc

Вопрос:

Я создал DLL-плагин для игры. Теперь я хочу добавить активацию лицензии в свой плагин, поэтому я создал простой диалог (LicenseActivation.rc) с помощью мастера ресурсов Visual Studio.

При подключении библиотеки DLL я сохраняю HMODULE как m_hModule переменную-член и запускаю следующий код в новом потоке

 DialogBox(m_hModule, MAKEINTRESOURCE(IDD_DIALOG1), NULL, About);
  

About Функция обратного вызова реализована следующим образом

 INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    PrintDebug(L"About(%d, %#x, %d, %d)", hDlg, message, wParam, lParam);
    switch (message)
    {
    case WM_INITDIALOG:
        //PrintDebug(L"case WM_INITDIALOG");
        return (INT_PTR)TRUE;

    case WM_COMMAND:
        //PrintDebug(L"case WM_COMMAND");
        switch (LOWORD(wParam))
        {
        case IDOK:
            EndDialog(hDlg, LOWORD(wParam));
            return (INT_PTR)TRUE;
        case IDCANCEL:
            EndDialog(hDlg, LOWORD(wParam));
            return (INT_PTR)TRUE;
        }
        break;
    }
    return (INT_PTR)FALSE;
}
  

И это ресурс диалога

Диалоговое окно в редакторе Visual Studio 2015

Перед добавлением элемента управления ссылками MFC в диалоговое окно работает просто отлично, диалоговое окно отображается при запуске и печатает следующие отладочные сообщения

 [11848] About(1380712, 0x30, 1544171096, 0)
[11848] About(1380712, 0x110, 6359660, 0)
[11848] About(1380712, 0x46, 0, 253295812)
[11848] About(1380712, 0x1c, 1, 0)
[11848] About(1380712, 0x86, 0, 0)
[11848] About(1380712, 0x7f, 2, 0)
[11848] About(1380712, 0x7f, 0, 0)
[11848] About(1380712, 0x7f, 1, 0)
[11848] About(1380712, 0x6, 1, 0)
[11848] About(1380712, 0x400, 0, 0)
[11848] About(1380712, 0x127, 3, 0)
[11848] About(1380712, 0x128, 196609, 0)
[11848] About(1380712, 0x31f, 1, 0)
[11848] About(1380712, 0x18, 1, 0)
[11848] About(1380712, 0x46, 0, 253296052)
[11848] About(1380712, 0x85, 1, 0)
[11848] About(1380712, 0x7f, 2, 0)
[11848] About(1380712, 0x7f, 0, 0)
[11848] About(1380712, 0x7f, 1, 0)
[11848] About(1380712, 0x14, 16855179, 0)
[11848] About(1380712, 0x136, 16855179, 1380712)
[11848] About(1380712, 0x47, 0, 253296052)
[11848] About(1380712, 0x7f, 2, 0)
[11848] About(1380712, 0x7f, 0, 0)
[11848] About(1380712, 0x7f, 1, 0)
[11848] About(1380712, 0xf, 0, 0)
[11848] About(1380712, 0x135, 16855179, 6359660)
[11848] About(1380712, 0x135, 16855179, 1445800)
[11848] About(1380712, 0x138, 16855179, 1446218)
[11848] About(1380712, 0x133, 16855179, 2363706)
[11848] About(1380712, 0x133, 16855179, 2363706)
[11848] About(1380712, 0x138, 16855179, 1577080)
[11848] About(1380712, 0x7f, 2, 96)
[11848] About(1380712, 0x7f, 0, 96)
[11848] About(1380712, 0x7f, 1, 96)
[11848] About(1380712, 0x7f, 2, 0)
[11848] About(1380712, 0x7f, 0, 0)
[11848] About(1380712, 0x7f, 2, 0)
[11848] About(1380712, 0x7f, 0, 0)
[11848] About(1380712, 0x7f, 2, 0)
[11848] About(1380712, 0x7f, 0, 0)
  

но как только я добавляю элемент управления MFC Link в диалоговое окно, диалоговое окно не появляется и печатает следующие сообщения отладки

 [9748] About(3018840, 0x30, 1393179198, 0)
[9748] About(3018840, 0x90, 0, 0)
[9748] About(3018840, 0x2, 0, 0)
[9748] About(3018840, 0x82, 0, 0)
  

Ответ №1:

Как я вижу, у вас обычная программа Win32.

Управление ссылками доступно только для проектов MFC. У вас нет диалогового окна, производного от CDialogEx, и вы не используете какую-либо технику для создания или обработки элементов управления так, как это делает MFC.

Для win32 Есть простое управление гиперссылками здесь и здесь.

Комментарии:

1. Означает ли это, что невозможно заставить его работать, не написав ни одной строки кода для гиперссылки? Когда я захожу в Формат> Диалоговое окно тестирования (CTR T) внутри VS, это работает просто отлично. Это нормально? Мне интересно, почему VS не жалуется и не дает никаких подсказок по этому поводу.

2. Нет. Это специальный материал MFC. И вы не используете MFC! Тестовый контейнер поддерживает MFC. В самой Windows такого элемента управления ссылками нет. Я добавил еще один пример кода к своему ответу.

3. Что это за две ссылки, которые вы добавили? В Windows есть собственное управление SysLink , доступное для Vista и более поздних версий. «Управление SysLink» находится в окне разработки диалогового окна, рядом с «Управление ссылками MFC»

4. @xMRi Спасибо за ответ, но, к сожалению, ваш ответ немного сложен для меня. Есть ли какой-либо способ, которым я могу настроить MFC в своей DLL?