Как показать простое немодальное Окно из нативной C DLL - PullRequest
0 голосов
/ 12 января 2012

Мне нужно создать простую подсказку в нативной C DLL. Мне никогда не приходилось создавать окна в C, поэтому я не знаю, какие существуют возможности.

Окно должно содержать текстовое поле и кнопку. Я должен быть в состоянии получить значение этого текстового поля, когда пользователь нажимает кнопку. Когда показано, окно не должно прерывать выполнение программы, оно должно быть немодальным. Я должен иметь возможность закрыть окно из кода в DLL.

Я думал об использовании MFC, пока не понял, что это для C ++. Поэтому я подумал, что мог бы написать обертку и затем использовать ее таким образом, но, очевидно, нужно реструктурировать некоторые части проекта, чтобы он работал (например, изменяя точки входа). Я немного сбит с толку тем, как использовать любые «GUI-фреймворки», но если есть простое решение, которое было бы замечательно.

Решение должно быть максимально простым.

EDIT:

Для чего используется DLL ...

У нас есть набор приложений (я назову это IDE), который использует интерфейс SCC. У нас есть SVN-репозиторий, поэтому мы используем PushOk для перевода запросов из IDE в команды SVN. Определение PushOk и IDE для интерфейса SCC не всегда согласовано, поэтому при определенных операциях в IDE происходит сбой. Поскольку мы не владеем исходным кодом для PushOk, мы написали наш собственный dll-прокси, который исправил конкретные проблемы, которые у нас были.

Теперь PushOk не имеет возможности получить файл, указав ревизию (в нашем случае это происходит, но не работает). Поэтому мы должны реализовать это сами. Указанное окно будет окном, в которое можно ввести ревизию, а затем мы получим этот файл с этой ревизией.

1 Ответ

2 голосов
/ 12 января 2012

Вы не должны использовать GUI-Framework из DLL, это рецепт катастрофы.Придерживайтесь простого API Win32 (CreateDialog () и друзей, и все должно быть хорошо).

(Эта фраза скопирована из комментария, поэтому я уточню).

Эта функцияфактически прост в использовании:

  • Сначала вам нужен ресурс DIALOG, скомпилированный в вашу DLL.Здесь вам пригодится встроенный редактор ресурсов VisualStudio.

  • Затем напишите функцию DLGPROC

.

BOOL CALLBACK MyDialogProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch (msg)
    {
        case WM_INITDIALOG:
           /* ... */
        default:
            return FALSE;
    }
}
  • А в вашей экспортированной функции просто вызовите и сохраните дескриптор на потом:

.

 HWND hWnd = CreateDialog(hInstance, MAKEINTRESOURCE(ID_MY_DIALOG), NULL);
  • Если вы хотите уничтожить диалог, просто вызовите:

.

DestroyWindow(hWnd);

Найдите все, что вы хотите знать о диалогах Win32 (и не только) здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...