炫彩界面库论坛

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2983|回复: 2

窗口消息求助(获取窗口外鼠标释放消息)

[复制链接]

该用户从未签到

发表于 2012-3-11 00:12:09 | 显示全部楼层 |阅读模式
1,  我需要在窗口内实现得到鼠标按下(WM_LBUTTONDOWN)消息,而在窗口外获得鼠标释放消息(WM_LBUTTONUP),在库中似乎没有提供这种实现,而借助Windows API中的 SetCapture(),和ReleaseCapture()这两个函数来实现也有问题。
以下是测试时代码:
bool CALLBACK WndLButtonDown(HWINDOW hWindow,UINT flags,POINT *pPt)
{
        HWND hWnd =  XWnd_GetHWnd(hWindow);
        SetCapture(hWnd);      //SetCapture((HWND)hWindow); 也一样不能实现
        return true;
}


bool CALLBACK WndLButtonUp(HWINDOW hWindow,UINT flags,POINT *pPt)
{
        HWND hWnd = XWnd_GetHWnd(hWindow);
        ReleaseCapture();
        MessageBox(hWnd,"Hello","Hello",MB_OK);
        return true;
}

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
        XInitXCGUI();
        HWINDOW hWindow =  XWnd_CreateWindow(50,50,300,300,L"Hello");

        XWnd_RegisterMessage(hWindow,WM_LBUTTONDOWN,WndLButtonDown);
        XWnd_RegisterMessage(hWindow,WM_LBUTTONUP,WndLButtonUp);

        if (hWindow)
        {
                XWnd_ShowWindow(hWindow,SW_SHOW);
                XRunXCGUI();
        }
        return 0;
}



2,  如果用XWnd_RegisterMsgProc似乎可以拦截整个消息,也用如此函数似乎可以实现功能,但是在按窗口内的一些控件时也会响应消息函数WM_LBUTTONDOWN和WM_LBUTTONUP(这里可以用最大化,最小化及关闭按钮测试)
如此处理很麻烦,不知道应该如何简便的实现该功能?

代码如下:
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
        // TODO: Place code here.
        XInitXCGUI();
        HWINDOW hWindow =  XWnd_CreateWindow(50,50,300,300,L"Hello");
        XWnd_RegisterMsgProc  (hWindow,WndProc);

        if (hWindow)
        {
                XWnd_ShowWindow(hWindow,SW_SHOW);
                XRunXCGUI();
        }
        return 0;
}

bool CALLBACK WndProc(HWINDOW hWindow,UINT message, WPARAM wParam, LPARAM lParam)
{
        HWND hWnd =  XWnd_GetHWnd(hWindow);
        switch(message)
        {
        case WM_LBUTTONDOWN:       
                SetCapture((HWND)hWindow);
                return true;
                break;
        case WM_LBUTTONUP:
                ReleaseCapture();
                MessageBox(hWnd,"Hello","Hello",MB_OK);
                return true;
        default:
                return DefWindowProc((HWND)hWindow,message,wParam,lParam);
        }
        return true;
}


  • TA的每日心情
    开心
    2022-1-9 18:18
  • 发表于 2012-3-11 01:20:35 | 显示全部楼层
    注册非客户区消息  XWM_NCLBUTTONUP  ,接收在客户区外的鼠标消息.

    文档连接:http://www.xcgui.com/doc/group__wnd_n_c_m_s_g.html

    该用户从未签到

     楼主| 发表于 2012-3-12 00:43:47 | 显示全部楼层
    谢谢了,终于解决了!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    QQ|Archiver|手机版|小黑屋|炫彩界面库 ( 鄂ICP备2023014763号-1 )

    GMT+8, 2024-9-20 00:24 , Processed in 0.068254 second(s), 18 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表