Tutorial: Membuat Aplikasi WPF Win32 Hosting Konten

Saya akan sharing sedikit ilmu saya,
Sebenarnya Win32 menggunakan kembali konten dalam aplikasi WPF, gunakan HwndHost, yang merupakan kontrol yang membuat WPF HWNDs tampak seperti konten. Seperti HwndSource, HwndHost sangat mudah untuk digunakan: berasal dari HwndHost dan menerapkan metode BuildWindowCore dan DestroyWindowCore, lalu instantiate kelas turunan HwndHost Anda dan tempat ke dalam aplikasi WPF Anda.

Jika logika Win32 Anda sudah dikemas sebagai kontrol, maka implementasi BuildWindowCore Anda sedikit lebih dari satu panggilan ke CreateWindow. Misalnya, untuk menciptakan kontrol ListBox Win32 di C + +:
Buka ajah [Silahkan] :

virtual HandleRef BuildWindowCore(HandleRef hwndParent) override {
HWND handle = CreateWindowEx(0, L"LISTBOX",
L"this is a Win32 listbox",
WS_CHILD | WS_VISIBLE | LBS_NOTIFY
| WS_VSCROLL | WS_BORDER,
0, 0, // x, y
30, 70, // height, width
(HWND) hwndParent.Handle.ToPointer(), // parent hwnd
0, // hmenu
0, // hinstance
0); // lparam

return HandleRef(this, IntPtr(handle));
}

virtual void DestroyWindowCore(HandleRef hwnd) override {
// HwndHost will dispose the hwnd for us
}

Tapi bagaimana kalau kode Win32 tidak terlalu mandiri? Jika demikian, Anda dapat membuat kotak dialog Win32 dan isinya embed ke dalam aplikasi WPF yang lebih besar. Sampel memperlihatkan ini dalam Microsoft Visual Studio dan C + +, meskipun juga mungkin untuk melakukan hal ini dalam bahasa lain atau pada baris perintah.

Mulailah dengan sebuah dialog sederhana, yang dikompilasi ke dalam C + + DLL proyek.

Selanjutnya, memperkenalkan dialog ke aplikasi WPF yang lebih besar:

Mengkompilasi DLL sebagai dikelola (/ CLR)

Belok dialog menjadi kontrol

Tentukan kelas turunan BuildWindowCore dan HwndHost dengan metode DestroyWindowCore

TranslateAccelerator override metode untuk menangani kunci dialog

TabInto override metode untuk mendukung tabbing

OnMnemonic override metode untuk mendukung mnemonik

Instantiate yang HwndHost subclass dan meletakkannya di bawah elemen WPF yang tepat
Mengubah Dialog menjadi Control

Anda dapat mengaktifkan kotak dialog menjadi anak HWND menggunakan WS_CHILD dan DS_CONTROL gaya. Masuk ke file sumber (. Rc) di mana dialog didefinisikan, dan menemukan awal definisi dialog:
Buka ajah [Silahkan] :

IDD_DIALOG1 DIALOGEX 0, 0, 303, 121
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU

Ubah baris kedua ke:
Buka ajah [Silahkan] :

STYLE DS_SETFONT | WS_CHILD | WS_BORDER | DS_CONTROL

Tindakan ini tidak sepenuhnya paket menjadi kontrol mandiri; Anda masih perlu menelepon IsDialogMessage () sehingga proses dapat Win32 pesan tertentu, tetapi kendali perubahan itu menyediakan cara langsung meletakkan kontrol mereka dalam HWND lain.
Buka ajah [Silahkan] :

namespace ManagedCpp
{
using namespace System;
using namespace System::Windows;
using namespace System::Windows::Interop;
using namespace System::Windows::Input;
using namespace System::Windows::Media;
using namespace System::Runtime::InteropServices;

Kemudian membuat kelas turunan HwndHost dan menimpa BuildWindowCore dan metode DestroyWindowCore:...
Buka ajah [Silahkan] :

public ref class MyHwndHost : public HwndHost, IKeyboardInputSink {
private:
HWND dialog;

protected:
virtual HandleRef BuildWindowCore(HandleRef hwndParent) override {
InitializeGlobals();
dialog = CreateDialog(hInstance,
MAKEINTRESOURCE(IDD_DIALOG1),
(HWND) hwndParent.Handle.ToPointer(),
(DLGPROC) About);
return HandleRef(this, IntPtr(dialog));
}

virtual void DestroyWindowCore(HandleRef hwnd) override {
// hwnd will be disposed for us
}

Buka ajah [Silahkan] :



sekian dolo dari saya

Posting Komentar



 

[ Privac ] Copyright © 2010 REDHAT | by CyberLog