Например, где создается окно? Вызывается ли какая-либо родная функция Win32? Я пытался искать в mscoree.dll, но не нашел такой функции, как CreateWindowEx, которая могла бы это сделать.
2 ответа
Платформы пользовательского интерфейса .NET, WinForms/WPF и многие другие, как правило, являются оболочками над собственными платформами пользовательского интерфейса ОС (либо Win32 в Windows, либо Cocoa в macOS, либо GTK+ в Linux).
Чтобы узнать, как они перекрывают такие нативные API, вам следует искать в их репозиториях исходного кода, а не в mscoree.dll
,
- WinForms https://github.com/dotnet/winforms
- WPF https://github.com/dotnet/wpf
- GTK# https://github.com/GtkSharp/GtkSharp
Итак, немного поковырявшись с ILSpy.exe
в System.Windows.Forms.dll
, я нашел следующую цепочку методов:
new Form();
|
Form.CreateHandle();
|
Control.CreateHandle();
|
NativeWindow.CreateHandle();
|
WindowClass.Create();
|
new WindowClass();
|
WindowClass.RegisterClass();
|
UnsafeNativeMethods.GetProcAddress(
new HandleRef(null,
UnsafeNativeMethods.GetModuleHandle("user32.dll")), "DefWindowProcW");
Я не так хорошо знаком с работой с окнами Win32 и, возможно, пропустил фактическую последовательность создания окна, но могу поспорить, что она где-то в классе NativeWindow
.
Новые вопросы
.net
НЕ используйте для вопросов о .NET Core - используйте вместо этого [.net-core]. .NET Framework - это программная среда, предназначенная главным образом для операционной системы Microsoft Windows. Он включает в себя реализацию библиотеки базовых классов, общеязыковой среды выполнения (обычно называемой CLR), общей системы типов (обычно называемой CTS) и динамической среды исполнения. Он поддерживает множество языков программирования, включая C #, VB.NET, F # и C ++ / CLI.
System.Windows.Forms.dll
?[DllImport]
- docs.microsoft.com/en-us/dotnet/api/…Control.CreateHandle