为什么我的子窗口对鼠标事件没有响应?
Why is my child window unresponsive to mouse events?
我创建了一个显示位图图像的自定义静态窗口,该窗口是其他窗口的子窗口。现在我想为这个窗口捕获鼠标事件,这样我就可以提供裁剪图像的功能。
但是问题是鼠标事件没有传递到这个子窗口....下面是子窗口的WndProc
的代码片段。
WNDPROC origStatProc;
// Variable which stores the handle of BITMAP image
HBITMAP hBitmap=NULL;
LRESULT CALLBACK dispWndProc(HWND hwnd,UINT msg, WPARAM wParam, LPARAM lParam)
{
static HDC hdc;
static PAINTSTRUCT paintSt;
static RECT aRect;
switch(msg)
{
case WM_PAINT:
{
hdc = BeginPaint(hwnd,&paintSt);
GetClientRect(hwnd,&aRect);
if(hBitmap!=NULL)
{
HDC memDC = CreateCompatibleDC(hdc);
if(memDC!=NULL)
{
BITMAP bmp;
GetObject(hBitmap,sizeof(bmp),&bmp);
SelectObject(memDC,hBitmap);
SetStretchBltMode(hdc,HALFTONE);
StretchBlt(hdc,0,0,aRect.right,aRect.bottom,
memDC,0,0,bmp.bmWidth,bmp.bmHeight,
SRCCOPY);
DeleteObject(&bmp);
ReleaseDC(hwnd,memDC);
}
}
// the code for painting
EndPaint(hwnd,&paintSt);
}
break;
case STM_SETIMAGE:
{
InvalidateRect(hwnd,&aRect,true);
}
break;
case WM_LBUTTONDOWN:
{
int xPos = GET_X_LPARAM(lParam);
int yPos = GET_Y_LPARAM(lParam);
char xstr[10];
_itoa(xPos,xstr,10);
MessageBox(NULL,xstr,"X Value ",MB_OK);
}
break;
default:
return origStatProc(hwnd,msg,wParam,lParam);
}
return 0;
}
谁能告诉我我还需要什么来捕获这个子窗口内的鼠标事件…
您为窗口使用的窗口类将决定窗口的某些默认行为。Static窗口类尤其难以使用,因为Windows假定窗口永远不会改变其内容,并且不会以任何方式与用户交互。你可能会发现WM_LBUTTONDOWN被传递给父窗口。
如果我没记错的话:静态窗口通过响应WM_NCHITTEST返回HTTRANSPARENT来声明自己对鼠标点击是"不可见的"。因此,窗口将鼠标点击传递给父节点。如果您想在静态中处理鼠标点击,您还需要重写此行为以返回HTCLIENT。
我已经调用了DefWndProc()而不是origStatProc(hwnd,msg,wParam,lParam),问题解决了....
无论如何感谢大家....
相关文章:
- Android NDK传感器向事件队列报告奇怪的间隔
- 从文本文件中读取时钟时间和事件时间并进行处理
- WMI检测进程创建事件-c++
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- 处理闪烁窗口事件
- C++Builder中的OnClick事件签名存在问题
- 跟踪滚动条上的鼠标事件
- 什么是事件表 (wxWidgets)?
- 如何在 MFCaptureEngine 中获取"Camera removed"事件
- 给定顺序中的事件处理
- 当服务中的事件被触发时,如何将响应从服务发送回客户端?
- 在 C++/CLI 中将 .NET 事件从一个 DLL 引发到另一个 DLL
- C++ 信号和插槽不工作:插槽不响应事件
- Qt应用程序不响应鼠标和键盘事件
- 发生鼠标滚动事件时如何响应
- 事件响应比信号量快
- 如何保持Qt小部件响应键盘和鼠标,同时处理Windows事件
- visualstudio2010-如何制作一个正在等待某个事件的c++程序,使其看起来响应迅速
- QWidget 在鼠标按下事件后没有响应
- 为什么我的子窗口对鼠标事件没有响应?