首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

要用钩子才力100%确保WM_NCLBUTTONUP发送出去,并被钩子拦截

2013-01-11 
要用钩子才能100%确保WM_NCLBUTTONUP发送出去,并被钩子拦截?因为系统当你在单击标题栏处 它发送的是LBUTTO

要用钩子才能100%确保WM_NCLBUTTONUP发送出去,并被钩子拦截?
因为系统当你在单击标题栏处 它发送的是LBUTTONUP 不是NCLBUTTONUP  
要做特殊处理 用钩子!


case WM_LBUTTONUP:
{static int i = 0;TCHAR buf[64] = { 0 };_stprintf(buf,_T("WM_LBUTTONUP %d %d\r\n"),wParam,i++);OutputDebugString( buf );}
{
POINT pt = {GET_X_LPARAM(lParam),GET_Y_LPARAM(lParam)};
ClientToScreen( hWnd,&pt );
SendMessage( hWnd,WM_NCLBUTTONUP,SendMessage( hWnd,WM_NCHITTEST,0,MAKELPARAM(pt.x,pt.y) ),MAKELPARAM(pt.x,pt.y) );
}
break;

[解决办法]
SetWindowsHookEx的使用,可以看看下面的例子

官方例子
[解决办法]
加入这段
LRESULT CTsSheet::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: 在此添加专用代码和/或调用基类
if(message == WM_NCACTIVATE && !wParam) // wParam=0, deactive
{
return 1; // 必须返回1,处理默认消息(如果不返回1,一切弹出的窗口(模态,非模态)不能点击)
}
if(message == WM_NCACTIVATE && wParam) // wParam =1, active
{
return 0; // 这个随便返回(0和1都行)
}
//if(message==WM_NCPAINT) 
//{
//return 0; // 阻止默认框架绘制(An application returns zero if it processes this message 摘自MSDN)
//}
return CPropertySheet::WindowProc(message, wParam, lParam);
}

热点排行