对话框的 OnNcLButtonUp 问题

redjuly 2005-11-28 11:21:22
我响应了对话框的 ON_WM_NCLBUTTONUP ,函数为
void CMyDlg::OnNcLButtonUp(UINT nHitTest, CPoint point)
可是我发现我单击对话框的标题栏的时候 ,并没有进入这个函数。
而是在双击标题栏的时候进入了。
这是为什么啊?如果想要响应单击鼠标UP的这个消息该怎么做呢?/

多谢了!

...全文
191 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
使用ON_WM_NCLBUTTONUP应该没有问题,是不是你的对话框有特殊设置?直接在WndProc种截这个消息试试
redjuly 2005-11-28
  • 打赏
  • 举报
回复
lbuttondown根本响应不到标题栏的啊。
你可以尝试一下的。
3x
zhoudm2005 2005-11-28
  • 打赏
  • 举报
回复
抱歉,误导了,反省中。。。。。。。。。。。。。。
zhoudm2005 2005-11-28
  • 打赏
  • 举报
回复
应该响应的是:ON_WM_LBUTTONUP,中间没有NC。

void CMy20051128_3Dlg::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default

MessageBox("zhoudm2005,hehe!~");

CDialog::OnLButtonUp(nFlags, point);
}
redjuly 2005-11-28
  • 打赏
  • 举报
回复
WM_NCLBUTTONDOWN 可以正常响应鼠标在非客户区单击的.
不知道它的实现机制
它肯定不要和up配对使用了.
总之 WM_NCLBUTTONUP 就是不会响应鼠标在非客户区up的消息.
你可以去作一个demo试验一下

tangjun237 2005-11-28
  • 打赏
  • 举报
回复
如果照楼上所说,那WM_NCLBUTTONDOWN消息又拿来干什么呢,它又是什么实现机制,它和UP必须配对使用吗,否则WM_NCLBUTTONUP就不响应非客户区的消息了不是?
redjuly 2005-11-28
  • 打赏
  • 举报
回复
从网上找到一个资料说
" 其实在WM_NCLBUTTONUP这个里面
他是在左键点击客户区然后再在非客户区释放时响应此消息~
所以才会脱动着窗口到左键释放时没此触发消息....
"
试验了一下果真....
这个也太怪异了.
redjuly 2005-11-28
  • 打赏
  • 举报
回复
wndproc中截获的结果如下:
如果是直接对 应用程序的 wndproc截取,则,在测试程序窗口最大化的时候,可以响应这个消息
如果窗口不是最大化的情况,则双击的时候响应。
对对话框截获的结果,是只有双击的时候响应

代码如下

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
TCHAR szHello[MAX_LOADSTRING];
LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);

switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// Parse the menu selections:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...
RECT rt;
GetClientRect(hWnd, &rt);
DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER);
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_NCLBUTTONUP:
MessageBox(hWnd,"haha","haha",0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}

// Mesage handler for about box.
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
return TRUE;

case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
case WM_NCLBUTTONUP:
MessageBox(hDlg,"aaaaa","aaaaaaa",0);
break;
}
return FALSE;
}

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧