标签: wndproc

如何在WPF中处理WndProc消息?

寻找WPF陡峭的学习曲线.

在好的Windows窗体中,我只是覆盖WndProc,并在它们进入时开始处理消息.

有人能告诉我如何在WPF中实现同样的事情吗?

c# wpf wndproc

106
推荐指数
3
解决办法
9万
查看次数

如何在没有Windows窗体的情况下接收即插即用设备通知

我正在尝试编写一个类库,它可以捕获Windows消息,以便在已连接或删除设备时通知我.通常,在Windows窗体应用程序中,我只是覆盖WndProc方法,但在这种情况下没有WndProc方法.还有其他方法可以收到消息吗?

c# overriding wndproc console-application winforms

32
推荐指数
2
解决办法
2万
查看次数

存储此指针以在WndProc中使用的最佳方法

我很想知道存储this指针的最佳/常用方法WndProc.我知道几种方法,但据我所知,每种方法都有其自身的缺点.我的问题是:

有哪些不同的方式来生成这种代码:

CWindow::WndProc(UINT msg, WPARAM wParam, LPARAM)
{
  this->DoSomething();
}
Run Code Online (Sandbox Code Playgroud)

我可以想到Thunks,HashMaps,Thread Local Storage和Window User Data结构.

每种方法的优点/缺点是什么?

代码示例和建议获得的分数.

这纯粹是出于好奇心.使用MFC之后,我一直想知道它是如何工作的,然后开始考虑ATL等.

编辑:我可以HWND在窗口过程中有效使用的最早的地方是什么?它记录为WM_NCCREATE- 但如果您实际进行实验,那不是第一个发送到窗口的消息.

编辑: ATL使用thunk访问此指针.MFC使用HWNDs 的哈希表查找.

c++ windows oop winapi wndproc

27
推荐指数
5
解决办法
2万
查看次数

为什么要覆盖wndproc

我一直在环顾四周,并没有真正看到有关为什么有人会覆盖wndproc来处理消息的信息.

所以我想知道:

为什么这样?

什么时候做?

它在C#中的一般用途是什么?

当我看到从计算机上插入并拔下插头的串行COM时,我已经尝试过使用它,但我觉得我更好地依赖于我自己创建的方法.

我看到的其他消息是按键,光标设置和其他各种操作.据说大多数这些东西已经在c#库中内置了方法.所以我再回到我的三个主要问题.任何信息,意见,例子等都会很棒.

c# overriding wndproc

10
推荐指数
1
解决办法
1024
查看次数

C#ListView禁用水平滚动条

有没有办法阻止水平滚动条出现在列表视图中?我希望垂直滚动条在需要时显示,但我希望水平滚动条永远不会显示.

我想这会和WndProc有关吗?

谢谢

c# wndproc horizontal-scrolling winforms

9
推荐指数
4
解决办法
2万
查看次数

在wpf应用程序中捕获windows shutdown事件

我有一个ac#WPF应用程序,它需要在关闭时保存数据.如果用户关闭程序,则窗口关闭/关闭事件可正常工作,但如果用户注销/关闭计算机,则不会调用它们.

我已经找到了在winforms程序中捕获此事件的方法(此处此处).但我无法弄清楚如何在WPF应用程序中实现这一点.

我正试图停止关机,直到我的程序准备好退出

c# wpf wndproc

9
推荐指数
1
解决办法
7691
查看次数

C++:如何为控制台应用程序设置新的wndProc?

如果我有一个控制台应用程序,其句柄设置如此;

HWND hWnd = GetConsoleWindow();
Run Code Online (Sandbox Code Playgroud)

那我该如何为窗口设置一个新的wndProc呢?
我试过用

SetWindowLong(hWnd, GWL_WNDPROC, (LONG)conProc);
Run Code Online (Sandbox Code Playgroud)

将conProc定义为

LRESULT CALLBACK conProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
        case WM_NCHITTEST:
            return HTCAPTION;
    }
    return DefWindowProc(hWnd, msg, wParam, lParam );
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用,并说"错误代码:5 - 访问被拒绝" GetLastError()

我知道修改这样的控制台应用程序非常困难,因为它是一个csrss.exe应用程序,但我仍然想尝试..谢谢.

c++ console winapi wndproc access-denied

9
推荐指数
1
解决办法
6075
查看次数

WPF无边框窗口问题:Aero Snap和最大化

我通过在XAML中设置以下窗口属性创建了一个无边框WPF窗口:

... WindowStyle="None" AllowsTransparency="True" ...
Run Code Online (Sandbox Code Playgroud)

这会导致许多问题:

1)已解决:它不再具有任何内置的调整大小功能

2)已解决:它不再具有任何内置拖动功能

3)已解决:没有顶部工具栏,它不再具有最小化/最大化/恢复/关闭按钮

4)已解决:通过aero快照最大化或设置WindowState可防止它被取消.

5)通过aero快照最大化或设置WindowState将使用整个屏幕作为边界,与窗口工具栏重叠.

6)通过aero快照最大化或设置WindowState似乎包含-7边距,使窗口的每边7个像素超出窗口边缘.

通过制作xaml窗口模板来解决1-3.我使用了不可见的矩形作为句柄区域,后面的一些代码通过覆盖OnApplyTemplate()来应用,通过user32.dll SendMessage(...)附加功能,用于调整大小/移动/最小化/最大化/恢复/关闭.

我在这里找到了#4的答案

我尝试通过WndProc拦截最大化消息并手动设置大小/位置来解决5-6,但是这有一个问题,即将RestoreRegion覆盖到最大化的大小/位置,从而无法恢复窗口.

真正奇怪的是,从顶部边框调整窗口大小到屏幕顶部会触发aero full height snap,没有任何问题.

所以,我已经走了很长的路,但5-6仍然是一个问题......有没有办法手动指定最大化区域?或者,有没有办法设置窗口大小而不影响restoreregion属性?

c# wpf wndproc aero

8
推荐指数
2
解决办法
8492
查看次数

JAVA JNA WindowProc实现

我正在尝试用Java编写一个简单的应用程序,它将与USB设备通信.USB设备由我使用Microchip微控制器制造.通信相当简单,因为USB设备来自HID类,所以在计算机和设备之间交换64字节的数组.我的程序根据产品ID和供应商ID查找设备,可以写入和读取64个字节,但现在我想检测设备何时连接或断开与计算机的连接.

正如我在Microchip提供的C#程序中看到的那样,WndProc方法被覆盖并处理WM_DEVICECHANGE消息.我的问题是如何使用JNA在Java中完成,我如何覆盖WindowProc方法并处理消息,如果可能的话:),但我希望它是:D

提前谢谢你的答案.

的Gabor.

java wndproc jna

7
推荐指数
2
解决办法
5881
查看次数

拦截单击或双击鼠标 - 双击时只执行双击代码

我有一种情况,我在表单上处理单击和双击鼠标事件.在这两种情况下都必须加载某些内容,但是当发生双击时,我不希望执行附加到单击事件的代码.

有没有办法拦截鼠标点击并检查是否双重或单一,然后适当地执行正确的事件?

也许通过拦截窗户的WndProc或什么?

vb.net wndproc mouseevent mouseclick-event winforms

7
推荐指数
1
解决办法
7424
查看次数