gpt4 book ai didi

c# - 与 Windows 控件的 C++ 相比,clr 如何处理 C# 中的标准事件?

转载 作者:行者123 更新时间:2023-11-30 02:06:52 24 4
gpt4 key购买 nike

对于标准的 win32 控件,c# 如何在 clr 中处理事件,说一个按钮:

示例:(c#)

    private void Form1_Load(object sender, EventArgs e)
{
button1.Click += (_, __) => { MessageBox.Show("You clicked me !"); };
}

在主消息循环中是否像 C++?`

例子:

while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{

switch (message)
{

case WM_COMMAND:


if(hWnd>0 && hWnd==buttonhwnd) //Button click
{
callback_button();
}

default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}

我的意思是,C# 中的所有标准控件都会发送每个信号,例如单击、鼠标悬停、等到一个模拟循环 - 然后回调在源代码中注册?喜欢我的 lambda 示例吗?

最佳答案

当然,基 native 制是一样的。但是,Winforms(和 WPF)显着改变了消息路由。在 Windows 中,子控件向其父窗口发送通知。 Winforms 管道通过窗口子类化和消息反射的混合改变了这一点,使代码在控件本身中运行。例如按钮的 OnClick() 方法。

从那里,通过事件订阅,任何其他类都可以接收 Click 事件回调。例如,一个常见的模式不是让您放置按钮的面板处理回调,而是让上层表单处理。这为原生 Windows 方式带来了很大的灵 active 。

关于c# - 与 Windows 控件的 C++ 相比,clr 如何处理 C# 中的标准事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8466735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com