|
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;
}
|
|