wpf - WindowInteropHelper undlader at konstruere i C ++/CLI

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg bruger C ++/CLI til at lave en WPF-grænseflade til en ellers indfødt DLL.


Jeg vil gerne oprette et vindue, der kun kan minimeres, ikke lukkes. Jeg har søgt og fundet, at den eneste måde at gøre det på er via WIN32-opkald. Så bruger jeg følgende kode.


// 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);


men winhandle får en værdi på 0. SetWindowLong() opkaldet fejler med det ugyldige håndtag.


Hvad laver jeg galt her?

Bedste reference


Fungerer fint, når jeg prøver det. Vinduet ser sådan ud:


Indtast billedbeskrivelse her


Den eneste fejlmodus, jeg kan tænke på, er at du kaldte din kode for tidligt, før det oprindelige vindue er oprettet. Du skal bruge den indlæste begivenhed, det er mit:


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


Har brug for mere arbejde. Du må ikke minimere knappen, og lukke vinduet med Alt + F4 fungerer stadig.