WindowInteropHelper не удается построить в C ++ / CLI - PullRequest
0 голосов
/ 13 февраля 2012

Я использую C ++ / CLI для создания интерфейса WPF для в противном случае собственной библиотеки DLL.

Я хочу создать окно, которое можно свернуть, но не закрыть. Я искал и обнаружил, что единственный способ сделать это через вызовы WIN32. Итак, я использую следующий код.

// window_ is a Window ^ initialized from XAML and checked against nullptr
// its WindowStyle is SingleBorderWindow

System::Windows::Interop::WindowInteropHelper helper(window_);
IntPtr winhandle = helper.Handle;
void * winhandleptr = winhandle.ToPointer();
HWND hWnd = static_cast<HWND>(winhandleptr);
SetWindowLong(hWnd, GWL_STYLE, GetWindowLong(hWnd, GWL_STYLE) & ~WS_SYSMENU);

, но winhandle получает значение 0. Вызов SetWindowLong() завершается неудачно с неверным дескриптором.

Что я здесь не так делаю?

1 Ответ

1 голос
/ 13 февраля 2012

Работает нормально, когда я пытаюсь.Окно выглядит следующим образом:

enter image description here

Единственный режим сбоя, о котором я могу думать, это то, что вы вызвали свой код слишком рано, до того, как было создано собственное окно.Вам понадобится событие Loaded, это мое:

    private void Window_Loaded(object sender, RoutedEventArgs e) {
        cpptemp8.Class1.FixWindow(this);
    }

Требуется больше работы.Нет кнопки сворачивания, закрытие окна с помощью Alt + F4 по-прежнему работает.

...